@switchbot/homebridge-switchbot 5.0.0-beta.107 → 5.0.0-beta.109

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 (148) hide show
  1. package/TODO.md +564 -0
  2. package/config.schema.json +100 -25
  3. package/dist/device-types.d.ts +15 -0
  4. package/dist/device-types.d.ts.map +1 -0
  5. package/dist/device-types.js +145 -0
  6. package/dist/device-types.js.map +1 -0
  7. package/dist/deviceFactory.d.ts +1 -1
  8. package/dist/deviceFactory.d.ts.map +1 -1
  9. package/dist/deviceFactory.js +55 -17
  10. package/dist/deviceFactory.js.map +1 -1
  11. package/dist/devices/genericDevice.d.ts +1 -1
  12. package/dist/devices/genericDevice.d.ts.map +1 -1
  13. package/dist/devices/genericDevice.js +4 -2
  14. package/dist/devices/genericDevice.js.map +1 -1
  15. package/dist/homebridge-ui/endpoints/config.d.ts +6 -0
  16. package/dist/homebridge-ui/endpoints/config.d.ts.map +1 -0
  17. package/dist/homebridge-ui/endpoints/config.js +73 -0
  18. package/dist/homebridge-ui/endpoints/config.js.map +1 -0
  19. package/dist/homebridge-ui/endpoints/credentials.d.ts +6 -0
  20. package/dist/homebridge-ui/endpoints/credentials.d.ts.map +1 -0
  21. package/dist/homebridge-ui/endpoints/credentials.js +65 -0
  22. package/dist/homebridge-ui/endpoints/credentials.js.map +1 -0
  23. package/dist/homebridge-ui/endpoints/devices.d.ts +6 -0
  24. package/dist/homebridge-ui/endpoints/devices.d.ts.map +1 -0
  25. package/dist/homebridge-ui/endpoints/devices.js +285 -0
  26. package/dist/homebridge-ui/endpoints/devices.js.map +1 -0
  27. package/dist/homebridge-ui/endpoints/discovery.d.ts +7 -0
  28. package/dist/homebridge-ui/endpoints/discovery.d.ts.map +1 -0
  29. package/dist/homebridge-ui/endpoints/discovery.js +171 -0
  30. package/dist/homebridge-ui/endpoints/discovery.js.map +1 -0
  31. package/dist/homebridge-ui/public/index.html +144 -588
  32. package/dist/homebridge-ui/public/js/api.d.ts +15 -0
  33. package/dist/homebridge-ui/public/js/api.d.ts.map +1 -0
  34. package/dist/homebridge-ui/public/js/api.js +164 -0
  35. package/dist/homebridge-ui/public/js/api.js.map +1 -0
  36. package/dist/homebridge-ui/public/js/api.ts +189 -0
  37. package/dist/homebridge-ui/public/js/app.d.ts +2 -0
  38. package/dist/homebridge-ui/public/js/app.d.ts.map +1 -0
  39. package/dist/homebridge-ui/public/js/app.js +1069 -0
  40. package/dist/homebridge-ui/public/js/app.js.map +7 -0
  41. package/dist/homebridge-ui/public/js/app.ts +21 -0
  42. package/dist/homebridge-ui/public/js/constants.d.ts +2 -0
  43. package/dist/homebridge-ui/public/js/constants.d.ts.map +1 -0
  44. package/dist/homebridge-ui/public/js/constants.js +2 -0
  45. package/dist/homebridge-ui/public/js/constants.js.map +1 -0
  46. package/dist/homebridge-ui/public/js/constants.ts +1 -0
  47. package/dist/homebridge-ui/public/js/credentials.d.ts +3 -0
  48. package/dist/homebridge-ui/public/js/credentials.d.ts.map +1 -0
  49. package/dist/homebridge-ui/public/js/credentials.js +96 -0
  50. package/dist/homebridge-ui/public/js/credentials.js.map +1 -0
  51. package/dist/homebridge-ui/public/js/credentials.ts +100 -0
  52. package/dist/homebridge-ui/public/js/devices-delete.d.ts +2 -0
  53. package/dist/homebridge-ui/public/js/devices-delete.d.ts.map +1 -0
  54. package/dist/homebridge-ui/public/js/devices-delete.js +99 -0
  55. package/dist/homebridge-ui/public/js/devices-delete.js.map +1 -0
  56. package/dist/homebridge-ui/public/js/devices-delete.ts +113 -0
  57. package/dist/homebridge-ui/public/js/devices.d.ts +8 -0
  58. package/dist/homebridge-ui/public/js/devices.d.ts.map +1 -0
  59. package/dist/homebridge-ui/public/js/devices.js +71 -0
  60. package/dist/homebridge-ui/public/js/devices.js.map +1 -0
  61. package/dist/homebridge-ui/public/js/devices.ts +78 -0
  62. package/dist/homebridge-ui/public/js/discovery.d.ts +3 -0
  63. package/dist/homebridge-ui/public/js/discovery.d.ts.map +1 -0
  64. package/dist/homebridge-ui/public/js/discovery.js +107 -0
  65. package/dist/homebridge-ui/public/js/discovery.js.map +1 -0
  66. package/dist/homebridge-ui/public/js/discovery.ts +123 -0
  67. package/dist/homebridge-ui/public/js/logger.d.ts +6 -0
  68. package/dist/homebridge-ui/public/js/logger.d.ts.map +1 -0
  69. package/dist/homebridge-ui/public/js/logger.js +12 -0
  70. package/dist/homebridge-ui/public/js/logger.js.map +1 -0
  71. package/dist/homebridge-ui/public/js/logger.ts +11 -0
  72. package/dist/homebridge-ui/public/js/modal.d.ts +5 -0
  73. package/dist/homebridge-ui/public/js/modal.d.ts.map +1 -0
  74. package/dist/homebridge-ui/public/js/modal.js +26 -0
  75. package/dist/homebridge-ui/public/js/modal.js.map +1 -0
  76. package/dist/homebridge-ui/public/js/modal.ts +28 -0
  77. package/dist/homebridge-ui/public/js/modals.d.ts +2 -0
  78. package/dist/homebridge-ui/public/js/modals.d.ts.map +1 -0
  79. package/dist/homebridge-ui/public/js/modals.js +132 -0
  80. package/dist/homebridge-ui/public/js/modals.js.map +1 -0
  81. package/dist/homebridge-ui/public/js/modals.ts +153 -0
  82. package/dist/homebridge-ui/public/js/render.d.ts +6 -0
  83. package/dist/homebridge-ui/public/js/render.d.ts.map +1 -0
  84. package/dist/homebridge-ui/public/js/render.js +166 -0
  85. package/dist/homebridge-ui/public/js/render.js.map +1 -0
  86. package/dist/homebridge-ui/public/js/render.ts +190 -0
  87. package/dist/homebridge-ui/public/js/toast.d.ts +6 -0
  88. package/dist/homebridge-ui/public/js/toast.d.ts.map +1 -0
  89. package/dist/homebridge-ui/public/js/toast.js +29 -0
  90. package/dist/homebridge-ui/public/js/toast.js.map +1 -0
  91. package/dist/homebridge-ui/public/js/toast.ts +37 -0
  92. package/dist/homebridge-ui/public/js/types.d.ts +23 -0
  93. package/dist/homebridge-ui/public/js/types.d.ts.map +1 -0
  94. package/dist/homebridge-ui/public/js/types.js +2 -0
  95. package/dist/homebridge-ui/public/js/types.js.map +1 -0
  96. package/dist/homebridge-ui/public/js/types.ts +26 -0
  97. package/dist/homebridge-ui/server.d.ts +1 -3
  98. package/dist/homebridge-ui/server.d.ts.map +1 -1
  99. package/dist/homebridge-ui/server.js +10 -561
  100. package/dist/homebridge-ui/server.js.map +1 -1
  101. package/dist/homebridge-ui/utils/config-parser.d.ts +35 -0
  102. package/dist/homebridge-ui/utils/config-parser.d.ts.map +1 -0
  103. package/dist/homebridge-ui/utils/config-parser.js +87 -0
  104. package/dist/homebridge-ui/utils/config-parser.js.map +1 -0
  105. package/dist/homebridge-ui/utils/logger.d.ts +7 -0
  106. package/dist/homebridge-ui/utils/logger.d.ts.map +1 -0
  107. package/dist/homebridge-ui/utils/logger.js +17 -0
  108. package/dist/homebridge-ui/utils/logger.js.map +1 -0
  109. package/dist/platform.d.ts.map +1 -1
  110. package/dist/platform.js +6 -2
  111. package/dist/platform.js.map +1 -1
  112. package/dist/switchbotClient.d.ts.map +1 -1
  113. package/dist/switchbotClient.js +2 -0
  114. package/dist/switchbotClient.js.map +1 -1
  115. package/docs/variables/default.html +1 -1
  116. package/eslint.config.js +5 -0
  117. package/nodemon.json +2 -2
  118. package/package.json +20 -10
  119. package/scripts/build-ui.js +36 -0
  120. package/scripts/free-dev-ports.mjs +105 -0
  121. package/scripts/sync-device-types.mjs +28 -0
  122. package/src/device-types.ts +145 -0
  123. package/src/deviceFactory.ts +71 -31
  124. package/src/devices/genericDevice.ts +5 -2
  125. package/src/homebridge-ui/endpoints/config.ts +79 -0
  126. package/src/homebridge-ui/endpoints/credentials.ts +74 -0
  127. package/src/homebridge-ui/endpoints/devices.ts +321 -0
  128. package/src/homebridge-ui/endpoints/discovery.ts +191 -0
  129. package/src/homebridge-ui/public/index.html +144 -588
  130. package/src/homebridge-ui/public/js/api.ts +189 -0
  131. package/src/homebridge-ui/public/js/app.ts +21 -0
  132. package/src/homebridge-ui/public/js/constants.ts +1 -0
  133. package/src/homebridge-ui/public/js/credentials.ts +100 -0
  134. package/src/homebridge-ui/public/js/devices-delete.ts +113 -0
  135. package/src/homebridge-ui/public/js/devices.ts +78 -0
  136. package/src/homebridge-ui/public/js/discovery.ts +123 -0
  137. package/src/homebridge-ui/public/js/logger.ts +11 -0
  138. package/src/homebridge-ui/public/js/modal.ts +28 -0
  139. package/src/homebridge-ui/public/js/modals.ts +153 -0
  140. package/src/homebridge-ui/public/js/render.ts +190 -0
  141. package/src/homebridge-ui/public/js/toast.ts +37 -0
  142. package/src/homebridge-ui/public/js/types.ts +26 -0
  143. package/src/homebridge-ui/server.ts +11 -647
  144. package/src/homebridge-ui/utils/config-parser.ts +108 -0
  145. package/src/homebridge-ui/utils/logger.ts +17 -0
  146. package/src/platform.ts +6 -2
  147. package/src/switchbotClient.ts +2 -0
  148. package/switchbot-homebridge-switchbot-5.0.0.tgz +0 -0
