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

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 (79) hide show
  1. package/CHANGELOG.md +7 -10
  2. package/README.md +25 -246
  3. package/config.schema.json +400 -1991
  4. package/dist/accessory/abstract/base.js +2 -2
  5. package/dist/accessory/abstract/base.js.map +1 -1
  6. package/dist/accessory/abstract/helper.d.ts +0 -1
  7. package/dist/accessory/abstract/helper.js +0 -19
  8. package/dist/accessory/abstract/helper.js.map +1 -1
  9. package/dist/accessory/abstract/mqtt.d.ts +26 -15
  10. package/dist/accessory/abstract/mqtt.js +148 -29
  11. package/dist/accessory/abstract/mqtt.js.map +1 -1
  12. package/dist/accessory/climate/{temperatureControl.d.ts → climate.d.ts} +2 -3
  13. package/dist/accessory/climate/{temperatureControl.js → climate.js} +5 -7
  14. package/dist/accessory/climate/climate.js.map +1 -0
  15. package/dist/accessory/climate/heaterCooler.d.ts +6 -2
  16. package/dist/accessory/climate/heaterCooler.js +37 -5
  17. package/dist/accessory/climate/heaterCooler.js.map +1 -1
  18. package/dist/accessory/climate/thermostat.d.ts +2 -2
  19. package/dist/accessory/climate/thermostat.js +2 -3
  20. package/dist/accessory/climate/thermostat.js.map +1 -1
  21. package/dist/accessory/lock.d.ts +2 -2
  22. package/dist/accessory/lock.js +3 -3
  23. package/dist/accessory/lock.js.map +1 -1
  24. package/dist/accessory/sensor/sensor.js +2 -2
  25. package/dist/accessory/sensor/sensor.js.map +1 -1
  26. package/dist/homebridge/platform.js +3 -5
  27. package/dist/homebridge/platform.js.map +1 -1
  28. package/dist/homebridge-ui/public/index.html +1 -1
  29. package/dist/homebridge-ui/public/ui.js +1 -1
  30. package/dist/i18n/en.d.ts +0 -155
  31. package/dist/i18n/en.js +1 -156
  32. package/dist/i18n/en.js.map +1 -1
  33. package/dist/i18n/fr.d.ts +0 -155
  34. package/dist/i18n/i18n.d.ts +1 -157
  35. package/dist/i18n/i18n.js +0 -6
  36. package/dist/i18n/i18n.js.map +1 -1
  37. package/dist/i18n/template.d.ts +0 -155
  38. package/dist/model/enums.d.ts +2 -39
  39. package/dist/model/enums.js +0 -39
  40. package/dist/model/enums.js.map +1 -1
  41. package/dist/model/mqtt.d.ts +4 -5
  42. package/dist/model/mqtt.js +25 -41
  43. package/dist/model/mqtt.js.map +1 -1
  44. package/dist/model/types.d.ts +24 -115
  45. package/package.json +1 -1
  46. package/dist/accessory/abstract/common.d.ts +0 -42
  47. package/dist/accessory/abstract/common.js +0 -158
  48. package/dist/accessory/abstract/common.js.map +0 -1
  49. package/dist/accessory/addons/addon.d.ts +0 -24
  50. package/dist/accessory/addons/addon.js +0 -52
  51. package/dist/accessory/addons/addon.js.map +0 -1
  52. package/dist/accessory/addons/filter.d.ts +0 -11
  53. package/dist/accessory/addons/filter.js +0 -37
  54. package/dist/accessory/addons/filter.js.map +0 -1
  55. package/dist/accessory/climate/active.d.ts +0 -11
  56. package/dist/accessory/climate/active.js +0 -44
  57. package/dist/accessory/climate/active.js.map +0 -1
  58. package/dist/accessory/climate/fan2.d.ts +0 -20
  59. package/dist/accessory/climate/fan2.js +0 -122
  60. package/dist/accessory/climate/fan2.js.map +0 -1
  61. package/dist/accessory/climate/purifier.d.ts +0 -19
  62. package/dist/accessory/climate/purifier.js +0 -114
  63. package/dist/accessory/climate/purifier.js.map +0 -1
  64. package/dist/accessory/climate/temperatureControl.js.map +0 -1
  65. package/dist/accessory/garage.d.ts +0 -17
  66. package/dist/accessory/garage.js +0 -110
  67. package/dist/accessory/garage.js.map +0 -1
  68. package/dist/accessory/sensor/air.d.ts +0 -14
  69. package/dist/accessory/sensor/air.js +0 -94
  70. package/dist/accessory/sensor/air.js.map +0 -1
  71. package/dist/accessory/valve.d.ts +0 -14
  72. package/dist/accessory/valve.js +0 -71
  73. package/dist/accessory/valve.js.map +0 -1
  74. package/dist/i18n/ro.d.ts +0 -846
  75. package/dist/i18n/ro.js +0 -381
  76. package/dist/i18n/ro.js.map +0 -1
  77. package/dist/tools/properties.d.ts +0 -11
  78. package/dist/tools/properties.js +0 -73
  79. package/dist/tools/properties.js.map +0 -1
@@ -21,8 +21,8 @@
21
21
  "type": {
22
22
  "type": "string",
23
23
  "title": "${config.title.type}",
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}"],
24
+ "enum": [ "CarbonMonoxideSensor", "CarbonDioxideSensor", "ContactSensor", "HeaterCooler", "HumiditySensor", "LeakSensor", "Lightbulb", "LightSensor", "LockMechanism", "MotionSensor", "OccupancySensor", "Outlet", "SecuritySystem", "SmokeSensor", "Switch", "TemperatureSensor", "Thermostat"],
25
+ "enumNames": ["${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}"],
26
26
  "required": true
27
27
  },
28
28
  "group": {
@@ -53,9 +53,8 @@
53
53
  "broker": {
54
54
  "type": "string",
55
55
  "title": "${config.title.broker}",
56
- "description": "${config.description.broker}",
57
56
  "placeholder": "mqtts://192.168.0.1:1883",
58
- "pattern": "^(https?|mqtts?|wss?|ftp):\\/\\/([\\w.-]+)(:\\d+)?(\\/.*)?$"
57
+ "required": true
59
58
  },
60
59
  "username": {
61
60
  "type": "string",
@@ -69,22 +68,7 @@
69
68
  "type": "string",
70
69
  "title": "${config.title.options}",
71
70
  "description": "${config.description.options}",
72
- "placeholder": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"rejectUnauthorized\": true }",
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
- }
71
+ "placeholder": "{ \"protocolVersion\": \"4\", \"clientId\": \"my-client-id\", \"rejectUnauthorized\": true }"
88
72
  }
89
73
  }
90
74
  },
@@ -124,16 +108,9 @@
124
108
  },
125
109
  "temperatureUnits": {
126
110
  "type": "string",
127
- "title": "${config.title.sourceUnits}",
128
111
  "enum": ["C", "F"],
129
112
  "enumNames": ["${config.enumNames.celsius}", "${config.enumNames.fahrenheit}"]
130
113
  },
131
- "valveType": {
132
- "type": "string",
133
- "title": "${config.title.valveType}",
134
- "enum": ["GENERIC_VALVE", "IRRIGATION", "SHOWER_HEAD", "WATER_FAUCET"],
135
- "enumNames": ["${config.enumNames.valveGeneric}", "${config.enumNames.valveIrrigation}", "${config.enumNames.valveShower}", "${config.enumNames.valveFaucet}"]
136
- },
137
114
  "topicGetBatteryLevel": {
138
115
  "type": "string",
139
116
  "title": "${config.title.topicGetBatteryLevel}"
@@ -366,126 +343,6 @@
366
343
  "type": "string",
367
344
  "title": "${config.title.topicSetTargetHeaterCoolerState}"
368
345
  },
369
- "topicGetValveActive": {
370
- "type": "string",
371
- "title": "${config.title.topicGetValveActive}"
372
- },
373
- "topicSetValveActive": {
374
- "type": "string",
375
- "title": "${config.title.topicSetValveActive}"
376
- },
377
- "topicGetValveInUse": {
378
- "type": "string",
379
- "title": "${config.title.topicGetValveInUse}"
380
- },
381
- "topicGetValveIsConfigured": {
382
- "type": "string",
383
- "title": "${config.title.topicGetValveIsConfigured}"
384
- },
385
- "topicSetValveIsConfigured": {
386
- "type": "string",
387
- "title": "${config.title.topicSetValveIsConfigured}"
388
- },
389
- "topicGetValveRemainingDuration": {
390
- "type": "string",
391
- "title": "${config.title.topicGetValveRemainingDuration}"
392
- },
393
- "topicGetValveSetDuration": {
394
- "type": "string",
395
- "title": "${config.title.topicGetValveSetDuration}"
396
- },
397
- "topicSetValveSetDuration": {
398
- "type": "string",
399
- "title": "${config.title.topicSetValveSetDuration}"
400
- },
401
- "topicGetCurrentPurifierState": {
402
- "type": "string",
403
- "title": "${config.title.topicGetCurrentPurifierState}"
404
- },
405
- "topicGetTargetPurifierState": {
406
- "type": "string",
407
- "title": "${config.title.topicGetTargetPurifierState}"
408
- },
409
- "topicSetTargetPurifierState": {
410
- "type": "string",
411
- "title": "${config.title.topicSetTargetPurifierState}"
412
- },
413
- "topicGetFilterChangeIndication": {
414
- "type": "string",
415
- "title": "${config.title.topicGetFilterChangeIndication}"
416
- },
417
- "topicGetFilterLifeLevel": {
418
- "type": "string",
419
- "title": "${config.title.topicGetFilterLifeLevel}"
420
- },
421
- "topicResetFilterIndication": {
422
- "type": "string",
423
- "title": "${config.title.topicResetFilterIndication}"
424
- },
425
- "topicGetCurrentDoorState": {
426
- "type": "string",
427
- "title": "${config.title.topicGetCurrentDoorState}"
428
- },
429
- "topicGetObstructionDetected": {
430
- "type": "string",
431
- "title": "${config.title.topicGetObstructionDetected}"
432
- },
433
- "topicGetTargetDoorState": {
434
- "type": "string",
435
- "title": "${config.title.topicGetTargetDoorState}"
436
- },
437
- "topicSetTargetDoorState": {
438
- "type": "string",
439
- "title": "${config.title.topicSetTargetDoorState}"
440
- },
441
- "topicGetCurrentFanState": {
442
- "type": "string",
443
- "title": "${config.title.topicGetCurrentFanState}"
444
- },
445
- "topicGetRotationDirection": {
446
- "type": "string",
447
- "title": "${config.title.topicGetRotationDirection}"
448
- },
449
- "topicGetTargetFanState": {
450
- "type": "string",
451
- "title": "${config.title.topicGetTargetFanState}"
452
- },
453
- "topicSetRotationDirection": {
454
- "type": "string",
455
- "title": "${config.title.topicSetRotationDirection}"
456
- },
457
- "topicSetTargetFanState": {
458
- "type": "string",
459
- "title": "${config.title.topicSetTargetFanState}"
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
- },
489
346
  "valueBatteryLow": {
490
347
  "type": "string",
491
348
  "title": "${config.title.valueBatteryLow}"
@@ -622,1348 +479,132 @@
622
479
  "type": "string",
623
480
  "title": "${config.title.valueSwingDisabled}"
624
481
  },
625
- "valueActive": {
626
- "type": "string",
627
- "title": "${config.title.valueActive}"
628
- },
629
- "valueConfigured": {
630
- "type": "string",
631
- "title": "${config.title.valueConfigured}"
632
- },
633
- "valueNotConfigured": {
634
- "type": "string",
635
- "title": "${config.title.valueNotConfigured}"
636
- },
637
- "valueInUse": {
638
- "type": "string",
639
- "title": "${config.title.valueInUse}"
640
- },
641
- "valueInactive": {
642
- "type": "string",
643
- "title": "${config.title.valueInactive}"
644
- },
645
- "valueModeManual": {
646
- "type": "string",
647
- "title": "${config.title.valueModeManual}"
648
- },
649
- "valueModePurifying": {
650
- "type": "string",
651
- "title": "${config.title.valueModePurifying}"
652
- },
653
- "valueFilterChange": {
654
- "type": "string",
655
- "title": "${config.title.valueFilterChange}"
656
- },
657
- "valueFilterReset": {
658
- "type": "string",
659
- "title": "${config.title.valueFilterReset}"
660
- },
661
- "valueDoorObstructed": {
662
- "type": "string",
663
- "title": "${config.title.valueDoorObstructed}"
664
- },
665
- "valueDoorStateClosed": {
666
- "type": "string",
667
- "title": "${config.title.valueDoorStateClosed}"
668
- },
669
- "valueDoorStateClosing": {
670
- "type": "string",
671
- "title": "${config.title.valueDoorStateClosing}"
672
- },
673
- "valueDoorStateOpen": {
674
- "type": "string",
675
- "title": "${config.title.valueDoorStateOpen}"
676
- },
677
- "valueDoorStateOpening": {
678
- "type": "string",
679
- "title": "${config.title.valueDoorStateOpening}"
680
- },
681
- "valueDoorStateStopped": {
682
- "type": "string",
683
- "title": "${config.title.valueDoorStateStopped}"
684
- },
685
- "valueDirectionClockwise": {
686
- "type": "string",
687
- "title": "${config.title.valueDirectionClockwise}"
688
- },
689
- "valueDirectionCounterClockwise": {
690
- "type": "string",
691
- "title": "${config.title.valueDirectionCounterClockwise}"
692
- },
693
- "valueModeBlowing": {
694
- "type": "string",
695
- "title": "${config.title.valueModeBlowing}"
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
- },
721
- "resetOnRestart": {
722
- "type": "boolean",
723
- "title": "${config.title.resetOnRestart}"
724
- },
725
482
  "disableLogging": {
726
483
  "type": "boolean",
727
484
  "title": "${config.title.disableLogging}"
728
485
  }