@@ -33,7 +33,10 @@
33
33
  "description": "List of SwitchBot devices to manage. Use the UI to add devices and copy device IDs.",
34
34
  "items": {
35
35
  "type": "object",
36
- "required": ["deviceId", "configDeviceType"],
36
+ "required": [
37
+ "deviceId",
38
+ "configDeviceType"
39
+ ],
37
40
  "properties": {
38
41
  "configDeviceName": {
39
42
  "type": "string",
@@ -50,35 +53,107 @@
50
53
  "title": "Device Type",
51
54
  "description": "Select the device type so the plugin can expose the correct HomeKit/Matter services and characteristics.",
52
55
  "enum": [
53
- "bot",
54
- "curtain",
55
- "fan",
56
- "light",
57
- "lightstrip",
58
- "motion",
59
- "contact",
60
- "vacuum",
61
- "lock",
62
- "humidifier",
63
- "temperature",
64
- "relay",
65
- "plug",
66
- "wosweeper",
67
- "blindtilt",
68
- "curtain3",
69
- "rollershade",
70
- "meter",
71
- "waterdetector",
72
- "walletfinder",
73
- "unknown"
74
- ],
75
- "default": "unknown"
56
+ "Blind Tilt",
57
+ "Curtain",
58
+ "Curtain3",
59
+ "Roller Shade",
60
+ "Keypad",
61
+ "Keypad Touch",
62
+ "Keypad Vision",
63
+ "Keypad Vision Pro",
64
+ "Lock Lite",
65
+ "Smart Lock",
66
+ "Smart Lock Pro",
67
+ "Smart Lock Ultra",
68
+ "Video Doorbell",
69
+ "Contact Sensor",
70
+ "Motion Sensor",
71
+ "Presence Sensor",
72
+ "Water Detector",
73
+ "Candle Warmer Lamp",
74
+ "Ceiling Light",
75
+ "Ceiling Light Pro",
76
+ "Color Bulb",
77
+ "Floor Lamp",
78
+ "RGBIC Neon Rope Light",
79
+ "RGBIC Neon Wire Rope Light",
80
+ "RGBICWW Floor Lamp",
81
+ "RGBICWW Strip Light",
82
+ "Strip Light",
83
+ "Strip Light 3",
84
+ "Air Purifier PM2.5",
85
+ "Air Purifier Table PM2.5",
86
+ "Air Purifier VOC",
87
+ "Air Purifier Table VOC",
88
+ "Battery Circulator Fan",
89
+ "Circulator Fan",
90
+ "Humidifier",
91
+ "Humidifier2",
92
+ "Meter",
93
+ "MeterPlus",
94
+ "MeterPro",
95
+ "MeterPro(CO2)",
96
+ "Smart Radiator Thermostat",
97
+ "Standing Circulator Fan",
98
+ "WoIOSensor",
99
+ "Garage Door Opener",
100
+ "Plug",
101
+ "Plug Mini (EU)",
102
+ "Plug Mini (JP)",
103
+ "Plug Mini (US)",
104
+ "Relay Switch 1",
105
+ "Relay Switch 1PM",
106
+ "Relay Switch 2PM",
107
+ "K10+",
108
+ "K10+ Pro",
109
+ "Robot Vacuum Cleaner K10+ Pro Combo",
110
+ "Robot Vacuum Cleaner K11+",
111
+ "Robot Vacuum Cleaner K20 Plus Pro",
112
+ "Robot Vacuum Cleaner S1",
113
+ "Robot Vacuum Cleaner S1 Plus",
114
+ "Robot Vacuum Cleaner S10",
115
+ "Robot Vacuum Cleaner S20",
116
+ "AI Hub",
117
+ "Hub",
118
+ "Hub 2",
119
+ "Hub 3",
120
+ "Hub Mini",
121
+ "Hub Plus",
122
+ "Indoor Cam",
123
+ "Pan/Tilt Cam",
124
+ "Pan/Tilt Cam 2K",
125
+ "Pan/Tilt Cam Plus 2K",
126
+ "Pan/Tilt Cam Plus 3K",
127
+ "Air Conditioner",
128
+ "Air Purifier",
129
+ "Camera",
130
+ "DVD",
131
+ "Fan",
132
+ "Light",
133
+ "Others",
134
+ "Projector",
135
+ "Set Top Box",
136
+ "Speaker",
137
+ "Streamer",
138
+ "TV",
139
+ "Vacuum Cleaner",
140
+ "Water Heater",
141
+ "AI Art Frame",
142
+ "Bot",
143
+ "Home Climate Panel",
144
+ "Remote",
145
+ "remote with screen"
146
+ ]
76
147
  },
77
148
  "connectionPreference": {
78
149
  "type": "string",
79
150
  "title": "Connection Preference",
80
151
  "description": "Select whether this device should prefer BLE, OpenAPI, or auto-detect (hybrid).",
81
- "enum": ["auto", "ble", "openapi"],
152
+ "enum": [
153
+ "auto",
154
+ "ble",
155
+ "openapi"
156
+ ],
82
157
  "default": "auto"
83
158
  },
84
159
  "room": {
@@ -0,0 +1,15 @@
1
+ export declare const DEVICE_TYPES: {
2
+ readonly 'Window Coverings': readonly ["Blind Tilt", "Curtain", "Curtain3", "Roller Shade"];
3
+ readonly 'Locks & Access': readonly ["Keypad", "Keypad Touch", "Keypad Vision", "Keypad Vision Pro", "Lock Lite", "Smart Lock", "Smart Lock Pro", "Smart Lock Ultra", "Video Doorbell"];
4
+ readonly Sensors: readonly ["Contact Sensor", "Motion Sensor", "Presence Sensor", "Water Detector"];
5
+ readonly Lighting: readonly ["Candle Warmer Lamp", "Ceiling Light", "Ceiling Light Pro", "Color Bulb", "Floor Lamp", "RGBIC Neon Rope Light", "RGBIC Neon Wire Rope Light", "RGBICWW Floor Lamp", "RGBICWW Strip Light", "Strip Light", "Strip Light 3"];
6
+ readonly 'Climate Control': readonly ["Air Purifier PM2.5", "Air Purifier Table PM2.5", "Air Purifier VOC", "Air Purifier Table VOC", "Battery Circulator Fan", "Circulator Fan", "Humidifier", "Humidifier2", "Meter", "MeterPlus", "MeterPro", "MeterPro(CO2)", "Smart Radiator Thermostat", "Standing Circulator Fan", "WoIOSensor"];
7
+ readonly 'Plugs & Switches': readonly ["Garage Door Opener", "Plug", "Plug Mini (EU)", "Plug Mini (JP)", "Plug Mini (US)", "Relay Switch 1", "Relay Switch 1PM", "Relay Switch 2PM"];
8
+ readonly 'Robot Vacuums': readonly ["K10+", "K10+ Pro", "Robot Vacuum Cleaner K10+ Pro Combo", "Robot Vacuum Cleaner K11+", "Robot Vacuum Cleaner K20 Plus Pro", "Robot Vacuum Cleaner S1", "Robot Vacuum Cleaner S1 Plus", "Robot Vacuum Cleaner S10", "Robot Vacuum Cleaner S20"];
9
+ readonly Hubs: readonly ["AI Hub", "Hub", "Hub 2", "Hub 3", "Hub Mini", "Hub Plus"];
10
+ readonly Cameras: readonly ["Indoor Cam", "Pan/Tilt Cam", "Pan/Tilt Cam 2K", "Pan/Tilt Cam Plus 2K", "Pan/Tilt Cam Plus 3K"];
11
+ readonly 'IR Devices': readonly ["Air Conditioner", "Air Purifier", "Camera", "DVD", "Fan", "Light", "Others", "Projector", "Set Top Box", "Speaker", "Streamer", "TV", "Vacuum Cleaner", "Water Heater"];
12
+ readonly 'Other Devices': readonly ["AI Art Frame", "Bot", "Home Climate Panel", "Remote", "remote with screen"];
13
+ };
14
+ export declare const DEVICE_TYPE_NORMALIZATION_MAP: Record<string, string>;
15
+ //# sourceMappingURL=device-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-types.d.ts","sourceRoot":"","sources":["../src/device-types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;CA0Ff,CAAA;AAEV,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoDhE,CAAA"}
@@ -0,0 +1,145 @@
1
+ export const DEVICE_TYPES = {
2
+ 'Window Coverings': ['Blind Tilt', 'Curtain', 'Curtain3', 'Roller Shade'],
3
+ 'Locks & Access': [
4
+ 'Keypad',
5
+ 'Keypad Touch',
6
+ 'Keypad Vision',
7
+ 'Keypad Vision Pro',
8
+ 'Lock Lite',
9
+ 'Smart Lock',
10
+ 'Smart Lock Pro',
11
+ 'Smart Lock Ultra',
12
+ 'Video Doorbell',
13
+ ],
14
+ 'Sensors': ['Contact Sensor', 'Motion Sensor', 'Presence Sensor', 'Water Detector'],
15
+ 'Lighting': [
16
+ 'Candle Warmer Lamp',
17
+ 'Ceiling Light',
18
+ 'Ceiling Light Pro',
19
+ 'Color Bulb',
20
+ 'Floor Lamp',
21
+ 'RGBIC Neon Rope Light',
22
+ 'RGBIC Neon Wire Rope Light',
23
+ 'RGBICWW Floor Lamp',
24
+ 'RGBICWW Strip Light',
25
+ 'Strip Light',
26
+ 'Strip Light 3',
27
+ ],
28
+ 'Climate Control': [
29
+ 'Air Purifier PM2.5',
30
+ 'Air Purifier Table PM2.5',
31
+ 'Air Purifier VOC',
32
+ 'Air Purifier Table VOC',
33
+ 'Battery Circulator Fan',
34
+ 'Circulator Fan',
35
+ 'Humidifier',
36
+ 'Humidifier2',
37
+ 'Meter',
38
+ 'MeterPlus',
39
+ 'MeterPro',
40
+ 'MeterPro(CO2)',
41
+ 'Smart Radiator Thermostat',
42
+ 'Standing Circulator Fan',
43
+ 'WoIOSensor',
44
+ ],
45
+ 'Plugs & Switches': [
46
+ 'Garage Door Opener',
47
+ 'Plug',
48
+ 'Plug Mini (EU)',
49
+ 'Plug Mini (JP)',
50
+ 'Plug Mini (US)',
51
+ 'Relay Switch 1',
52
+ 'Relay Switch 1PM',
53
+ 'Relay Switch 2PM',
54
+ ],
55
+ 'Robot Vacuums': [
56
+ 'K10+',
57
+ 'K10+ Pro',
58
+ 'Robot Vacuum Cleaner K10+ Pro Combo',
59
+ 'Robot Vacuum Cleaner K11+',
60
+ 'Robot Vacuum Cleaner K20 Plus Pro',
61
+ 'Robot Vacuum Cleaner S1',
62
+ 'Robot Vacuum Cleaner S1 Plus',
63
+ 'Robot Vacuum Cleaner S10',
64
+ 'Robot Vacuum Cleaner S20',
65
+ ],
66
+ 'Hubs': ['AI Hub', 'Hub', 'Hub 2', 'Hub 3', 'Hub Mini', 'Hub Plus'],
67
+ 'Cameras': [
68
+ 'Indoor Cam',
69
+ 'Pan/Tilt Cam',
70
+ 'Pan/Tilt Cam 2K',
71
+ 'Pan/Tilt Cam Plus 2K',
72
+ 'Pan/Tilt Cam Plus 3K',
73
+ ],
74
+ 'IR Devices': [
75
+ 'Air Conditioner',
76
+ 'Air Purifier',
77
+ 'Camera',
78
+ 'DVD',
79
+ 'Fan',
80
+ 'Light',
81
+ 'Others',
82
+ 'Projector',
83
+ 'Set Top Box',
84
+ 'Speaker',
85
+ 'Streamer',
86
+ 'TV',
87
+ 'Vacuum Cleaner',
88
+ 'Water Heater',
89
+ ],
90
+ 'Other Devices': ['AI Art Frame', 'Bot', 'Home Climate Panel', 'Remote', 'remote with screen'],
91
+ };
92
+ export const DEVICE_TYPE_NORMALIZATION_MAP = {
93
+ 'motion sensor': 'motion',
94
+ 'contact sensor': 'contact',
95
+ 'presence sensor': 'contact',
96
+ 'water detector': 'water detector',
97
+ 'humidifier2': 'humidifier',
98
+ 'circulator fan': 'fan',
99
+ 'battery circulator fan': 'fan',
100
+ 'standing circulator fan': 'fan',
101
+ 'smart lock': 'lock',
102
+ 'smart lock pro': 'lock',
103
+ 'smart lock ultra': 'lock',
104
+ 'lock lite': 'lock',
105
+ 'keypad': 'lock',
106
+ 'keypad touch': 'lock',
107
+ 'keypad vision': 'lock',
108
+ 'keypad vision pro': 'lock',
109
+ 'color bulb': 'light',
110
+ 'ceiling light': 'light',
111
+ 'ceiling light pro': 'light',
112
+ 'candle warmer lamp': 'light',
113
+ 'floor lamp': 'light',
114
+ 'rgbic neon rope light': 'lightstrip',
115
+ 'rgbic neon wire rope light': 'lightstrip',
116
+ 'rgbicww floor lamp': 'lightstrip',
117
+ 'rgbicww strip light': 'lightstrip',
118
+ 'strip light': 'strip light',
119
+ 'strip light 3': 'strip light',
120
+ 'robot vacuum cleaner s1': 'vacuum',
121
+ 'robot vacuum cleaner s1 plus': 'vacuum',
122
+ 'robot vacuum cleaner s10': 'vacuum',
123
+ 'robot vacuum cleaner s20': 'vacuum',
124
+ 'robot vacuum cleaner k10+ pro combo': 'wosweeper',
125
+ 'robot vacuum cleaner k11+': 'wosweeper',
126
+ 'robot vacuum cleaner k20 plus pro': 'wosweeper',
127
+ 'plug mini (eu)': 'plug mini (eu)',
128
+ 'plug mini (jp)': 'plug mini (jp)',
129
+ 'plug mini (us)': 'plug mini (us)',
130
+ 'relay switch 1': 'relay switch 1',
131
+ 'relay switch 1pm': 'relay switch 1pm',
132
+ 'relay switch 2pm': 'relay switch 2pm',
133
+ 'blind tilt': 'blind tilt',
134
+ 'roller shade': 'roller shade',
135
+ 'curtain3': 'curtain3',
136
+ 'hub 2': 'hub 2',
137
+ 'meterplus': 'meterplus',
138
+ 'meterpro': 'meterpro',
139
+ 'meterpro(co2)': 'meterpro(co2)',
140
+ 'walletfinder': 'walletfinder',
141
+ 'k10+': 'k10+',
142
+ 'k10+ pro': 'k10+ pro',
143
+ 'k10+ pro (wosweeperminipro)': 'k10+ pro (wosweeperminipro)',
144
+ };
145
+ //# sourceMappingURL=device-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-types.js","sourceRoot":"","sources":["../src/device-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;IACzE,gBAAgB,EAAE;QAChB,QAAQ;QACR,cAAc;QACd,eAAe;QACf,mBAAmB;QACnB,WAAW;QACX,YAAY;QACZ,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;KACjB;IACD,SAAS,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;IACnF,UAAU,EAAE;QACV,oBAAoB;QACpB,eAAe;QACf,mBAAmB;QACnB,YAAY;QACZ,YAAY;QACZ,uBAAuB;QACvB,4BAA4B;QAC5B,oBAAoB;QACpB,qBAAqB;QACrB,aAAa;QACb,eAAe;KAChB;IACD,iBAAiB,EAAE;QACjB,oBAAoB;QACpB,0BAA0B;QAC1B,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,OAAO;QACP,WAAW;QACX,UAAU;QACV,eAAe;QACf,2BAA2B;QAC3B,yBAAyB;QACzB,YAAY;KACb;IACD,kBAAkB,EAAE;QAClB,oBAAoB;QACpB,MAAM;QACN,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;KACnB;IACD,eAAe,EAAE;QACf,MAAM;QACN,UAAU;QACV,qCAAqC;QACrC,2BAA2B;QAC3B,mCAAmC;QACnC,yBAAyB;QACzB,8BAA8B;QAC9B,0BAA0B;QAC1B,0BAA0B;KAC3B;IACD,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;IACnE,SAAS,EAAE;QACT,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,sBAAsB;QACtB,sBAAsB;KACvB;IACD,YAAY,EAAE;QACZ,iBAAiB;QACjB,cAAc;QACd,QAAQ;QACR,KAAK;QACL,KAAK;QACL,OAAO;QACP,QAAQ;QACR,WAAW;QACX,aAAa;QACb,SAAS;QACT,UAAU;QACV,IAAI;QACJ,gBAAgB;QAChB,cAAc;KACf;IACD,eAAe,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,CAAC;CACtF,CAAA;AAEV,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,eAAe,EAAE,QAAQ;IACzB,gBAAgB,EAAE,SAAS;IAC3B,iBAAiB,EAAE,SAAS;IAC5B,gBAAgB,EAAE,gBAAgB;IAClC,aAAa,EAAE,YAAY;IAC3B,gBAAgB,EAAE,KAAK;IACvB,wBAAwB,EAAE,KAAK;IAC/B,yBAAyB,EAAE,KAAK;IAChC,YAAY,EAAE,MAAM;IACpB,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,MAAM;IAC1B,WAAW,EAAE,MAAM;IACnB,QAAQ,EAAE,MAAM;IAChB,cAAc,EAAE,MAAM;IACtB,eAAe,EAAE,MAAM;IACvB,mBAAmB,EAAE,MAAM;IAC3B,YAAY,EAAE,OAAO;IACrB,eAAe,EAAE,OAAO;IACxB,mBAAmB,EAAE,OAAO;IAC5B,oBAAoB,EAAE,OAAO;IAC7B,YAAY,EAAE,OAAO;IACrB,uBAAuB,EAAE,YAAY;IACrC,4BAA4B,EAAE,YAAY;IAC1C,oBAAoB,EAAE,YAAY;IAClC,qBAAqB,EAAE,YAAY;IACnC,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,aAAa;IAC9B,yBAAyB,EAAE,QAAQ;IACnC,8BAA8B,EAAE,QAAQ;IACxC,0BAA0B,EAAE,QAAQ;IACpC,0BAA0B,EAAE,QAAQ;IACpC,qCAAqC,EAAE,WAAW;IAClD,2BAA2B,EAAE,WAAW;IACxC,mCAAmC,EAAE,WAAW;IAChD,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,kBAAkB,EAAE,kBAAkB;IACtC,kBAAkB,EAAE,kBAAkB;IACtC,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,UAAU;IACtB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,WAAW;IACxB,UAAU,EAAE,UAAU;IACtB,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,UAAU;IACtB,6BAA6B,EAAE,6BAA6B;CAC7D,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { SwitchBotPluginConfig, DeviceType } from './settings.js';
1
+ import type { DeviceType, SwitchBotPluginConfig } from './settings.js';
2
2
  export interface DeviceOptions {
3
3
  id: string;
4
4
  type: DeviceType;
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFactory.d.ts","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAiCtE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAgDD,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO;;2BAgC3E,GAAG;;GAG7B"}
1
+ {"version":3,"file":"deviceFactory.d.ts","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAmCtE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAoFD,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO;;2BAkC3E,GAAG;;GAG7B"}
@@ -1,30 +1,34 @@
1
+ import { DEVICE_TYPE_NORMALIZATION_MAP } from './device-types.js';
2
+ import { BlindTiltDevice, BotDevice, ContactSensorDevice, Curtain3Device, CurtainDevice, FanDevice, GenericDevice, Hub2Device, HumidifierDevice, LightDevice, LightStripDevice, LockDevice, MeterDevice, MotionSensorDevice, PlugDevice, PlugMiniDevice, RelaySwitch1PMDevice, RelaySwitchDevice, RollerShadeDevice, SmartFanDevice, StripLightDevice, TemperatureSensorDevice, VacuumDevice, WalletFinderDevice, WaterDetectorDevice, WoSweeperDevice, WoSweeperMiniDevice, WoSweeperMiniProDevice, } from './devices/genericDevice.js';
1
3
  import { SwitchBotClient } from './switchbotClient.js';
2
- import { GenericDevice, BotDevice, CurtainDevice, FanDevice, LightDevice, LightStripDevice, MotionSensorDevice, ContactSensorDevice, VacuumDevice, LockDevice, HumidifierDevice, TemperatureSensorDevice, RelaySwitchDevice, RelaySwitch1PMDevice, PlugDevice, PlugMiniDevice, BlindTiltDevice, Curtain3Device, RollerShadeDevice, Hub2Device, MeterDevice, WaterDetectorDevice, SmartFanDevice, StripLightDevice, WalletFinderDevice, WoSweeperDevice, WoSweeperMiniDevice, WoSweeperMiniProDevice, } from './devices/genericDevice.js';
3
4
  const DEVICE_CLASS_MAP = {
4
- bot: BotDevice,
5
- curtain: CurtainDevice,
6
- fan: FanDevice,
7
- light: LightDevice,
8
- lightstrip: LightStripDevice,
9
- motion: MotionSensorDevice,
10
- contact: ContactSensorDevice,
11
- vacuum: VacuumDevice,
12
- lock: LockDevice,
13
- humidifier: HumidifierDevice,
14
- temperature: TemperatureSensorDevice,
5
+ // Primary device type keys (lowercase, simplified)
6
+ 'bot': BotDevice,
7
+ 'curtain': CurtainDevice,
8
+ 'fan': FanDevice,
9
+ 'light': LightDevice,
10
+ 'lightstrip': LightStripDevice,
11
+ 'motion': MotionSensorDevice,
12
+ 'contact': ContactSensorDevice,
13
+ 'vacuum': VacuumDevice,
14
+ 'lock': LockDevice,
15
+ 'humidifier': HumidifierDevice,
16
+ 'temperature': TemperatureSensorDevice,
15
17
  'relay switch 1': RelaySwitchDevice,
16
18
  'relay switch 1pm': RelaySwitch1PMDevice,
17
- plug: PlugDevice,
19
+ 'relay switch 2pm': RelaySwitch1PMDevice,
20
+ 'plug': PlugDevice,
18
21
  'plug mini (jp)': PlugMiniDevice,
19
22
  'plug mini (us)': PlugMiniDevice,
23
+ 'plug mini (eu)': PlugMiniDevice,
20
24
  'blind tilt': BlindTiltDevice,
21
- curtain3: Curtain3Device,
25
+ 'curtain3': Curtain3Device,
22
26
  'worollershade': RollerShadeDevice,
23
27
  'wo rollershade': RollerShadeDevice,
24
28
  'roller shade': RollerShadeDevice,
25
29
  'rollershade': RollerShadeDevice,
26
30
  'hub 2': Hub2Device,
27
- meter: MeterDevice,
31
+ 'meter': MeterDevice,
28
32
  'meterplus': MeterDevice,
29
33
  'meter plus (jp)': MeterDevice,
30
34
  'meterpro': MeterDevice,
@@ -32,6 +36,7 @@ const DEVICE_CLASS_MAP = {
32
36
  'water detector': WaterDetectorDevice,
33
37
  'smart fan': SmartFanDevice,
34
38
  'strip light': StripLightDevice,
39
+ 'strip light 3': StripLightDevice,
35
40
  'walletfinder': WalletFinderDevice,
36
41
  'wosweeper': WoSweeperDevice,
37
42
  'wosweepermini': WoSweeperMiniDevice,
@@ -39,9 +44,41 @@ const DEVICE_CLASS_MAP = {
39
44
  'k10+': WoSweeperDevice,
40
45
  'k10+ pro': WoSweeperDevice,
41
46
  'k10+ pro (wosweeperminipro)': WoSweeperMiniProDevice,
47
+ // API display name aliases (for UI compatibility)
48
+ 'motion sensor': MotionSensorDevice,
49
+ 'contact sensor': ContactSensorDevice,
50
+ 'humidifier2': HumidifierDevice,
51
+ 'circulator fan': FanDevice,
52
+ 'battery circulator fan': FanDevice,
53
+ 'standing circulator fan': FanDevice,
54
+ 'smart lock': LockDevice,
55
+ 'smart lock pro': LockDevice,
56
+ 'smart lock ultra': LockDevice,
57
+ 'lock lite': LockDevice,
58
+ 'keypad': LockDevice,
59
+ 'keypad touch': LockDevice,
60
+ 'keypad vision': LockDevice,
61
+ 'keypad vision pro': LockDevice,
62
+ 'color bulb': LightDevice,
63
+ 'ceiling light': LightDevice,
64
+ 'ceiling light pro': LightDevice,
65
+ 'candle warmer lamp': LightDevice,
66
+ 'floor lamp': LightDevice,
67
+ 'rgbic neon rope light': LightStripDevice,
68
+ 'rgbic neon wire rope light': LightStripDevice,
69
+ 'rgbicww floor lamp': LightStripDevice,
70
+ 'rgbicww strip light': LightStripDevice,
71
+ 'robot vacuum cleaner s1': VacuumDevice,
72
+ 'robot vacuum cleaner s1 plus': VacuumDevice,
73
+ 'robot vacuum cleaner s10': VacuumDevice,
74
+ 'robot vacuum cleaner s20': VacuumDevice,
75
+ 'robot vacuum cleaner k10+ pro combo': WoSweeperDevice,
76
+ 'robot vacuum cleaner k11+': WoSweeperDevice,
77
+ 'robot vacuum cleaner k20 plus pro': WoSweeperDevice,
42
78
  };
43
79
  function classForType(type) {
44
- const key = (type || '').toLowerCase();
80
+ const rawKey = (type || '').toLowerCase();
81
+ const key = DEVICE_TYPE_NORMALIZATION_MAP[rawKey] ?? rawKey;
45
82
  return DEVICE_CLASS_MAP[key] ?? GenericDevice;
46
83
  }
47
84
  export async function createDevice(opts, cfg, useMatter) {
@@ -63,8 +100,9 @@ export async function createDevice(opts, cfg, useMatter) {
63
100
  try {
64
101
  // Prefer client-backed getDevice when available
65
102
  const dev = await client.getDevice(opts.id);
66
- if (dev)
103
+ if (dev) {
67
104
  return dev;
105
+ }
68
106
  }
69
107
  catch (e) {
70
108
  // ignore and fallback to device implementation
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EACL,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AASnC,MAAM,gBAAgB,GAAwB;IAC5C,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,aAAa;IACtB,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,UAAU;IAChB,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,uBAAuB;IACpC,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,oBAAoB;IACxC,IAAI,EAAE,UAAU;IAChB,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,cAAc;IAChC,YAAY,EAAE,eAAe;IAC7B,QAAQ,EAAE,cAAc;IACxB,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,iBAAiB;IACnC,cAAc,EAAE,iBAAiB;IACjC,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,UAAU;IACnB,KAAK,EAAE,WAAW;IAClB,WAAW,EAAE,WAAW;IACxB,iBAAiB,EAAE,WAAW;IAC9B,UAAU,EAAE,WAAW;IACvB,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,cAAc,EAAE,kBAAkB;IAClC,WAAW,EAAE,eAAe;IAC5B,eAAe,EAAE,mBAAmB;IACpC,kBAAkB,EAAE,sBAAsB;IAC1C,MAAM,EAAE,eAAe;IACvB,UAAU,EAAE,eAAe;IAC3B,6BAA6B,EAAE,sBAAsB;CACtD,CAAA;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACtC,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,aAAa,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAmB,EAAE,GAA0B,EAAE,SAAkB;IACpG,mEAAmE;IACnE,6DAA6D;IAC7D,IAAI,MAAM,GAAS,GAAW,EAAE,OAAO,IAAI,IAAI,CAAA;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAED,kDAAkD;IAClD,MAAM,SAAS,GAAG,EAAE,GAAI,GAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAEtD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC9C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEnB,qEAAqE;IACrE,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC;YACH,gDAAgD;YAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAA;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,+CAA+C;QACjD,CAAC;QACD,OAAO,gBAAgB,EAAE,CAAA;IAC3B,CAAC,CAAA;IAED,wDAAwD;IACxD,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/G,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;KACvC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,EACL,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAStD,MAAM,gBAAgB,GAAwB;IAC5C,mDAAmD;IACnD,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,WAAW;IACpB,YAAY,EAAE,gBAAgB;IAC9B,QAAQ,EAAE,kBAAkB;IAC5B,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,UAAU;IAClB,YAAY,EAAE,gBAAgB;IAC9B,aAAa,EAAE,uBAAuB;IACtC,gBAAgB,EAAE,iBAAiB;IACnC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,MAAM,EAAE,UAAU;IAClB,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,cAAc;IAChC,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE,cAAc;IAC1B,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,iBAAiB;IACnC,cAAc,EAAE,iBAAiB;IACjC,aAAa,EAAE,iBAAiB;IAChC,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,WAAW;IACxB,iBAAiB,EAAE,WAAW;IAC9B,UAAU,EAAE,WAAW;IACvB,eAAe,EAAE,WAAW;IAC5B,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;IAC/B,eAAe,EAAE,gBAAgB;IACjC,cAAc,EAAE,kBAAkB;IAClC,WAAW,EAAE,eAAe;IAC5B,eAAe,EAAE,mBAAmB;IACpC,kBAAkB,EAAE,sBAAsB;IAC1C,MAAM,EAAE,eAAe;IACvB,UAAU,EAAE,eAAe;IAC3B,6BAA6B,EAAE,sBAAsB;IACrD,kDAAkD;IAClD,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,mBAAmB;IACrC,aAAa,EAAE,gBAAgB;IAC/B,gBAAgB,EAAE,SAAS;IAC3B,wBAAwB,EAAE,SAAS;IACnC,yBAAyB,EAAE,SAAS;IACpC,YAAY,EAAE,UAAU;IACxB,gBAAgB,EAAE,UAAU;IAC5B,kBAAkB,EAAE,UAAU;IAC9B,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,UAAU;IAC1B,eAAe,EAAE,UAAU;IAC3B,mBAAmB,EAAE,UAAU;IAC/B,YAAY,EAAE,WAAW;IACzB,eAAe,EAAE,WAAW;IAC5B,mBAAmB,EAAE,WAAW;IAChC,oBAAoB,EAAE,WAAW;IACjC,YAAY,EAAE,WAAW;IACzB,uBAAuB,EAAE,gBAAgB;IACzC,4BAA4B,EAAE,gBAAgB;IAC9C,oBAAoB,EAAE,gBAAgB;IACtC,qBAAqB,EAAE,gBAAgB;IACvC,yBAAyB,EAAE,YAAY;IACvC,8BAA8B,EAAE,YAAY;IAC5C,0BAA0B,EAAE,YAAY;IACxC,0BAA0B,EAAE,YAAY;IACxC,qCAAqC,EAAE,eAAe;IACtD,2BAA2B,EAAE,eAAe;IAC5C,mCAAmC,EAAE,eAAe;CACrD,CAAA;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACzC,MAAM,GAAG,GAAG,6BAA6B,CAAC,MAAM,CAAC,IAAI,MAAM,CAAA;IAC3D,OAAO,gBAAgB,CAAC,GAAG,CAAC,IAAI,aAAa,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAmB,EAAE,GAA0B,EAAE,SAAkB;IACpG,mEAAmE;IACnE,6DAA6D;IAC7D,IAAI,MAAM,GAAS,GAAW,EAAE,OAAO,IAAI,IAAI,CAAA;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IAED,kDAAkD;IAClD,MAAM,SAAS,GAAG,EAAE,GAAI,GAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAEtD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC9C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEnB,qEAAqE;IACrE,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrD,MAAM,CAAC,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC;YACH,gDAAgD;YAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,GAAG,CAAA;YACZ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,+CAA+C;QACjD,CAAC;QACD,OAAO,gBAAgB,EAAE,CAAA;IAC3B,CAAC,CAAA;IAED,wDAAwD;IACxD,OAAO;QACL,QAAQ,EAAE,MAAM;QAChB,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC/G,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;KACvC,CAAA;AACH,CAAC"}
@@ -154,7 +154,7 @@ export declare class HumidifierDevice extends GenericDevice {
154
154
  set: (v: any) => Promise<void>;
155
155
  };
156
156
  CurrentHumidifierDehumidifierState: {
157
- get: () => Promise<2 | 0>;
157
+ get: () => Promise<0 | 2>;
158
158
  };
159
159
  TargetHumidifierDehumidifierState: {
160
160
  get: () => Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"genericDevice.d.ts","sourceRoot":"","sources":["../../src/devices/genericDevice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"genericDevice.d.ts","sourceRoot":"","sources":["../../src/devices/genericDevice.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { MATTER_ATTRIBUTE_IDS, MATTER_CLUSTER_IDS } from '../utils.js';
2
2
  import { DeviceBase } from './deviceBase.js';
3
+ // Module-scope regex pattern to avoid recompilation
4
+ const HEX_COLOR_REGEX = /^#?[0-9A-F]{6}$/i;
3
5
  export class GenericDevice extends DeviceBase {
4
6
  constructor(opts, cfg) {
5
7
  super(opts, cfg);
@@ -398,7 +400,7 @@ export class LightDevice extends GenericDevice {
398
400
  }
399
401
  // try HSV from color hex
400
402
  const hex = s?.color || s?.colorHex || s?.colour;
401
- if (typeof hex === 'string' && /^#?[0-9A-F]{6}$/i.test(hex)) {
403
+ if (typeof hex === 'string' && HEX_COLOR_REGEX.test(hex)) {
402
404
  const h = (() => {
403
405
  const hsl = (h, s, l) => ({ h, s, l });
404
406
  // convert hex -> rgb -> hsv
@@ -447,7 +449,7 @@ export class LightDevice extends GenericDevice {
447
449
  }
448
450
  // if color hex is available, derive saturation from rgb
449
451
  const hex = s?.color || s?.colorHex || s?.colour;
450
- if (typeof hex === 'string' && /^#?[0-9A-F]{6}$/i.test(hex)) {
452
+ if (typeof hex === 'string' && HEX_COLOR_REGEX.test(hex)) {
451
453
  const cleaned = hex.replace('#', '');
452
454
  const r = Number.parseInt(cleaned.substr(0, 2), 16) / 255;
453
455
  const g = Number.parseInt(cleaned.substr(2, 2), 16) / 255;