729
- },
730
- "allOf": [
731
- {
732
- "if": {
733
- "properties": {
734
- "info": {
735
- "properties": {
736
- "type" : {
737
- "enum": ["Lightbulb", "Outlet", "Switch"]
738
- }
739
- }
740
- }
741
- }
742
- },
743
- "then": {
744
- "required": ["topicGetOn", "topicSetOn", "valueOn", "valueOff"]
745
- }
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
- },
486
+ }
487
+ },
488
+ "default": []
489
+ },
490
+ "verbose": {
491
+ "type": "boolean",
492
+ "default": false
493
+ }
494
+ }
495
+ },
496
+ "layout": [
497
+ {
498
+ "type": "array",
499
+ "key": "accessories",
500
+ "notitle": true,
501
+ "items": [
502
+ {
503
+ "type": "fieldset",
504
+ "expandable": true,
505
+ "title": "${config.title.accessory}",
506
+ "items": [
770
507
  {
771
- "if": {
772
- "properties": {
773
- "info": {
774
- "properties": {
775
- "type" : {
776
- "const": "CarbonDioxideSensor"
777
- }
778
- }
779
- }
508
+ "type": "div",
509
+ "displayFlex": true,
510
+ "flex-direction": "row",
511
+ "items": [
512
+ {
513
+ "key": "accessories[].info.name",
514
+ "flex": "0 0 33%"
515
+ },
516
+ {
517
+ "key": "accessories[].info.type",
518
+ "flex": "0 0 33%"
519
+ },
520
+ {
521
+ "key": "accessories[].info.group",
522
+ "flex": "0 0 33%"
780
523
  }
781
- },
782
- "then": {
783
- "required": ["topicGetCarbonDioxideDetected", "valueCarbonDioxideDetected"]
784
- }
524
+ ]
785
525
  },
526
+ "accessories[].mqtt.broker",
786
527
  {
787
- "if": {
788
- "properties": {
789
- "info": {
790
- "properties": {
791
- "type" : {
792
- "const": "CarbonMonoxideSensor"
793
- }
794
- }
795
- }
528
+ "type": "div",
529
+ "displayFlex": true,
530
+ "flex-direction": "row",
531
+ "items": [
532
+ {
533
+ "key": "accessories[].mqtt.username",
534
+ "flex": "0 0 50%"
535
+ },
536
+ {
537
+ "key": "accessories[].mqtt.password",
538
+ "flex": "0 0 50%"
796
539
  }
797
- },
798
- "then": {
799
- "required": ["topicGetCarbonMonoxideDetected", "valueCarbonMonoxideDetected"]
800
- }
540
+ ]
801
541
  },
542
+ "accessories[].mqtt.options",
543
+ "accessories[].disableLogging",
802
544
  {
803
- "if": {
804
- "properties": {
805
- "info": {
806
- "properties": {
807
- "type" : {
808
- "const": "ContactSensor"
809
- }
810
- }
811
- }
812
- }
545
+ "type": "fieldset",
546
+ "title": "${config.title.topics}",
547
+ "description": "${config.description.topics}",
548
+ "condition": {
549
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
813
550
  },
814
- "then": {
815
- "required": ["topicGetContactSensorState", "valueContactDetected"]
816
- }
817
- },
818
- {
819
- "if": {
820
- "properties": {
821
- "info": {
822
- "properties": {
823
- "type" : {
824
- "const": "HumiditySensor"
825
- }
551
+ "items": [
552
+ {
553
+ "type": "fieldset",
554
+ "notitle": true,
555
+ "condition": {
556
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LockMechanism';"
557
+ },
558
+ "items": [
559
+ {
560
+ "type": "div",
561
+ "displayFlex": true,
562
+ "flex-direction": "row",
563
+ "items": [
564
+ {
565
+ "key": "accessories[].topicGetCurrentLockState",
566
+ "flex": "0 0 50%"
567
+ }
568
+ ]
569
+ },
570
+ {
571
+ "type": "div",
572
+ "displayFlex": true,
573
+ "flex-direction": "row",
574
+ "items": [
575
+ {
576
+ "key": "accessories[].topicGetTargetLockState",
577
+ "flex": "0 0 50%"
578
+ },
579
+ {
580
+ "key": "accessories[].topicSetTargetLockState",
581
+ "flex": "0 0 50%"
582
+ }
583
+ ]
826
584
  }
827
- }
828
- }
829
- },
830
- "then": {
831
- "required": ["topicGetCurrentRelativeHumidity"]
832
- }
833
- },
834
- {
835
- "if": {
836
- "properties": {
837
- "info": {
838
- "properties": {
839
- "type" : {
840
- "const": "LeakSensor"
841
- }
842
- }
843
- }
844
- }
845
- },
846
- "then": {
847
- "required": ["topicGetLeakDetected", "valueLeakDetected"]
848
- }
849
- },
850
- {
851
- "if": {
852
- "properties": {
853
- "info": {
854
- "properties": {
855
- "type" : {
856
- "const": "LightSensor"
857
- }
858
- }
859
- }
860
- }
861
- },
862
- "then": {
863
- "required": ["topicGetCurrentAmbientLightLevel"]
864
- }
865
- },
866
- {
867
- "if": {
868
- "properties": {
869
- "info": {
870
- "properties": {
871
- "type" : {
872
- "const": "MotionSensor"
873
- }
874
- }
875
- }
876
- }
877
- },
878
- "then": {
879
- "required": ["topicGetMotionDetected", "valueMotionDetected"]
880
- }
881
- },
882
- {
883
- "if": {
884
- "properties": {
885
- "info": {
886
- "properties": {
887
- "type" : {
888
- "const": "OccupancySensor"
889
- }
890
- }
891
- }
892
- }
893
- },
894
- "then": {
895
- "required": ["topicGetOccupancyDetected", "valueOccupancyDetected"]
896
- }
897
- },
898
- {
899
- "if": {
900
- "properties": {
901
- "info": {
902
- "properties": {
903
- "type" : {
904
- "const": "SmokeSensor"
905
- }
906
- }
907
- }
908
- }
909
- },
910
- "then": {
911
- "required": ["topicGetSmokeDetected", "valueSmokeDetected"]
912
- }
913
- },
914
- {
915
- "if": {
916
- "properties": {
917
- "info": {
918
- "properties": {
919
- "type" : {
920
- "const": "TemperatureSensor"
921
- }
922
- }
923
- }
924
- }
925
- },
926
- "then": {
927
- "required": ["topicGetCurrentTemperature"]
928
- }
929
- },
930
- {
931
- "if": {
932
- "properties": {
933
- "info": {
934
- "properties": {
935
- "type" : {
936
- "const": "AirPurifier"
937
- }
938
- }
939
- }
940
- }
941
- },
942
- "then": {
943
- "required": ["topicGetActive", "topicSetActive", "topicGetCurrentPurifierState", "topicGetTargetPurifierState", "topicSetTargetPurifierState", "valueStateActive", "valueStateInactive"],
944
- "anyOf": [
945
- { "required": ["valueModeIdle"] },
946
- { "required": ["valueModeInactive"] },
947
- { "required": ["valueModePurifying"] }
948
- ]
949
- }
950
- },
951
- {
952
- "if": {
953
- "properties": {
954
- "info": {
955
- "properties": {
956
- "type" : {
957
- "const": "AirPurifier"
958
- }
959
- }
960
- }
961
- }
962
- },
963
- "then": {
964
- "anyOf": [
965
- { "required": ["valueModeAuto"] },
966
- { "required": ["valueModeManual"] }
967
- ]
968
- }
969
- },
970
- {
971
- "if": {
972
- "properties": {
973
- "info": {
974
- "properties": {
975
- "type" : {
976
- "const": "Fanv2"
977
- }
978
- }
979
- }
980
- }
981
- },
982
- "then": {
983
- "required": ["topicGetActive", "topicSetActive", "valueStateActive", "valueStateInactive"]
984
- }
985
- },
986
- {
987
- "if": {
988
- "properties": {
989
- "info": {
990
- "properties": {
991
- "type" : {
992
- "const": "HeaterCooler"
993
- }
994
- }
995
- }
996
- }
997
- },
998
- "then": {
999
- "required": ["topicGetActive", "topicSetActive", "topicGetCurrentHeaterCoolerState", "topicGetCurrentTemperature", "topicGetTargetHeaterCoolerState", "topicSetTargetHeaterCoolerState", "valueStateActive", "valueStateInactive"],
1000
- "anyOf": [
1001
- { "required": ["valueModeCool"] },
1002
- { "required": ["valueModeHeat"] },
1003
- { "required": ["valueModeIdle"] },
1004
- { "required": ["valueModeInactive"] }
1005
- ]
1006
- }
1007
- },
1008
- {
1009
- "if": {
1010
- "properties": {
1011
- "info": {
1012
- "properties": {
1013
- "type" : {
1014
- "const": "HeaterCooler"
1015
- }
1016
- }
1017
- }
1018
- }
1019
- },
1020
- "then": {
1021
- "anyOf": [
1022
- { "required": ["valueModeAuto"] },
1023
- { "required": ["valueModeHeat"] },
1024
- { "required": ["valueModeCool"] }
1025
- ]
1026
- }
1027
- },
1028
- {
1029
- "if": {
1030
- "properties": {
1031
- "info": {
1032
- "properties": {
1033
- "type" : {
1034
- "const": "Thermostat"
1035
- }
1036
- }
1037
- }
1038
- }
1039
- },
1040
- "then": {
1041
- "required": ["topicGetCurrentHeatingCoolingState", "topicGetTargetHeatingCoolingState", "topicSetTargetHeatingCoolingState", "topicGetCurrentTemperature", "topicGetTargetTemperature", "topicSetTargetTemperature"],
1042
- "anyOf": [
1043
- { "required": ["valueModeCool"] },
1044
- { "required": ["valueModeHeat"] },
1045
- { "required": ["valueModeOff"] }
1046
- ]
1047
- }
1048
- },
1049
- {
1050
- "if": {
1051
- "properties": {
1052
- "info": {
1053
- "properties": {
1054
- "type" : {
1055
- "const": "GarageDoorOpener"
1056
- }
1057
- }
1058
- }
1059
- }
1060
- },
1061
- "then": {
1062
- "required": ["topicGetCurrentDoorState", "topicGetTargetDoorState", "topicSetTargetDoorState", "topicGetObstructionDetected", "valueDoorObstructed"],
1063
- "anyOf": [
1064
- { "required": ["valueDoorStateOpen"] },
1065
- { "required": ["valueDoorStateClosed"] }
1066
- ]
1067
- }
1068
- },
1069
- {
1070
- "if": {
1071
- "properties": {
1072
- "info": {
1073
- "properties": {
1074
- "type" : {
1075
- "const": "LockMechanism"
1076
- }
1077
- }
1078
- }
1079
- }
1080
- },
1081
- "then": {
1082
- "required": ["topicGetCurrentLockState", "topicGetTargetLockState", "topicSetTargetLockState", "valueLockStateSecured", "valueLockStateUnsecured"]
1083
- }
1084
- },
1085
- {
1086
- "if": {
1087
- "properties": {
1088
- "info": {
1089
- "properties": {
1090
- "type" : {
1091
- "const": "SecuritySystem"
1092
- }
1093
- }
1094
- }
1095
- }
1096
- },
1097
- "then": {
1098
- "required": ["topicGetCurrentSecurityState", "topicGetTargetSecurityState", "topicSetTargetSecurityState"],
1099
- "anyOf": [
1100
- { "required": ["valueArmStay"] },
1101
- { "required": ["valueArmAway"] },
1102
- { "required": ["valueArmNight"] },
1103
- { "required": ["valueDisarm"] }
1104
- ]
1105
- }
1106
- },
1107
- {
1108
- "if": {
1109
- "properties": {
1110
- "info": {
1111
- "properties": {
1112
- "type" : {
1113
- "const": "Valve"
1114
- }
1115
- }
1116
- }
1117
- }
1118
- },
1119
- "then": {
1120
- "required": ["topicGetValveActive", "topicGetValveInUse", "topicSetValveActive", "valueActive", "valueInactive", "valueInUse"]
1121
- }
1122
- },
1123
- {
1124
- "if": {
1125
- "properties": {
1126
- "topicGetLockPhysicalControls": {
1127
- "minLength": 1
1128
- }
1129
- },
1130
- "required": ["topicGetLockPhysicalControls"]
1131
- },
1132
- "then": {
1133
- "required": ["valueControlLock"]
1134
- }
1135
- },
1136
- {
1137
- "if": {
1138
- "properties": {
1139
- "topicSetLockPhysicalControls": {
1140
- "minLength": 1
1141
- }
1142
- },
1143
- "required": ["topicSetLockPhysicalControls"]
1144
- },
1145
- "then": {
1146
- "required": ["valueControlLock", "valueControlUnlock"]
1147
- }
1148
- },
1149
- {
1150
- "if": {
1151
- "properties": {
1152
- "topicGetSwingMode": {
1153
- "minLength": 1
1154
- }
1155
- },
1156
- "required": ["topicGetSwingMode"]
1157
- },
1158
- "then": {
1159
- "required": ["valueSwingEnabled"]
1160
- }
1161
- },
1162
- {
1163
- "if": {
1164
- "properties": {
1165
- "topicSetSwingMode": {
1166
- "minLength": 1
1167
- }
1168
- },
1169
- "required": ["topicSetSwingMode"]
1170
- },
1171
- "then": {
1172
- "required": ["valueSwingEnabled", "valueSwingDisabled"]
1173
- }
1174
- },
1175
- {
1176
- "if": {
1177
- "properties": {
1178
- "topicGetBatteryLow": {
1179
- "minLength": 1
1180
- }
1181
- },
1182
- "required": ["topicGetBatteryLow"]
1183
- },
1184
- "then": {
1185
- "required": ["valueBatteryLow"]
1186
- }
1187
- },
1188
- {
1189
- "if": {
1190
- "properties": {
1191
- "topicGetStatusActive": {
1192
- "minLength": 1
1193
- }
1194
- },
1195
- "required": ["topicGetStatusActive"]
1196
- },
1197
- "then": {
1198
- "required": ["valueStatusActive"]
1199
- }
1200
- },
1201
- {
1202
- "if": {
1203
- "properties": {
1204
- "topicGetStatusFault": {
1205
- "minLength": 1
1206
- }
1207
- },
1208
- "required": ["topicGetStatusFault"]
1209
- },
1210
- "then": {
1211
- "required": ["valueFault"]
1212
- }
1213
- },
1214
- {
1215
- "if": {
1216
- "properties": {
1217
- "topicGetStatusTampered": {
1218
- "minLength": 1
1219
- }
1220
- },
1221
- "required": ["topicGetStatusTampered"]
1222
- },
1223
- "then": {
1224
- "required": ["valueTampered"]
1225
- }
1226
- },
1227
- {
1228
- "if": {
1229
- "properties": {
1230
- "topicGetOutletInUse": {
1231
- "minLength": 1
1232
- }
1233
- },
1234
- "required": ["topicGetOutletInUse"]
1235
- },
1236
- "then": {
1237
- "required": ["valueOutletInUse"]
1238
- }
1239
- },
1240
- {
1241
- "if": {
1242
- "properties": {
1243
- "topicGetValveIsConfigured": {
1244
- "minLength": 1
1245
- }
1246
- },
1247
- "required": ["topicGetValveIsConfigured"]
1248
- },
1249
- "then": {
1250
- "required": ["valueConfigured"]
1251
- }
1252
- },
1253
- {
1254
- "if": {
1255
- "properties": {
1256
- "topicSetValveIsConfigured": {
1257
- "minLength": 1
1258
- }
1259
- },
1260
- "required": ["topicSetValveIsConfigured"]
1261
- },
1262
- "then": {
1263
- "required": ["valueConfigured", "valueNotConfigured"]
1264
- }
1265
- },
1266
- {
1267
- "if": {
1268
- "properties": {
1269
- "topicGetFilterChangeIndication": {
1270
- "minLength": 1
1271
- }
1272
- },
1273
- "required": ["topicGetFilterChangeIndication"]
1274
- },
1275
- "then": {
1276
- "required": ["valueFilterChange"]
1277
- }
1278
- },
1279
- {
1280
- "if": {
1281
- "properties": {
1282
- "topicGetFilterLifeLevel": {
1283
- "minLength": 1
1284
- }
1285
- },
1286
- "required": ["topicGetFilterLifeLevel"]
1287
- },
1288
- "then": {
1289
- "required": ["topicGetFilterChangeIndication"]
1290
- }
1291
- },
1292
- {
1293
- "if": {
1294
- "properties": {
1295
- "topicResetFilterIndication": {
1296
- "minLength": 1
1297
- }
1298
- },
1299
- "required": ["topicResetFilterIndication"]
1300
- },
1301
- "then": {
1302
- "required": ["topicGetFilterChangeIndication", "valueFilterReset"]
1303
- }
1304
- },
1305
- {
1306
- "if": {
1307
- "properties": {
1308
- "topicGetCurrentLockState": {
1309
- "minLength": 1
1310
- }
1311
- },
1312
- "required": ["topicGetCurrentLockState"]
1313
- },
1314
- "then": {
1315
- "required": ["valueLockStateSecured", "valueLockStateUnsecured"]
1316
- }
1317
- },
1318
- {
1319
- "if": {
1320
- "properties": {
1321
- "topicGetTargetLockState": {
1322
- "minLength": 1
1323
- }
1324
- },
1325
- "required": ["topicGetTargetLockState"]
1326
- },
1327
- "then": {
1328
- "required": ["topicGetCurrentLockState", "topicSetTargetLockState"]
1329
- }
1330
- },
1331
- {
1332
- "if": {
1333
- "properties": {
1334
- "topicSetTargetLockState": {
1335
- "minLength": 1
1336
- }
1337
- },
1338
- "required": ["topicSetTargetLockState"]
1339
- },
1340
- "then": {
1341
- "required": ["topicGetTargetLockState"]
1342
- }
1343
- },
1344
- {
1345
- "if": {
1346
- "properties": {
1347
- "topicGetCurrentFanState": {
1348
- "minLength": 1
1349
- }
1350
- },
1351
- "required": ["topicGetCurrentFanState"]
1352
- },
1353
- "then": {
1354
- "anyOf": [
1355
- { "required": ["valueModeInactive"] },
1356
- { "required": ["valueModeIdle"] },
1357
- { "required": ["valueModeBlowing"] }
1358
- ]
1359
- }
1360
- },
1361
- {
1362
- "if": {
1363
- "properties": {
1364
- "topicGetTargetFanState": {
1365
- "minLength": 1
1366
- }
1367
- },
1368
- "required": ["topicGetTargetFanState"]
1369
- },
1370
- "then": {
1371
- "required": ["topicSetTargetFanState"],
1372
- "anyOf": [
1373
- { "required": ["valueModeAuto"] },
1374
- { "required": ["valueModeManual"] }
1375
- ]
1376
- }
1377
- },
1378
- {
1379
- "if": {
1380
- "properties": {
1381
- "topicSetTargetFanState": {
1382
- "minLength": 1
1383
- }
1384
- },
1385
- "required": ["topicSetTargetFanState"]
1386
- },
1387
- "then": {
1388
- "required": ["topicGetTargetFanState"]
1389
- }
1390
- },
1391
- {
1392
- "if": {
1393
- "properties": {
1394
- "topicGetRotationDirection": {
1395
- "minLength": 1
1396
- }
1397
- },
1398
- "required": ["topicGetRotationDirection"]
1399
- },
1400
- "then": {
1401
- "required": ["topicSetRotationDirection", "valueDirectionClockwise", "valueDirectionCounterClockwise"]
1402
- }
1403
- },
1404
- {
1405
- "if": {
1406
- "properties": {
1407
- "topicSetRotationDirection": {
1408
- "minLength": 1
1409
- }
1410
- },
1411
- "required": ["topicSetRotationDirection"]
1412
- },
1413
- "then": {
1414
- "required": ["topicGetRotationDirection"]
1415
- }
1416
- }
1417
- ]
1418
- },
1419
- "default": []
1420
- },
1421
- "verbose": {
1422
- "type": "boolean",
1423
- "default": false
1424
- }
1425
- }
1426
- },
1427
- "layout": [
1428
- {
1429
- "type": "array",
1430
- "key": "accessories",
1431
- "notitle": true,
1432
- "items": [
1433
- {
1434
- "type": "fieldset",
1435
- "expandable": true,
1436
- "title": "${config.title.accessory}",
1437
- "items": [
1438
- {
1439
- "type": "div",
1440
- "displayFlex": true,
1441
- "flex-direction": "row",
1442
- "items": [
1443
- {
1444
- "key": "accessories[].info.name",
1445
- "flex": "0 0 33%"
1446
- },
1447
- {
1448
- "key": "accessories[].info.type",
1449
- "flex": "0 0 33%"
1450
- },
1451
- {
1452
- "key": "accessories[].info.group",
1453
- "flex": "0 0 33%"
1454
- }
1455
- ]
1456
- },
1457
- {
1458
- "type": "fieldset",
1459
- "notitle": true,
1460
- "condition": {
1461
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Valve';"
1462
- },
1463
- "items": [
1464
- {
1465
- "type": "div",
1466
- "displayFlex": true,
1467
- "flex-direction": "row",
1468
- "items": [
1469
- {
1470
- "key": "accessories[].valveType",
1471
- "flex": "0 0 33%"
1472
- }
1473
- ]
1474
- }
1475
- ]
1476
- },
1477
- "accessories[].mqtt.broker",
1478
- {
1479
- "type": "div",
1480
- "displayFlex": true,
1481
- "flex-direction": "row",
1482
- "items": [
1483
- {
1484
- "key": "accessories[].mqtt.username",
1485
- "flex": "0 0 50%"
1486
- },
1487
- {
1488
- "key": "accessories[].mqtt.password",
1489
- "flex": "0 0 50%"
1490
- }
1491
- ]
1492
- },
1493
- "accessories[].mqtt.options",
1494
- {
1495
- "type": "div",
1496
- "displayFlex": true,
1497
- "flex-direction": "row",
1498
- "items": [
1499
- {
1500
- "key": "accessories[].resetOnRestart",
1501
- "flex": "0 0 25%"
1502
- },
1503
- {
1504
- "key": "accessories[].disableLogging",
1505
- "flex": "0 0 25%"
1506
- }
1507
- ]
1508
- },
1509
- {
1510
- "type": "fieldset",
1511
- "title": "${config.title.topics}",
1512
- "description": "${config.description.topics}",
1513
- "condition": {
1514
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
1515
- },
1516
- "items": [
1517
- {
1518
- "type": "fieldset",
1519
- "notitle": true,
1520
- "condition": {
1521
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'GarageDoorOpener';"
1522
- },
1523
- "items": [
1524
- {
1525
- "type": "div",
1526
- "displayFlex": true,
1527
- "flex-direction": "row",
1528
- "items": [
1529
- {
1530
- "key": "accessories[].topicGetCurrentDoorState",
1531
- "flex": "0 0 50%"
1532
- },
1533
- {
1534
- "key": "accessories[].topicGetObstructionDetected",
1535
- "flex": "0 0 50%"
1536
- }
1537
- ]
1538
- },
1539
- {
1540
- "type": "div",
1541
- "displayFlex": true,
1542
- "flex-direction": "row",
1543
- "items": [
1544
- {
1545
- "key": "accessories[].topicGetTargetDoorState",
1546
- "flex": "0 0 50%"
1547
- },
1548
- {
1549
- "key": "accessories[].topicSetTargetDoorState",
1550
- "flex": "0 0 50%"
1551
- }
1552
- ]
1553
- },
1554
- {
1555
- "type": "div",
1556
- "displayFlex": true,
1557
- "flex-direction": "row",
1558
- "items": [
1559
- {
1560
- "key": "accessories[].topicGetCurrentLockState",
1561
- "title": "${config.title.topicGetCurrentLockStateOptional}",
1562
- "flex": "0 0 50%"
1563
- }
1564
- ]
1565
- },
1566
- {
1567
- "type": "div",
1568
- "displayFlex": true,
1569
- "flex-direction": "row",
1570
- "items": [
1571
- {
1572
- "key": "accessories[].topicGetTargetLockState",
1573
- "title": "${config.title.topicGetTargetLockStateOptional}",
1574
- "flex": "0 0 50%"
1575
- },
1576
- {
1577
- "key": "accessories[].topicSetTargetLockState",
1578
- "title": "${config.title.topicSetTargetLockStateOptional}",
1579
- "flex": "0 0 50%"
1580
- }
1581
- ]
1582
- }
1583
- ]
1584
- },
1585
- {
1586
- "type": "fieldset",
1587
- "notitle": true,
1588
- "condition": {
1589
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LockMechanism';"
1590
- },
1591
- "items": [
1592
- {
1593
- "type": "div",
1594
- "displayFlex": true,
1595
- "flex-direction": "row",
1596
- "items": [
1597
- {
1598
- "key": "accessories[].topicGetCurrentLockState",
1599
- "flex": "0 0 50%"
1600
- }
1601
- ]
1602
- },
1603
- {
1604
- "type": "div",
1605
- "displayFlex": true,
1606
- "flex-direction": "row",
1607
- "items": [
1608
- {
1609
- "key": "accessories[].topicGetTargetLockState",
1610
- "flex": "0 0 50%"
1611
- },
1612
- {
1613
- "key": "accessories[].topicSetTargetLockState",
1614
- "flex": "0 0 50%"
1615
- }
1616
- ]
1617
- }
1618
- ]
1619
- },
1620
- {
1621
- "type": "fieldset",
1622
- "notitle": true,
1623
- "condition": {
1624
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Valve';"
1625
- },
1626
- "items": [
1627
- {
1628
- "type": "div",
1629
- "displayFlex": true,
1630
- "flex-direction": "row",
1631
- "items": [
1632
- {
1633
- "key": "accessories[].topicGetValveActive",
1634
- "flex": "0 0 50%"
1635
- },
1636
- {
1637
- "key": "accessories[].topicSetValveActive",
1638
- "flex": "0 0 50%"
1639
- }
1640
- ]
1641
- },
1642
- {
1643
- "type": "div",
1644
- "displayFlex": true,
1645
- "flex-direction": "row",
1646
- "items": [
1647
- {
1648
- "key": "accessories[].topicGetValveInUse",
1649
- "flex": "0 0 50%"
1650
- }
1651
- ]
1652
- },
1653
- {
1654
- "type": "div",
1655
- "displayFlex": true,
1656
- "flex-direction": "row",
1657
- "items": [
1658
- {
1659
- "key": "accessories[].topicGetValveIsConfigured",
1660
- "flex": "0 0 50%"
1661
- },
1662
- {
1663
- "key": "accessories[].topicSetValveIsConfigured",
1664
- "flex": "0 0 50%"
1665
- }
1666
- ]
1667
- },
1668
- {
1669
- "type": "div",
1670
- "displayFlex": true,
1671
- "flex-direction": "row",
1672
- "items": [
1673
- {
1674
- "key": "accessories[].topicGetValveSetDuration",
1675
- "flex": "0 0 50%"
1676
- },
1677
- {
1678
- "key": "accessories[].topicSetValveSetDuration",
1679
- "flex": "0 0 50%"
1680
- }
1681
- ]
1682
- },
1683
- {
1684
- "type": "div",
1685
- "displayFlex": true,
1686
- "flex-direction": "row",
1687
- "items": [
1688
- {
1689
- "key": "accessories[].topicGetValveRemainingDuration",
1690
- "flex": "0 0 50%"
1691
- }
1692
- ]
1693
- },
1694
- {
1695
- "type": "div",
1696
- "displayFlex": true,
1697
- "flex-direction": "row",
1698
- "items": [
1699
- {
1700
- "key": "accessories[].topicGetStatusFault",
1701
- "flex": "0 0 50%"
1702
- }
1703
- ]
1704
- }
1705
- ]
1706
- },
1707
- {
1708
- "type": "fieldset",
1709
- "notitle": true,
1710
- "condition": {
1711
- "functionBody": "return ['Lightbulb', 'Outlet', 'Switch'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1712
- },
1713
- "items": [
1714
- {
1715
- "type": "div",
1716
- "displayFlex": true,
1717
- "flex-direction": "row",
1718
- "items": [
1719
- {
1720
- "key": "accessories[].topicGetOn",
1721
- "flex": "0 0 50%"
1722
- },
1723
- {
1724
- "key": "accessories[].topicSetOn",
1725
- "flex": "0 0 50%"
1726
- }
1727
- ]
1728
- }
1729
- ]
1730
- },
1731
- {
1732
- "type": "fieldset",
1733
- "notitle": true,
1734
- "condition": {
1735
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Lightbulb';"
1736
- },
1737
- "items": [
1738
- {
1739
- "type": "div",
1740
- "displayFlex": true,
1741
- "flex-direction": "row",
1742
- "items": [
1743
- {
1744
- "key": "accessories[].topicGetBrightness",
1745
- "flex": "0 0 50%"
1746
- },
1747
- {
1748
- "key": "accessories[].topicSetBrightness",
1749
- "flex": "0 0 50%"
1750
- }
1751
- ]
1752
- },
1753
- {
1754
- "type": "div",
1755
- "displayFlex": true,
1756
- "flex-direction": "row",
1757
- "items": [
1758
- {
1759
- "key": "accessories[].topicGetHue",
1760
- "flex": "0 0 50%"
1761
- },
1762
- {
1763
- "key": "accessories[].topicSetHue",
1764
- "flex": "0 0 50%"
1765
- }
1766
- ]
1767
- },
1768
- {
1769
- "type": "div",
1770
- "displayFlex": true,
1771
- "flex-direction": "row",
1772
- "items": [
1773
- {
1774
- "key": "accessories[].topicGetColorTemperature",
1775
- "flex": "0 0 50%"
1776
- },
1777
- {
1778
- "key": "accessories[].topicSetColorTemperature",
1779
- "flex": "0 0 50%"
1780
- }
1781
- ]
1782
- },
1783
- {
1784
- "type": "div",
1785
- "displayFlex": true,
1786
- "flex-direction": "row",
1787
- "items": [
1788
- {
1789
- "key": "accessories[].topicGetSaturation",
1790
- "flex": "0 0 50%"
1791
- },
1792
- {
1793
- "key": "accessories[].topicSetSaturation",
1794
- "flex": "0 0 50%"
1795
- }
1796
- ]
1797
- }
1798
- ]
1799
- },
1800
- {
1801
- "type": "fieldset",
1802
- "notitle": true,
1803
- "condition": {
1804
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Outlet';"
1805
- },
1806
- "items": [
1807
- {
1808
- "type": "div",
1809
- "displayFlex": true,
1810
- "flex-direction": "row",
1811
- "items": [
1812
- {
1813
- "key": "accessories[].topicGetOutletInUse",
1814
- "flex": "0 0 50%"
1815
- }
1816
- ]
1817
- }
1818
- ]
1819
- },
1820
- {
1821
- "type": "fieldset",
1822
- "notitle": true,
1823
- "condition": {
1824
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'SecuritySystem';"
1825
- },
1826
- "items": [
1827
- {
1828
- "type": "div",
1829
- "displayFlex": true,
1830
- "flex-direction": "row",
1831
- "items": [
1832
- {
1833
- "key": "accessories[].topicGetCurrentSecurityState",
1834
- "flex": "0 0 50%"
1835
- }
1836
- ]
1837
- },
1838
- {
1839
- "type": "div",
1840
- "displayFlex": true,
1841
- "flex-direction": "row",
1842
- "items": [
1843
- {
1844
- "key": "accessories[].topicGetTargetSecurityState",
1845
- "flex": "0 0 50%"
1846
- },
1847
- {
1848
- "key": "accessories[].topicSetTargetSecurityState",
1849
- "flex": "0 0 50%"
1850
- }
1851
- ]
1852
- },
1853
- {
1854
- "type": "div",
1855
- "displayFlex": true,
1856
- "flex-direction": "row",
1857
- "items": [
1858
- {
1859
- "key": "accessories[].topicGetStatusTampered",
1860
- "flex": "0 0 50%"
1861
- },
1862
- {
1863
- "key": "accessories[].topicGetStatusFault",
1864
- "flex": "0 0 50%"
1865
- }
1866
- ]
1867
- }
1868
- ]
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
- },
1935
- {
1936
- "type": "fieldset",
1937
- "notitle": true,
1938
- "condition": {
1939
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'CarbonDioxideSensor';"
1940
- },
1941
- "items": [
1942
- {
1943
- "type": "div",
1944
- "displayFlex": true,
1945
- "flex-direction": "row",
1946
- "items": [
1947
- {
1948
- "key": "accessories[].topicGetCarbonDioxideDetected",
1949
- "flex": "0 0 50%"
1950
- }
1951
- ]
1952
- },
1953
- {
1954
- "type": "div",
1955
- "displayFlex": true,
1956
- "flex-direction": "row",
1957
- "items": [
1958
- {
1959
- "key": "accessories[].topicGetCarbonDioxideLevel",
1960
- "flex": "0 0 50%"
1961
- },
1962
- {
1963
- "key": "accessories[].topicGetCarbonDioxidePeakLevel",
1964
- "flex": "0 0 50%"
1965
- }
1966
- ]
585
+ ]
586
+ },
587
+ {
588
+ "type": "fieldset",
589
+ "notitle": true,
590
+ "condition": {
591
+ "functionBody": "return ['Lightbulb', 'Outlet', 'Switch'].includes(model.accessories?.[arguments[1]]?.info?.type);"
592
+ },
593
+ "items": [
594
+ {
595
+ "type": "div",
596
+ "displayFlex": true,
597
+ "flex-direction": "row",
598
+ "items": [
599
+ {
600
+ "key": "accessories[].topicGetOn",
601
+ "flex": "0 0 50%"
602
+ },
603
+ {
604
+ "key": "accessories[].topicSetOn",
605
+ "flex": "0 0 50%"
606
+ }
607
+ ]
1967
608
  }
1968
609
  ]
1969
610
  },
@@ -1971,7 +612,7 @@
1971
612
  "type": "fieldset",
1972
613
  "notitle": true,
1973
614
  "condition": {
1974
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'CarbonMonoxideSensor';"
615
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Lightbulb';"
1975
616
  },
1976
617
  "items": [
1977
618
  {
@@ -1980,56 +621,11 @@
1980
621
  "flex-direction": "row",
1981
622
  "items": [
1982
623
  {
1983
- "key": "accessories[].topicGetCarbonMonoxideDetected",
1984
- "flex": "0 0 50%"
1985
- }
1986
- ]
1987
- },
1988
- {
1989
- "type": "div",
1990
- "displayFlex": true,
1991
- "flex-direction": "row",
1992
- "items": [
1993
- {
1994
- "key": "accessories[].topicGetCarbonMonoxideLevel",
624
+ "key": "accessories[].topicGetBrightness",
1995
625
  "flex": "0 0 50%"
1996
626
  },
1997
627
  {
1998
- "key": "accessories[].topicGetCarbonMonoxidePeakLevel",
1999
- "flex": "0 0 50%"
2000
- }
2001
- ]
2002
- }
2003
- ]
2004
- },
2005
- {
2006
- "type": "div",
2007
- "displayFlex": true,
2008
- "flex-direction": "row",
2009
- "condition": {
2010
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'ContactSensor';"
2011
- },
2012
- "items": [
2013
- {
2014
- "key": "accessories[].topicGetContactSensorState",
2015
- "flex": "0 0 50%"
2016
- }
2017
- ]
2018
- },
2019
- {
2020
- "type": "fieldset",
2021
- "notitle": true,
2022
- "condition": {
2023
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'AirPurifier';"
2024
- },
2025
- "items": [
2026
- {
2027
- "type": "div",
2028
- "displayFlex": true,
2029
- "flex-direction": "row",
2030
- "items": [
2031
- {
2032
- "key": "accessories[].topicGetCurrentPurifierState",
628
+ "key": "accessories[].topicSetBrightness",
2033
629
  "flex": "0 0 50%"
2034
630
  }
2035
631
  ]
@@ -2040,46 +636,26 @@
2040
636
  "flex-direction": "row",
2041
637
  "items": [
2042
638
  {
2043
- "key": "accessories[].topicGetTargetPurifierState",
639
+ "key": "accessories[].topicGetHue",
2044
640
  "flex": "0 0 50%"
2045
641
  },
2046
642
  {
2047
- "key": "accessories[].topicSetTargetPurifierState",
643
+ "key": "accessories[].topicSetHue",
2048
644
  "flex": "0 0 50%"
2049
645
  }
2050
646
  ]
2051
- }
2052
- ]
2053
- },
2054
- {
2055
- "type": "fieldset",
2056
- "notitle": true,
2057
- "condition": {
2058
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'HeaterCooler';"
2059
- },
2060
- "items": [
647
+ },
2061
648
  {
2062
649
  "type": "div",
2063
650
  "displayFlex": true,
2064
651
  "flex-direction": "row",
2065
652
  "items": [
2066
653
  {
2067
- "key": "accessories[].topicGetCurrentTemperature",
654
+ "key": "accessories[].topicGetColorTemperature",
2068
655
  "flex": "0 0 50%"
2069
656
  },
2070
657
  {
2071
- "key": "accessories[].temperatureUnits",
2072
- "flex": "0 0 25%"
2073
- }
2074
- ]
2075
- },
2076
- {
2077
- "type": "div",
2078
- "displayFlex": true,
2079
- "flex-direction": "row",
2080
- "items": [
2081
- {
2082
- "key": "accessories[].topicGetCurrentHeaterCoolerState",
658
+ "key": "accessories[].topicSetColorTemperature",
2083
659
  "flex": "0 0 50%"
2084
660
  }
2085
661
  ]
@@ -2090,11 +666,11 @@
2090
666
  "flex-direction": "row",
2091
667
  "items": [
2092
668
  {
2093
- "key": "accessories[].topicGetTargetHeaterCoolerState",
669
+ "key": "accessories[].topicGetSaturation",
2094
670
  "flex": "0 0 50%"
2095
671
  },
2096
672
  {
2097
- "key": "accessories[].topicSetTargetHeaterCoolerState",
673
+ "key": "accessories[].topicSetSaturation",
2098
674
  "flex": "0 0 50%"
2099
675
  }
2100
676
  ]
@@ -2105,7 +681,7 @@
2105
681
  "type": "fieldset",
2106
682
  "notitle": true,
2107
683
  "condition": {
2108
- "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
684
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Outlet';"
2109
685
  },
2110
686
  "items": [
2111
687
  {
@@ -2114,11 +690,7 @@
2114
690
  "flex-direction": "row",
2115
691
  "items": [
2116
692
  {
2117
- "key": "accessories[].topicGetActive",
2118
- "flex": "0 0 50%"
2119
- },
2120
- {
2121
- "key": "accessories[].topicSetActive",
693
+ "key": "accessories[].topicGetOutletInUse",
2122
694
  "flex": "0 0 50%"
2123
695
  }
2124
696
  ]
@@ -2129,7 +701,7 @@
2129
701
  "type": "fieldset",
2130
702
  "notitle": true,
2131
703
  "condition": {
2132
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Fanv2';"
704
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'SecuritySystem';"
2133
705
  },
2134
706
  "items": [
2135
707
  {
@@ -2138,7 +710,7 @@
2138
710
  "flex-direction": "row",
2139
711
  "items": [
2140
712
  {
2141
- "key": "accessories[].topicGetCurrentFanState",
713
+ "key": "accessories[].topicGetCurrentSecurityState",
2142
714
  "flex": "0 0 50%"
2143
715
  }
2144
716
  ]
@@ -2149,11 +721,11 @@
2149
721
  "flex-direction": "row",
2150
722
  "items": [
2151
723
  {
2152
- "key": "accessories[].topicGetTargetFanState",
724
+ "key": "accessories[].topicGetTargetSecurityState",
2153
725
  "flex": "0 0 50%"
2154
726
  },
2155
727
  {
2156
- "key": "accessories[].topicSetTargetFanState",
728
+ "key": "accessories[].topicSetTargetSecurityState",
2157
729
  "flex": "0 0 50%"
2158
730
  }
2159
731
  ]
@@ -2164,11 +736,11 @@
2164
736
  "flex-direction": "row",
2165
737
  "items": [
2166
738
  {
2167
- "key": "accessories[].topicGetRotationDirection",
739
+ "key": "accessories[].topicGetStatusTampered",
2168
740
  "flex": "0 0 50%"
2169
741
  },
2170
742
  {
2171
- "key": "accessories[].topicSetRotationDirection",
743
+ "key": "accessories[].topicGetStatusFault",
2172
744
  "flex": "0 0 50%"
2173
745
  }
2174
746
  ]
@@ -2179,7 +751,7 @@
2179
751
  "type": "fieldset",
2180
752
  "notitle": true,
2181
753
  "condition": {
2182
- "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
754
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'CarbonDioxideSensor';"
2183
755
  },
2184
756
  "items": [
2185
757
  {
@@ -2188,26 +760,7 @@
2188
760
  "flex-direction": "row",
2189
761
  "items": [
2190
762
  {
2191
- "key": "accessories[].topicGetLockPhysicalControls",
2192
- "flex": "0 0 50%"
2193
- },
2194
- {
2195
- "key": "accessories[].topicSetLockPhysicalControls",
2196
- "flex": "0 0 50%"
2197
- }
2198
- ]
2199
- },
2200
- {
2201
- "type": "div",
2202
- "displayFlex": true,
2203
- "flex-direction": "row",
2204
- "items": [
2205
- {
2206
- "key": "accessories[].topicGetRotationSpeed",
2207
- "flex": "0 0 50%"
2208
- },
2209
- {
2210
- "key": "accessories[].topicSetRotationSpeed",
763
+ "key": "accessories[].topicGetCarbonDioxideDetected",
2211
764
  "flex": "0 0 50%"
2212
765
  }
2213
766
  ]
@@ -2218,116 +771,14 @@
2218
771
  "flex-direction": "row",
2219
772
  "items": [
2220
773
  {
2221
- "key": "accessories[].topicGetSwingMode",
2222
- "flex": "0 0 50%"
2223
- },
2224
- {
2225
- "key": "accessories[].topicSetSwingMode",
774
+ "key": "accessories[].topicGetCarbonDioxideLevel",
2226
775
  "flex": "0 0 50%"
2227
- }
2228
- ]
2229
- }
2230
- ]
2231
- },
2232
- {
2233
- "type": "div",
2234
- "displayFlex": true,
2235
- "flex-direction": "row",
2236
- "condition": {
2237
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'HumiditySensor';"
2238
- },
2239
- "items": [
2240
- {
2241
- "key": "accessories[].topicGetCurrentRelativeHumidity",
2242
- "flex": "0 0 50%"
2243
- }
2244
- ]
2245
- },
2246
- {
2247
- "type": "div",
2248
- "displayFlex": true,
2249
- "flex-direction": "row",
2250
- "condition": {
2251
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LeakSensor';"
2252
- },
2253
- "items": [
2254
- {
2255
- "key": "accessories[].topicGetLeakDetected",
2256
- "flex": "0 0 50%"
2257
- }
2258
- ]
2259
- },
2260
- {
2261
- "type": "div",
2262
- "displayFlex": true,
2263
- "flex-direction": "row",
2264
- "condition": {
2265
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LightSensor';"
2266
- },
2267
- "items": [
2268
- {
2269
- "key": "accessories[].topicGetCurrentAmbientLightLevel",
2270
- "flex": "0 0 50%"
2271
- }
2272
- ]
2273
- },
2274
- {
2275
- "type": "div",
2276
- "displayFlex": true,
2277
- "flex-direction": "row",
2278
- "condition": {
2279
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'MotionSensor';"
2280
- },
2281
- "items": [
2282
- {
2283
- "key": "accessories[].topicGetMotionDetected",
2284
- "flex": "0 0 50%"
2285
- }
2286
- ]
2287
- },
2288
- {
2289
- "type": "div",
2290
- "displayFlex": true,
2291
- "flex-direction": "row",
2292
- "condition": {
2293
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'OccupancySensor';"
2294
- },
2295
- "items": [
2296
- {
2297
- "key": "accessories[].topicGetOccupancyDetected",
2298
- "flex": "0 0 50%"
2299
- }
2300
- ]
2301
- },
2302
- {
2303
- "type": "div",
2304
- "displayFlex": true,
2305
- "flex-direction": "row",
2306
- "condition": {
2307
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'SmokeSensor';"
2308
- },
2309
- "items": [
2310
- {
2311
- "key": "accessories[].topicGetSmokeDetected",
2312
- "flex": "0 0 50%"
2313
- }
2314
- ]
2315
- },
2316
- {
2317
- "type": "div",
2318
- "displayFlex": true,
2319
- "flex-direction": "row",
2320
- "condition": {
2321
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'TemperatureSensor';"
2322
- },
2323
- "items": [
2324
- {
2325
- "key": "accessories[].topicGetCurrentTemperature",
2326
- "flex": "0 0 67%"
2327
- },
2328
- {
2329
- "key": "accessories[].temperatureUnits",
2330
- "flex": "0 0 33%"
776
+ },
777
+ {
778
+ "key": "accessories[].topicGetCarbonDioxidePeakLevel",
779
+ "flex": "0 0 50%"
780
+ }
781
+ ]
2331
782
  }
2332
783
  ]
2333
784
  },
@@ -2335,7 +786,7 @@
2335
786
  "type": "fieldset",
2336
787
  "notitle": true,
2337
788
  "condition": {
2338
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Thermostat';"
789
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'CarbonMonoxideSensor';"
2339
790
  },
2340
791
  "items": [
2341
792
  {
@@ -2344,7 +795,7 @@
2344
795
  "flex-direction": "row",
2345
796
  "items": [
2346
797
  {
2347
- "key": "accessories[].topicGetCurrentHeatingCoolingState",
798
+ "key": "accessories[].topicGetCarbonMonoxideDetected",
2348
799
  "flex": "0 0 50%"
2349
800
  }
2350
801
  ]
@@ -2355,15 +806,38 @@
2355
806
  "flex-direction": "row",
2356
807
  "items": [
2357
808
  {
2358
- "key": "accessories[].topicGetTargetHeatingCoolingState",
809
+ "key": "accessories[].topicGetCarbonMonoxideLevel",
2359
810
  "flex": "0 0 50%"
2360
811
  },
2361
812
  {
2362
- "key": "accessories[].topicSetTargetHeatingCoolingState",
813
+ "key": "accessories[].topicGetCarbonMonoxidePeakLevel",
2363
814
  "flex": "0 0 50%"
2364
815
  }
2365
816
  ]
2366
- },
817
+ }
818
+ ]
819
+ },
820
+ {
821
+ "type": "div",
822
+ "displayFlex": true,
823
+ "flex-direction": "row",
824
+ "condition": {
825
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'ContactSensor';"
826
+ },
827
+ "items": [
828
+ {
829
+ "key": "accessories[].topicGetContactSensorState",
830
+ "flex": "0 0 50%"
831
+ }
832
+ ]
833
+ },
834
+ {
835
+ "type": "fieldset",
836
+ "notitle": true,
837
+ "condition": {
838
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'HeaterCooler';"
839
+ },
840
+ "items": [
2367
841
  {
2368
842
  "type": "div",
2369
843
  "displayFlex": true,
@@ -2375,6 +849,7 @@
2375
849
  },
2376
850
  {
2377
851
  "key": "accessories[].temperatureUnits",
852
+ "title": "${config.title.sourceUnits}",
2378
853
  "flex": "0 0 25%"
2379
854
  }
2380
855
  ]
@@ -2385,11 +860,11 @@
2385
860
  "flex-direction": "row",
2386
861
  "items": [
2387
862
  {
2388
- "key": "accessories[].topicGetTargetTemperature",
863
+ "key": "accessories[].topicGetActive",
2389
864
  "flex": "0 0 50%"
2390
865
  },
2391
866
  {
2392
- "key": "accessories[].topicSetTargetTemperature",
867
+ "key": "accessories[].topicSetActive",
2393
868
  "flex": "0 0 50%"
2394
869
  }
2395
870
  ]
@@ -2400,8 +875,7 @@
2400
875
  "flex-direction": "row",
2401
876
  "items": [
2402
877
  {
2403
- "key": "accessories[].topicGetCurrentRelativeHumidity",
2404
- "title": "${config.title.topicGetCurrentRelativeHumidityOptional}",
878
+ "key": "accessories[].topicGetCurrentHeaterCoolerState",
2405
879
  "flex": "0 0 50%"
2406
880
  }
2407
881
  ]
@@ -2412,24 +886,15 @@
2412
886
  "flex-direction": "row",
2413
887
  "items": [
2414
888
  {
2415
- "key": "accessories[].topicGetTargetRelativeHumidity",
889
+ "key": "accessories[].topicGetTargetHeaterCoolerState",
2416
890
  "flex": "0 0 50%"
2417
891
  },
2418
892
  {
2419
- "key": "accessories[].topicSetTargetRelativeHumidity",
893
+ "key": "accessories[].topicSetTargetHeaterCoolerState",
2420
894
  "flex": "0 0 50%"
2421
895
  }
2422
896
  ]
2423
- }
2424
- ]
2425
- },
2426
- {
2427
- "type": "fieldset",
2428
- "notitle": true,
2429
- "condition": {
2430
- "functionBody": "return ['HeaterCooler', 'Thermostat'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2431
- },
2432
- "items": [
897
+ },
2433
898
  {
2434
899
  "type": "div",
2435
900
  "displayFlex": true,
@@ -2459,27 +924,33 @@
2459
924
  "flex": "0 0 50%"
2460
925
  }
2461
926
  ]
2462
- }
2463
- ]
2464
- },
2465
- {
2466
- "type": "fieldset",
2467
- "notitle": true,
2468
- "condition": {
2469
- "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2470
- },
2471
- "items": [
927
+ },
928
+ {
929
+ "type": "div",
930
+ "displayFlex": true,
931
+ "flex-direction": "row",
932
+ "items": [
933
+ {
934
+ "key": "accessories[].topicGetLockPhysicalControls",
935
+ "flex": "0 0 50%"
936
+ },
937
+ {
938
+ "key": "accessories[].topicSetLockPhysicalControls",
939
+ "flex": "0 0 50%"
940
+ }
941
+ ]
942
+ },
2472
943
  {
2473
944
  "type": "div",
2474
945
  "displayFlex": true,
2475
946
  "flex-direction": "row",
2476
947
  "items": [
2477
948
  {
2478
- "key": "accessories[].topicGetFilterChangeIndication",
949
+ "key": "accessories[].topicGetRotationSpeed",
2479
950
  "flex": "0 0 50%"
2480
951
  },
2481
952
  {
2482
- "key": "accessories[].topicGetFilterLifeLevel",
953
+ "key": "accessories[].topicSetRotationSpeed",
2483
954
  "flex": "0 0 50%"
2484
955
  }
2485
956
  ]
@@ -2490,7 +961,11 @@
2490
961
  "flex-direction": "row",
2491
962
  "items": [
2492
963
  {
2493
- "key": "accessories[].topicResetFilterIndication",
964
+ "key": "accessories[].topicGetSwingMode",
965
+ "flex": "0 0 50%"
966
+ },
967
+ {
968
+ "key": "accessories[].topicSetSwingMode",
2494
969
  "flex": "0 0 50%"
2495
970
  }
2496
971
  ]
@@ -2502,15 +977,11 @@
2502
977
  "displayFlex": true,
2503
978
  "flex-direction": "row",
2504
979
  "condition": {
2505
- "functionBody": "const type = model.accessories?.[arguments[1]]?.info?.type; return type !== undefined && type.endsWith('Sensor');"
980
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'HumiditySensor';"
2506
981
  },
2507
982
  "items": [
2508
983
  {
2509
- "key": "accessories[].topicGetStatusFault",
2510
- "flex": "0 0 50%"
2511
- },
2512
- {
2513
- "key": "accessories[].topicGetStatusTampered",
984
+ "key": "accessories[].topicGetCurrentRelativeHumidity",
2514
985
  "flex": "0 0 50%"
2515
986
  }
2516
987
  ]
@@ -2519,13 +990,12 @@
2519
990
  "type": "div",
2520
991
  "displayFlex": true,
2521
992
  "flex-direction": "row",
993
+ "condition": {
994
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LeakSensor';"
995
+ },
2522
996
  "items": [
2523
997
  {
2524
- "key": "accessories[].topicGetBatteryLevel",
2525
- "flex": "0 0 50%"
2526
- },
2527
- {
2528
- "key": "accessories[].topicGetBatteryLow",
998
+ "key": "accessories[].topicGetLeakDetected",
2529
999
  "flex": "0 0 50%"
2530
1000
  }
2531
1001
  ]
@@ -2534,167 +1004,74 @@
2534
1004
  "type": "div",
2535
1005
  "displayFlex": true,
2536
1006
  "flex-direction": "row",
1007
+ "condition": {
1008
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LightSensor';"
1009
+ },
2537
1010
  "items": [
2538
1011
  {
2539
- "key": "accessories[].topicGetStatusActive",
1012
+ "key": "accessories[].topicGetCurrentAmbientLightLevel",
2540
1013
  "flex": "0 0 50%"
2541
1014
  }
2542
1015
  ]
2543
- }
2544
- ]
2545
- },
2546
- {
2547
- "type": "fieldset",
2548
- "title": "${config.title.values}",
2549
- "description": "${config.description.values}",
2550
- "condition": {
2551
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
2552
- },
2553
- "items": [
1016
+ },
2554
1017
  {
2555
- "type": "fieldset",
2556
- "notitle": true,
1018
+ "type": "div",
1019
+ "displayFlex": true,
1020
+ "flex-direction": "row",
2557
1021
  "condition": {
2558
- "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1022
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'MotionSensor';"
2559
1023
  },
2560
1024
  "items": [
2561
1025
  {
2562
- "type": "div",
2563
- "displayFlex": true,
2564
- "flex-direction": "row",
2565
- "items": [
2566
- {
2567
- "key": "accessories[].valueStateActive",
2568
- "flex": "0 0 20%"
2569
- },
2570
- {
2571
- "key": "accessories[].valueStateInactive",
2572
- "flex": "0 0 20%"
2573
- }
2574
- ]
1026
+ "key": "accessories[].topicGetMotionDetected",
1027
+ "flex": "0 0 50%"
2575
1028
  }
2576
1029
  ]
2577
1030
  },
2578
1031
  {
2579
- "type": "fieldset",
2580
- "notitle": true,
1032
+ "type": "div",
1033
+ "displayFlex": true,
1034
+ "flex-direction": "row",
2581
1035
  "condition": {
2582
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Fanv2';"
1036
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'OccupancySensor';"
2583
1037
  },
2584
1038
  "items": [
2585
1039
  {
2586
- "type": "div",
2587
- "displayFlex": true,
2588
- "flex-direction": "row",
2589
- "items": [
2590
- {
2591
- "key": "accessories[].valueModeAuto",
2592
- "flex": "0 0 20%"
2593
- },
2594
- {
2595
- "key": "accessories[].valueModeManual",
2596
- "flex": "0 0 20%"
2597
- },
2598
- {
2599
- "key": "accessories[].valueModeBlowing",
2600
- "flex": "0 0 20%"
2601
- },
2602
- {
2603
- "key": "accessories[].valueModeIdle",
2604
- "flex": "0 0 20%"
2605
- },
2606
- {
2607
- "key": "accessories[].valueModeInactive",
2608
- "flex": "0 0 20%"
2609
- }
2610
- ]
2611
- },
2612
- {
2613
- "type": "div",
2614
- "displayFlex": true,
2615
- "flex-direction": "row",
2616
- "items": [
2617
- {
2618
- "key": "accessories[].valueDirectionClockwise",
2619
- "flex": "0 0 20%"
2620
- },
2621
- {
2622
- "key": "accessories[].valueDirectionCounterClockwise",
2623
- "flex": "0 0 20%"
2624
- }
2625
- ]
1040
+ "key": "accessories[].topicGetOccupancyDetected",
1041
+ "flex": "0 0 50%"
2626
1042
  }
2627
1043
  ]
2628
1044
  },
2629
1045
  {
2630
- "type": "fieldset",
2631
- "notitle": true,
1046
+ "type": "div",
1047
+ "displayFlex": true,
1048
+ "flex-direction": "row",
2632
1049
  "condition": {
2633
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'AirPurifier';"
1050
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'SmokeSensor';"
2634
1051
  },
2635
1052
  "items": [
2636
1053
  {
2637
- "type": "div",
2638
- "displayFlex": true,
2639
- "flex-direction": "row",
2640
- "items": [
2641
- {
2642
- "key": "accessories[].valueModeAuto",
2643
- "flex": "0 0 20%"
2644
- },
2645
- {
2646
- "key": "accessories[].valueModeManual",
2647
- "flex": "0 0 20%"
2648
- },
2649
- {
2650
- "key": "accessories[].valueModePurifying",
2651
- "flex": "0 0 20%"
2652
- },
2653
- {
2654
- "key": "accessories[].valueModeIdle",
2655
- "flex": "0 0 20%"
2656
- },
2657
- {
2658
- "key": "accessories[].valueModeInactive",
2659
- "flex": "0 0 20%"
2660
- }
2661
- ]
1054
+ "key": "accessories[].topicGetSmokeDetected",
1055
+ "flex": "0 0 50%"
2662
1056
  }
2663
1057
  ]
2664
1058
  },
2665
1059
  {
2666
- "type": "fieldset",
2667
- "notitle": true,
1060
+ "type": "div",
1061
+ "displayFlex": true,
1062
+ "flex-direction": "row",
2668
1063
  "condition": {
2669
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'HeaterCooler';"
1064
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'TemperatureSensor';"
2670
1065
  },
2671
1066
  "items": [
2672
1067
  {
2673
- "type": "div",
2674
- "displayFlex": true,
2675
- "flex-direction": "row",
2676
- "items": [
2677
- {
2678
- "key": "accessories[].valueModeAuto",
2679
- "flex": "0 0 20%"
2680
- },
2681
- {
2682
- "key": "accessories[].valueModeCool",
2683
- "flex": "0 0 20%"
2684
- },
2685
- {
2686
- "key": "accessories[].valueModeHeat",
2687
- "flex": "0 0 20%"
2688
- },
2689
- {
2690
- "key": "accessories[].valueModeIdle",
2691
- "flex": "0 0 20%"
2692
- },
2693
- {
2694
- "key": "accessories[].valueModeInactive",
2695
- "flex": "0 0 20%"
2696
- }
2697
- ]
1068
+ "key": "accessories[].topicGetCurrentTemperature",
1069
+ "flex": "0 0 67%"
1070
+ },
1071
+ {
1072
+ "key": "accessories[].temperatureUnits",
1073
+ "title": "${config.title.sourceUnits}",
1074
+ "flex": "0 0 33%"
2698
1075
  }
2699
1076
  ]
2700
1077
  },
@@ -2702,7 +1079,7 @@
2702
1079
  "type": "fieldset",
2703
1080
  "notitle": true,
2704
1081
  "condition": {
2705
- "functionBody": "return ['AirPurifier', 'Fanv2', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
1082
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Thermostat';"
2706
1083
  },
2707
1084
  "items": [
2708
1085
  {
@@ -2711,76 +1088,54 @@
2711
1088
  "flex-direction": "row",
2712
1089
  "items": [
2713
1090
  {
2714
- "key": "accessories[].valueControlLock",
2715
- "flex": "0 0 20%"
2716
- },
2717
- {
2718
- "key": "accessories[].valueControlUnlock",
2719
- "flex": "0 0 20%"
2720
- },
2721
- {
2722
- "key": "accessories[].valueSwingEnabled",
2723
- "flex": "0 0 20%"
2724
- },
2725
- {
2726
- "key": "accessories[].valueSwingDisabled",
2727
- "flex": "0 0 20%"
1091
+ "key": "accessories[].topicGetCurrentHeatingCoolingState",
1092
+ "flex": "0 0 50%"
2728
1093
  }
2729
1094
  ]
2730
- }
2731
- ]
2732
- },
2733
- {
2734
- "type": "fieldset",
2735
- "notitle": true,
2736
- "condition": {
2737
- "functionBody": "return ['AirPurifier', 'HeaterCooler'].includes(model.accessories?.[arguments[1]]?.info?.type);"
2738
- },
2739
- "items": [
1095
+ },
2740
1096
  {
2741
1097
  "type": "div",
2742
1098
  "displayFlex": true,
2743
1099
  "flex-direction": "row",
2744
1100
  "items": [
2745
1101
  {
2746
- "key": "accessories[].valueFilterChange",
2747
- "flex": "0 0 20%"
1102
+ "key": "accessories[].topicGetTargetHeatingCoolingState",
1103
+ "flex": "0 0 50%"
2748
1104
  },
2749
1105
  {
2750
- "key": "accessories[].valueFilterReset",
2751
- "flex": "0 0 20%"
1106
+ "key": "accessories[].topicSetTargetHeatingCoolingState",
1107
+ "flex": "0 0 50%"
2752
1108
  }
2753
1109
  ]
2754
- }
2755
- ]
2756
- },
2757
- {
2758
- "type": "fieldset",
2759
- "notitle": true,
2760
- "condition": {
2761
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'GarageDoorOpener';"
2762
- },
2763
- "items": [
1110
+ },
2764
1111
  {
2765
1112
  "type": "div",
2766
1113
  "displayFlex": true,
2767
1114
  "flex-direction": "row",
2768
1115
  "items": [
2769
1116
  {
2770
- "key": "accessories[].valueDoorStateOpen",
2771
- "flex": "0 0 25%"
1117
+ "key": "accessories[].topicGetCurrentTemperature",
1118
+ "flex": "0 0 50%"
2772
1119
  },
2773
1120
  {
2774
- "key": "accessories[].valueDoorStateClosed",
1121
+ "key": "accessories[].temperatureUnits",
1122
+ "title": "${config.title.sourceUnits}",
2775
1123
  "flex": "0 0 25%"
2776
- },
1124
+ }
1125
+ ]
1126
+ },
1127
+ {
1128
+ "type": "div",
1129
+ "displayFlex": true,
1130
+ "flex-direction": "row",
1131
+ "items": [
2777
1132
  {
2778
- "key": "accessories[].valueDoorStateOpening",
2779
- "flex": "0 0 25%"
1133
+ "key": "accessories[].topicGetTargetTemperature",
1134
+ "flex": "0 0 50%"
2780
1135
  },
2781
1136
  {
2782
- "key": "accessories[].valueDoorStateClosing",
2783
- "flex": "0 0 25%"
1137
+ "key": "accessories[].topicSetTargetTemperature",
1138
+ "flex": "0 0 50%"
2784
1139
  }
2785
1140
  ]
2786
1141
  },
@@ -2790,12 +1145,24 @@
2790
1145
  "flex-direction": "row",
2791
1146
  "items": [
2792
1147
  {
2793
- "key": "accessories[].valueDoorStateStopped",
2794
- "flex": "0 0 25%"
1148
+ "key": "accessories[].topicGetCurrentRelativeHumidity",
1149
+ "title": "${config.title.topicGetCurrentRelativeHumidityOptional}",
1150
+ "flex": "0 0 50%"
1151
+ }
1152
+ ]
1153
+ },
1154
+ {
1155
+ "type": "div",
1156
+ "displayFlex": true,
1157
+ "flex-direction": "row",
1158
+ "items": [
1159
+ {
1160
+ "key": "accessories[].topicGetTargetRelativeHumidity",
1161
+ "flex": "0 0 50%"
2795
1162
  },
2796
1163
  {
2797
- "key": "accessories[].valueDoorObstructed",
2798
- "flex": "0 0 25%"
1164
+ "key": "accessories[].topicSetTargetRelativeHumidity",
1165
+ "flex": "0 0 50%"
2799
1166
  }
2800
1167
  ]
2801
1168
  },
@@ -2805,18 +1172,27 @@
2805
1172
  "flex-direction": "row",
2806
1173
  "items": [
2807
1174
  {
2808
- "key": "accessories[].valueLockStateSecured",
2809
- "title": "${config.title.valueLockStateSecuredOptional}",
2810
- "flex": "0 0 25%"
1175
+ "key": "accessories[].topicGetCoolingThresholdTemperature",
1176
+ "flex": "0 0 50%"
2811
1177
  },
2812
1178
  {
2813
- "key": "accessories[].valueLockStateUnsecured",
2814
- "title": "${config.title.valueLockStateUnsecuredOptional}",
2815
- "flex": "0 0 25%"
1179
+ "key": "accessories[].topicSetCoolingThresholdTemperature",
1180
+ "flex": "0 0 50%"
1181
+ }
1182
+ ]
1183
+ },
1184
+ {
1185
+ "type": "div",
1186
+ "displayFlex": true,
1187
+ "flex-direction": "row",
1188
+ "items": [
1189
+ {
1190
+ "key": "accessories[].topicGetHeatingThresholdTemperature",
1191
+ "flex": "0 0 50%"
2816
1192
  },
2817
1193
  {
2818
- "key": "accessories[].valueLockStateJammed",
2819
- "flex": "0 0 25%"
1194
+ "key": "accessories[].topicSetHeatingThresholdTemperature",
1195
+ "flex": "0 0 50%"
2820
1196
  }
2821
1197
  ]
2822
1198
  }
@@ -2827,28 +1203,59 @@
2827
1203
  "displayFlex": true,
2828
1204
  "flex-direction": "row",
2829
1205
  "condition": {
2830
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LockMechanism';"
1206
+ "functionBody": "const type = model.accessories?.[arguments[1]]?.info?.type; return type !== undefined && type.endsWith('Sensor');"
2831
1207
  },
2832
1208
  "items": [
2833
1209
  {
2834
- "key": "accessories[].valueLockStateSecured",
2835
- "flex": "0 0 25%"
1210
+ "key": "accessories[].topicGetStatusFault",
1211
+ "flex": "0 0 50%"
2836
1212
  },
2837
1213
  {
2838
- "key": "accessories[].valueLockStateUnsecured",
2839
- "flex": "0 0 25%"
1214
+ "key": "accessories[].topicGetStatusTampered",
1215
+ "flex": "0 0 50%"
1216
+ }
1217
+ ]
1218
+ },
1219
+ {
1220
+ "type": "div",
1221
+ "displayFlex": true,
1222
+ "flex-direction": "row",
1223
+ "items": [
1224
+ {
1225
+ "key": "accessories[].topicGetBatteryLevel",
1226
+ "flex": "0 0 50%"
2840
1227
  },
2841
1228
  {
2842
- "key": "accessories[].valueLockStateJammed",
2843
- "flex": "0 0 25%"
1229
+ "key": "accessories[].topicGetBatteryLow",
1230
+ "flex": "0 0 50%"
2844
1231
  }
2845
1232
  ]
2846
1233
  },
2847
1234
  {
1235
+ "type": "div",
1236
+ "displayFlex": true,
1237
+ "flex-direction": "row",
1238
+ "items": [
1239
+ {
1240
+ "key": "accessories[].topicGetStatusActive",
1241
+ "flex": "0 0 50%"
1242
+ }
1243
+ ]
1244
+ }
1245
+ ]
1246
+ },
1247
+ {
1248
+ "type": "fieldset",
1249
+ "title": "${config.title.values}",
1250
+ "condition": {
1251
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type !== undefined;"
1252
+ },
1253
+ "items": [
1254
+ {
2848
1255
  "type": "fieldset",
2849
1256
  "notitle": true,
2850
1257
  "condition": {
2851
- "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'Valve';"
1258
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'HeaterCooler';"
2852
1259
  },
2853
1260
  "items": [
2854
1261
  {
@@ -2857,16 +1264,39 @@
2857
1264
  "flex-direction": "row",
2858
1265
  "items": [
2859
1266
  {
2860
- "key": "accessories[].valueActive",
2861
- "flex": "0 0 25%"
1267
+ "key": "accessories[].valueStateActive",
1268
+ "flex": "0 0 20%"
2862
1269
  },
2863
1270
  {
2864
- "key": "accessories[].valueInactive",
2865
- "flex": "0 0 25%"
1271
+ "key": "accessories[].valueStateInactive",
1272
+ "flex": "0 0 20%"
1273
+ }
1274
+ ]
1275
+ },
1276
+ {
1277
+ "type": "div",
1278
+ "displayFlex": true,
1279
+ "flex-direction": "row",
1280
+ "items": [
1281
+ {
1282
+ "key": "accessories[].valueModeAuto",
1283
+ "flex": "0 0 20%"
2866
1284
  },
2867
1285
  {
2868
- "key": "accessories[].valueInUse",
2869
- "flex": "0 0 25%"
1286
+ "key": "accessories[].valueModeCool",
1287
+ "flex": "0 0 20%"
1288
+ },
1289
+ {
1290
+ "key": "accessories[].valueModeHeat",
1291
+ "flex": "0 0 20%"
1292
+ },
1293
+ {
1294
+ "key": "accessories[].valueModeIdle",
1295
+ "flex": "0 0 20%"
1296
+ },
1297
+ {
1298
+ "key": "accessories[].valueModeInactive",
1299
+ "flex": "0 0 20%"
2870
1300
  }
2871
1301
  ]
2872
1302
  },
@@ -2876,21 +1306,47 @@
2876
1306
  "flex-direction": "row",
2877
1307
  "items": [
2878
1308
  {
2879
- "key": "accessories[].valueConfigured",
2880
- "flex": "0 0 25%"
1309
+ "key": "accessories[].valueControlLock",
1310
+ "flex": "0 0 20%"
2881
1311
  },
2882
1312
  {
2883
- "key": "accessories[].valueNotConfigured",
2884
- "flex": "0 0 25%"
1313
+ "key": "accessories[].valueControlUnlock",
1314
+ "flex": "0 0 20%"
2885
1315
  },
2886
1316
  {
2887
- "key": "accessories[].valueFault",
2888
- "flex": "0 0 25%"
1317
+ "key": "accessories[].valueSwingEnabled",
1318
+ "flex": "0 0 20%"
1319
+ },
1320
+ {
1321
+ "key": "accessories[].valueSwingDisabled",
1322
+ "flex": "0 0 20%"
2889
1323
  }
2890
1324
  ]
2891
1325
  }
2892
1326
  ]
2893
1327
  },
1328
+ {
1329
+ "type": "div",
1330
+ "displayFlex": true,
1331
+ "flex-direction": "row",
1332
+ "condition": {
1333
+ "functionBody": "return model.accessories?.[arguments[1]]?.info?.type === 'LockMechanism';"
1334
+ },
1335
+ "items": [
1336
+ {
1337
+ "key": "accessories[].valueLockStateSecured",
1338
+ "flex": "0 0 25%"
1339
+ },
1340
+ {
1341
+ "key": "accessories[].valueLockStateUnsecured",
1342
+ "flex": "0 0 25%"
1343
+ },
1344
+ {
1345
+ "key": "accessories[].valueLockStateJammed",
1346
+ "flex": "0 0 25%"
1347
+ }
1348
+ ]
1349
+ },
2894
1350
  {
2895
1351
  "type": "div",
2896
1352
  "displayFlex": true,
@@ -3000,53 +1456,6 @@
3000
1456
  }
3001
1457
  ]
3002
1458
  },
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
- },
3050
1459
  {
3051
1460
  "type": "div",
3052
1461
  "displayFlex": true,