@switchbot/homebridge-switchbot 3.8.3-beta.8 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/.github/workflows/beta-release.yml +7 -5
  2. package/.github/workflows/release.yml +7 -6
  3. package/CHANGELOG.md +10 -2
  4. package/config.schema.json +583 -937
  5. package/dist/device/blindtilt.d.ts +1 -4
  6. package/dist/device/blindtilt.d.ts.map +1 -1
  7. package/dist/device/blindtilt.js +68 -66
  8. package/dist/device/blindtilt.js.map +1 -1
  9. package/dist/device/bot.d.ts +1 -4
  10. package/dist/device/bot.d.ts.map +1 -1
  11. package/dist/device/bot.js +63 -59
  12. package/dist/device/bot.js.map +1 -1
  13. package/dist/device/ceilinglight.d.ts +1 -4
  14. package/dist/device/ceilinglight.d.ts.map +1 -1
  15. package/dist/device/ceilinglight.js +56 -65
  16. package/dist/device/ceilinglight.js.map +1 -1
  17. package/dist/device/colorbulb.d.ts +1 -4
  18. package/dist/device/colorbulb.d.ts.map +1 -1
  19. package/dist/device/colorbulb.js +73 -80
  20. package/dist/device/colorbulb.js.map +1 -1
  21. package/dist/device/contact.d.ts +1 -4
  22. package/dist/device/contact.d.ts.map +1 -1
  23. package/dist/device/contact.js +38 -38
  24. package/dist/device/contact.js.map +1 -1
  25. package/dist/device/curtain.d.ts +1 -4
  26. package/dist/device/curtain.d.ts.map +1 -1
  27. package/dist/device/curtain.js +60 -60
  28. package/dist/device/curtain.js.map +1 -1
  29. package/dist/device/device.d.ts +6 -6
  30. package/dist/device/device.d.ts.map +1 -1
  31. package/dist/device/device.js +87 -21
  32. package/dist/device/device.js.map +1 -1
  33. package/dist/device/fan.d.ts +1 -4
  34. package/dist/device/fan.d.ts.map +1 -1
  35. package/dist/device/fan.js +50 -51
  36. package/dist/device/fan.js.map +1 -1
  37. package/dist/device/hub.d.ts +1 -4
  38. package/dist/device/hub.d.ts.map +1 -1
  39. package/dist/device/hub.js +48 -48
  40. package/dist/device/hub.js.map +1 -1
  41. package/dist/device/humidifier.d.ts +1 -4
  42. package/dist/device/humidifier.d.ts.map +1 -1
  43. package/dist/device/humidifier.js +53 -55
  44. package/dist/device/humidifier.js.map +1 -1
  45. package/dist/device/iosensor.d.ts +1 -4
  46. package/dist/device/iosensor.d.ts.map +1 -1
  47. package/dist/device/iosensor.js +35 -35
  48. package/dist/device/iosensor.js.map +1 -1
  49. package/dist/device/lightstrip.d.ts +1 -4
  50. package/dist/device/lightstrip.d.ts.map +1 -1
  51. package/dist/device/lightstrip.js +57 -65
  52. package/dist/device/lightstrip.js.map +1 -1
  53. package/dist/device/lock.d.ts +1 -4
  54. package/dist/device/lock.d.ts.map +1 -1
  55. package/dist/device/lock.js +38 -39
  56. package/dist/device/lock.js.map +1 -1
  57. package/dist/device/meter.d.ts +1 -4
  58. package/dist/device/meter.d.ts.map +1 -1
  59. package/dist/device/meter.js +35 -35
  60. package/dist/device/meter.js.map +1 -1
  61. package/dist/device/meterplus.d.ts +1 -4
  62. package/dist/device/meterplus.d.ts.map +1 -1
  63. package/dist/device/meterplus.js +35 -35
  64. package/dist/device/meterplus.js.map +1 -1
  65. package/dist/device/motion.d.ts +1 -4
  66. package/dist/device/motion.d.ts.map +1 -1
  67. package/dist/device/motion.js +27 -27
  68. package/dist/device/motion.js.map +1 -1
  69. package/dist/device/plug.d.ts +1 -4
  70. package/dist/device/plug.d.ts.map +1 -1
  71. package/dist/device/plug.js +32 -32
  72. package/dist/device/plug.js.map +1 -1
  73. package/dist/device/robotvacuumcleaner.d.ts +1 -4
  74. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  75. package/dist/device/robotvacuumcleaner.js +39 -40
  76. package/dist/device/robotvacuumcleaner.js.map +1 -1
  77. package/dist/device/waterdetector.d.ts +1 -4
  78. package/dist/device/waterdetector.d.ts.map +1 -1
  79. package/dist/device/waterdetector.js +28 -28
  80. package/dist/device/waterdetector.js.map +1 -1
  81. package/dist/irdevice/airconditioner.d.ts +1 -1
  82. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  83. package/dist/irdevice/airconditioner.js +31 -32
  84. package/dist/irdevice/airconditioner.js.map +1 -1
  85. package/dist/irdevice/airpurifier.d.ts +1 -1
  86. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  87. package/dist/irdevice/airpurifier.js +11 -12
  88. package/dist/irdevice/airpurifier.js.map +1 -1
  89. package/dist/irdevice/camera.d.ts +1 -1
  90. package/dist/irdevice/camera.d.ts.map +1 -1
  91. package/dist/irdevice/camera.js +9 -10
  92. package/dist/irdevice/camera.js.map +1 -1
  93. package/dist/irdevice/fan.d.ts +1 -1
  94. package/dist/irdevice/fan.d.ts.map +1 -1
  95. package/dist/irdevice/fan.js +22 -23
  96. package/dist/irdevice/fan.js.map +1 -1
  97. package/dist/irdevice/irdevice.d.ts +6 -6
  98. package/dist/irdevice/irdevice.d.ts.map +1 -1
  99. package/dist/irdevice/irdevice.js +28 -14
  100. package/dist/irdevice/irdevice.js.map +1 -1
  101. package/dist/irdevice/light.d.ts +1 -1
  102. package/dist/irdevice/light.d.ts.map +1 -1
  103. package/dist/irdevice/light.js +12 -13
  104. package/dist/irdevice/light.js.map +1 -1
  105. package/dist/irdevice/other.d.ts +1 -1
  106. package/dist/irdevice/other.d.ts.map +1 -1
  107. package/dist/irdevice/other.js +12 -15
  108. package/dist/irdevice/other.js.map +1 -1
  109. package/dist/irdevice/tv.d.ts +1 -1
  110. package/dist/irdevice/tv.d.ts.map +1 -1
  111. package/dist/irdevice/tv.js +27 -28
  112. package/dist/irdevice/tv.js.map +1 -1
  113. package/dist/irdevice/vacuumcleaner.d.ts +1 -1
  114. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  115. package/dist/irdevice/vacuumcleaner.js +9 -10
  116. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  117. package/dist/irdevice/waterheater.d.ts +1 -1
  118. package/dist/irdevice/waterheater.d.ts.map +1 -1
  119. package/dist/irdevice/waterheater.js +9 -10
  120. package/dist/irdevice/waterheater.js.map +1 -1
  121. package/dist/platform.d.ts +9 -22
  122. package/dist/platform.d.ts.map +1 -1
  123. package/dist/platform.js +154 -260
  124. package/dist/platform.js.map +1 -1
  125. package/dist/settings.d.ts +64 -82
  126. package/dist/settings.d.ts.map +1 -1
  127. package/dist/settings.js +0 -20
  128. package/dist/settings.js.map +1 -1
  129. package/dist/utils.d.ts +1 -102
  130. package/dist/utils.d.ts.map +1 -1
  131. package/dist/utils.js +0 -105
  132. package/dist/utils.js.map +1 -1
  133. package/docs/assets/highlight.css +42 -0
  134. package/docs/assets/main.js +1 -1
  135. package/docs/functions/default.html +1 -1
  136. package/docs/index.html +61 -50
  137. package/docs/media/security-privacy-bluetooth.png +0 -0
  138. package/package.json +12 -15
  139. package/src/device/blindtilt.ts +74 -74
  140. package/src/device/bot.ts +68 -67
  141. package/src/device/ceilinglight.ts +59 -70
  142. package/src/device/colorbulb.ts +79 -88
  143. package/src/device/contact.ts +40 -43
  144. package/src/device/curtain.ts +66 -68
  145. package/src/device/device.ts +87 -41
  146. package/src/device/fan.ts +52 -56
  147. package/src/device/hub.ts +50 -53
  148. package/src/device/humidifier.ts +56 -61
  149. package/src/device/iosensor.ts +37 -40
  150. package/src/device/lightstrip.ts +62 -72
  151. package/src/device/lock.ts +41 -45
  152. package/src/device/meter.ts +37 -40
  153. package/src/device/meterplus.ts +37 -40
  154. package/src/device/motion.ts +29 -32
  155. package/src/device/plug.ts +34 -37
  156. package/src/device/robotvacuumcleaner.ts +41 -49
  157. package/src/device/waterdetector.ts +30 -33
  158. package/src/irdevice/airconditioner.ts +33 -35
  159. package/src/irdevice/airpurifier.ts +12 -13
  160. package/src/irdevice/camera.ts +10 -11
  161. package/src/irdevice/fan.ts +24 -25
  162. package/src/irdevice/irdevice.ts +31 -27
  163. package/src/irdevice/light.ts +14 -15
  164. package/src/irdevice/other.ts +14 -17
  165. package/src/irdevice/tv.ts +28 -29
  166. package/src/irdevice/vacuumcleaner.ts +10 -11
  167. package/src/irdevice/waterheater.ts +10 -11
  168. package/src/platform.ts +178 -287
  169. package/src/settings.ts +67 -88
  170. package/src/utils.ts +2 -106
  171. package/dist/types/bledevicestatus.d.ts +0 -281
  172. package/dist/types/bledevicestatus.d.ts.map +0 -1
  173. package/dist/types/bledevicestatus.js +0 -2
  174. package/dist/types/bledevicestatus.js.map +0 -1
  175. package/dist/types/devicelist.d.ts +0 -89
  176. package/dist/types/devicelist.d.ts.map +0 -1
  177. package/dist/types/devicelist.js +0 -6
  178. package/dist/types/devicelist.js.map +0 -1
  179. package/dist/types/deviceresponse.d.ts +0 -13
  180. package/dist/types/deviceresponse.d.ts.map +0 -1
  181. package/dist/types/deviceresponse.js +0 -2
  182. package/dist/types/deviceresponse.js.map +0 -1
  183. package/dist/types/devicestatus.d.ts +0 -149
  184. package/dist/types/devicestatus.d.ts.map +0 -1
  185. package/dist/types/devicestatus.js +0 -3
  186. package/dist/types/devicestatus.js.map +0 -1
  187. package/dist/types/devicewebhookstatus.d.ts +0 -156
  188. package/dist/types/devicewebhookstatus.d.ts.map +0 -1
  189. package/dist/types/devicewebhookstatus.js +0 -2
  190. package/dist/types/devicewebhookstatus.js.map +0 -1
  191. package/dist/types/irdevicelist.d.ts +0 -10
  192. package/dist/types/irdevicelist.d.ts.map +0 -1
  193. package/dist/types/irdevicelist.js +0 -2
  194. package/dist/types/irdevicelist.js.map +0 -1
  195. package/dist/types/pushbody.d.ts +0 -6
  196. package/dist/types/pushbody.d.ts.map +0 -1
  197. package/dist/types/pushbody.js +0 -2
  198. package/dist/types/pushbody.js.map +0 -1
  199. package/src/types/bledevicestatus.ts +0 -303
  200. package/src/types/devicelist.ts +0 -124
  201. package/src/types/deviceresponse.ts +0 -14
  202. package/src/types/devicestatus.ts +0 -178
  203. package/src/types/devicewebhookstatus.ts +0 -191
  204. package/src/types/irdevicelist.ts +0 -15
  205. package/src/types/pushbody.ts +0 -9
@@ -313,700 +313,367 @@
313
313
  "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));"
314
314
  }
315
315
  },
316
- "hub": {
317
- "type": "object",
318
- "properties": {
319
- "hide_temperature": {
320
- "title": "Hide Hub 2's Temperature Sensor",
321
- "type": "boolean",
322
- "condition": {
323
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Hub 2' && model.options.devices[arrayIndices].deviceId);"
324
- }
325
- },
326
- "convertUnitTo": {
327
- "title": "Convert Hub's Temperature Unit To",
328
- "type": "string",
329
- "condition": {
330
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Hub 2' && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hub.hide_temperature);"
331
- },
332
- "oneOf": [
333
- {
334
- "title": "Celsius",
335
- "enum": [
336
- "CELSIUS"
337
- ]
338
- },
339
- {
340
- "title": "Fahrenheit",
341
- "enum": [
342
- "FAHRENHEIT"
343
- ]
344
- }
316
+ "hide_temperature": {
317
+ "title": "Hide Temperature Sensor",
318
+ "type": "boolean",
319
+ "condition": {
320
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);"
321
+ }
322
+ },
323
+ "convertUnitTo": {
324
+ "title": "Convert Temperature Unit To",
325
+ "type": "string",
326
+ "condition": {
327
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_temperature);"
328
+ },
329
+ "oneOf": [
330
+ {
331
+ "title": "Celsius",
332
+ "enum": [
333
+ "CELSIUS"
345
334
  ]
346
335
  },
347
- "hide_humidity": {
348
- "title": "Hide Hub 2's Humidity Sensor",
349
- "type": "boolean",
350
- "condition": {
351
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2') && model.options.devices[arrayIndices].deviceId);"
352
- }
353
- },
354
- "hide_lightsensor": {
355
- "title": "Hide Hub 2's Light Sensor",
356
- "type": "boolean",
357
- "condition": {
358
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2') && model.options.devices[arrayIndices].deviceId);"
359
- }
336
+ {
337
+ "title": "Fahrenheit",
338
+ "enum": [
339
+ "FAHRENHEIT"
340
+ ]
360
341
  }
342
+ ]
343
+ },
344
+ "hide_humidity": {
345
+ "title": "Hide Humidity Sensor",
346
+ "type": "boolean",
347
+ "condition": {
348
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);"
349
+ }
350
+ },
351
+ "hide_lightsensor": {
352
+ "title": "Hide Light Sensor",
353
+ "type": "boolean",
354
+ "condition": {
355
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
361
356
  }
362
357
  },
363
- "bot": {
364
- "type": "object",
365
- "properties": {
366
- "mode": {
367
- "title": "Mode",
368
- "type": "string",
369
- "required": true,
370
- "default": "",
371
- "oneOf": [
372
- {
373
- "title": "Default",
374
- "enum": [
375
- ""
376
- ]
377
- },
378
- {
379
- "title": "Multi-Press",
380
- "enum": [
381
- "multipress"
382
- ]
383
- },
384
- {
385
- "title": "Press",
386
- "enum": [
387
- "press"
388
- ]
389
- },
390
- {
391
- "title": "Switch",
392
- "enum": [
393
- "switch"
394
- ]
358
+ "mode": {
359
+ "title": "Mapping Mode",
360
+ "type": "string",
361
+ "required": true,
362
+ "default": "",
363
+ "oneOf": [
364
+ {
365
+ "if": {
366
+ "properties": {
367
+ "configDeviceType": {
368
+ "const": "Bot"
369
+ }
395
370
  }
396
- ],
397
- "description": "Press Mode presses one time per 'On' state in the Home App/API. Switch Mode allows you to set how many presses occur when the device is set to 'On'. Multi-Press allows you to queue up multiple button presses. It creates a queue by counting each time the device is set to 'On'. It is most useful for scripting with cURL requests or other API calls. Multi-Press only works when using OpenAPI.",
398
- "condition": {
399
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId);"
371
+ },
372
+ "then": {
373
+ "oneOf": [
374
+ {
375
+ "title": "Default",
376
+ "enum": [""]
377
+ },
378
+ {
379
+ "title": "Multi-Press",
380
+ "enum": ["multipress"]
381
+ },
382
+ {
383
+ "title": "Press",
384
+ "enum": ["press"]
385
+ },
386
+ {
387
+ "title": "Switch",
388
+ "enum": ["switch"]
389
+ }
390
+ ]
400
391
  }
401
392
  },
402
- "deviceType": {
403
- "title": "What Type of Device do you want to display in the Home App?",
404
- "type": "string",
405
- "required": true,
406
- "default": "",
407
- "oneOf": [
408
- {
409
- "title": "Default",
410
- "enum": [
411
- ""
412
- ]
413
- },
414
- {
415
- "title": "Door",
416
- "enum": [
417
- "door"
418
- ]
419
- },
420
- {
421
- "title": "Fan",
422
- "enum": [
423
- "fan"
424
- ]
425
- },
426
- {
427
- "title": "Faucet",
428
- "enum": [
429
- "faucet"
430
- ]
431
- },
432
- {
433
- "title": "Garage Door",
434
- "enum": [
435
- "garagedoor"
436
- ]
437
- },
438
- {
439
- "title": "Lock",
440
- "enum": [
441
- "lock"
442
- ]
443
- },
444
- {
445
- "title": "Outlet",
446
- "enum": [
447
- "outlet"
448
- ]
449
- },
450
- {
451
- "title": "Stateful Programmable Switch (Only Works in 3rd Party Home Apps)",
452
- "enum": [
453
- "stateful"
454
- ]
455
- },
456
- {
457
- "title": "Switch",
458
- "enum": [
459
- "switch"
460
- ]
461
- },
462
- {
463
- "title": "Window",
464
- "enum": [
465
- "window"
466
- ]
467
- },
468
- {
469
- "title": "Window Covering",
470
- "enum": [
471
- "windowcovering"
472
- ]
393
+ {
394
+ "if": {
395
+ "properties": {
396
+ "configDeviceType": {
397
+ "const": "Blind Tilt"
398
+ }
473
399
  }
474
- ],
475
- "placeholder": "outlet",
476
- "condition": {
477
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId);"
400
+ },
401
+ "then": {
402
+ "oneOf": [
403
+ {
404
+ "title": "Default",
405
+ "enum": [""]
406
+ },
407
+ {
408
+ "title": "Down and Up",
409
+ "enum": ["down_and_up"]
410
+ },
411
+ {
412
+ "title": "Only Down",
413
+ "enum": ["only_down"]
414
+ },
415
+ {
416
+ "title": "Only Up",
417
+ "enum": ["only_up"]
418
+ },
419
+ {
420
+ "title": "Up and Down",
421
+ "enum": ["up_and_down"]
422
+ },
423
+ {
424
+ "title": "Use Tilt for Direction",
425
+ "enum": ["use_tilt_for_direction"]
426
+ }
427
+ ]
478
428
  }
429
+ }
430
+ ]
431
+ },
432
+ "type": {
433
+ "title": "What Type of Device do you want to display in the Home App?",
434
+ "type": "string",
435
+ "required": true,
436
+ "default": "",
437
+ "oneOf": [
438
+ {
439
+ "title": "Default",
440
+ "enum": [
441
+ ""
442
+ ]
479
443
  },
480
- "allowPush": {
481
- "title": "Allow Changes to Be Pushed",
482
- "description": "If set to true, this will allow commands to be sent even if device state is already in state that is being pushed.",
483
- "type": "boolean",
484
- "condition": {
485
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].bot.mode);"
486
- }
444
+ {
445
+ "title": "Door",
446
+ "enum": [
447
+ "door"
448
+ ]
487
449
  },
488
- "doublePress": {
489
- "title": "How many presses do you want to simulate?",
490
- "type": "number",
491
- "placeholder": "2",
492
- "condition": {
493
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].bot.mode);"
494
- }
450
+ {
451
+ "title": "Fan",
452
+ "enum": [
453
+ "fan"
454
+ ]
495
455
  },
496
- "pushRatePress": {
497
- "title": "Double Press Push Rate",
498
- "type": "number",
499
- "placeholder": "15",
500
- "description": "Indicates the number of seconds between pushes for double presses to SwitchBot API",
501
- "condition": {
502
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].bot.mode && model.options.devices[arrayIndices].bot.doublePress > 1);"
503
- }
504
- }
505
- }
506
- },
507
- "meter": {
508
- "type": "object",
509
- "properties": {
510
- "hide_temperature": {
511
- "title": "Hide Meter's Temperature Sensor",
512
- "type": "boolean",
513
- "condition": {
514
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);"
515
- }
456
+ {
457
+ "title": "Faucet",
458
+ "enum": [
459
+ "faucet"
460
+ ]
516
461
  },
517
- "convertUnitTo": {
518
- "title": "Convert Meter's Temperature Unit To",
519
- "type": "string",
520
- "condition": {
521
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].meter.hide_temperature);"
522
- },
523
- "oneOf": [
524
- {
525
- "title": "Celsius",
526
- "enum": [
527
- "CELSIUS"
528
- ]
529
- },
530
- {
531
- "title": "Fahrenheit",
532
- "enum": [
533
- "FAHRENHEIT"
534
- ]
535
- }
462
+ {
463
+ "title": "Garage Door",
464
+ "enum": [
465
+ "garagedoor"
536
466
  ]
537
467
  },
538
- "hide_humidity": {
539
- "title": "Hide Meter's Humidity Sensor",
540
- "type": "boolean",
541
- "condition": {
542
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);"
543
- }
544
- }
545
- }
546
- },
547
- "iosensor": {
548
- "type": "object",
549
- "properties": {
550
- "hide_temperature": {
551
- "title": "Hide Indoor/Outdoor's Temperature Sensor",
552
- "type": "boolean",
553
- "condition": {
554
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' && model.options.devices[arrayIndices].deviceId);"
555
- }
468
+ {
469
+ "title": "Lock",
470
+ "enum": [
471
+ "lock"
472
+ ]
556
473
  },
557
- "convertUnitTo": {
558
- "title": "Convert Indoor/Outdoor Sensor's Temperature Unit To",
559
- "type": "string",
560
- "condition": {
561
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].iosensor.hide_temperature);"
562
- },
563
- "oneOf": [
564
- {
565
- "title": "Celsius",
566
- "enum": [
567
- "CELSIUS"
568
- ]
569
- },
570
- {
571
- "title": "Fahrenheit",
572
- "enum": [
573
- "FAHRENHEIT"
574
- ]
575
- }
474
+ {
475
+ "title": "Outlet",
476
+ "enum": [
477
+ "outlet"
576
478
  ]
577
479
  },
578
- "hide_humidity": {
579
- "title": "Hide Indoor/Outdoor's Humidity Sensor",
580
- "type": "boolean",
581
- "condition": {
582
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' && model.options.devices[arrayIndices].deviceId);"
583
- }
480
+ {
481
+ "title": "Stateful Programmable Switch (Only Works in 3rd Party Home Apps)",
482
+ "enum": [
483
+ "stateful"
484
+ ]
485
+ },
486
+ {
487
+ "title": "Switch",
488
+ "enum": [
489
+ "switch"
490
+ ]
491
+ },
492
+ {
493
+ "title": "Window",
494
+ "enum": [
495
+ "window"
496
+ ]
497
+ },
498
+ {
499
+ "title": "Window Covering",
500
+ "enum": [
501
+ "windowcovering"
502
+ ]
584
503
  }
504
+ ],
505
+ "placeholder": "outlet",
506
+ "condition": {
507
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId);"
585
508
  }
586
509
  },
587
- "waterdetector": {
588
- "type": "object",
589
- "properties": {
590
- "hide_leak": {
591
- "title": "Hide Water Detector's Leak Sensor",
592
- "type": "boolean",
593
- "condition": {
594
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Water Detector' && model.options.devices[arrayIndices].deviceId);"
595
- }
596
- },
597
- "dry": {
598
- "title": "Water Detector's Dry Alert",
599
- "type": "boolean",
600
- "description": "If true, the Water Detector will send an alert when it is dry.",
601
- "condition": {
602
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Water Detector' && model.options.devices[arrayIndices].deviceId);"
603
- }
604
- }
510
+ "allowPush": {
511
+ "title": "Allow Changes to Be Pushed",
512
+ "description": "If set to true, this will allow commands to be sent even if device state is already in state that is being pushed.",
513
+ "type": "boolean",
514
+ "condition": {
515
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].mode);"
605
516
  }
606
517
  },
607
- "humidifier": {
608
- "type": "object",
609
- "properties": {
610
- "hide_temperature": {
611
- "title": "Hide Humidifier's Temperature Sensor",
612
- "type": "boolean",
613
- "condition": {
614
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Humidifier' && model.options.devices[arrayIndices].deviceId);"
615
- }
616
- },
617
- "set_minStep": {
618
- "title": "Set Min Step",
619
- "type": "number",
620
- "placeholder": "1",
621
- "condition": {
622
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Humidifier' && model.options.devices[arrayIndices].deviceId);"
623
- }
624
- }
518
+ "doublePress": {
519
+ "title": "How many presses do you want to simulate?",
520
+ "type": "number",
521
+ "placeholder": "2",
522
+ "condition": {
523
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].mode);"
625
524
  }
626
525
  },
627
- "curtain": {
628
- "type": "object",
629
- "properties": {
630
- "set_minStep": {
631
- "title": "Set Minimum Step",
632
- "type": "number",
633
- "placeholder": "1",
634
- "description": "Sets the minimum steps that curtain allows. So if set to 20, it would allow you to set the curtain state to 0, 20, 40, 60, 80, and 100",
635
- "condition": {
636
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
637
- }
638
- },
639
- "set_min": {
640
- "title": "Set Minimum Open State",
641
- "type": "number",
642
- "placeholder": "0",
643
- "description": "Sets the minimum percentage before needed to set Curtain to Open",
644
- "condition": {
645
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
646
- }
647
- },
648
- "set_max": {
649
- "title": "Set Maximum Close State",
650
- "type": "number",
651
- "placeholder": "100",
652
- "description": "Sets the maximum percentage before needing to set Curtain to Closed",
653
- "condition": {
654
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
655
- }
656
- },
657
- "updateRate": {
658
- "title": "Curtain Update Rate",
659
- "type": "number",
660
- "minimum": 1,
661
- "placeholder": 5,
662
- "description": "Indicates the number of seconds before refreshing Curtain status while updating slide progress.",
663
- "condition": {
664
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
665
- }
666
- },
667
- "disable_group": {
668
- "title": "Disable Grouping",
669
- "type": "boolean",
670
- "condition": {
671
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
672
- }
673
- },
674
- "setOpenMode": {
675
- "title": "Curtain's Opening Mode",
676
- "type": "string",
677
- "oneOf": [
678
- {
679
- "enum": [
680
- "0"
681
- ],
682
- "title": "Performance Mode"
683
- },
684
- {
685
- "enum": [
686
- "1"
687
- ],
688
- "title": "Silent Mode"
689
- }
526
+ "pushRatePress": {
527
+ "title": "Double Press Push Rate",
528
+ "type": "number",
529
+ "placeholder": "15",
530
+ "description": "Indicates the number of seconds between pushes for double presses to SwitchBot API",
531
+ "condition": {
532
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].mode && model.options.devices[arrayIndices].doublePress > 1);"
533
+ }
534
+ },
535
+ "hide_leak": {
536
+ "title": "Hide Water Detector's Leak Sensor",
537
+ "type": "boolean",
538
+ "condition": {
539
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Water Detector' && model.options.devices[arrayIndices].deviceId);"
540
+ }
541
+ },
542
+ "dry": {
543
+ "title": "Water Detector's Dry Alert",
544
+ "type": "boolean",
545
+ "description": "If true, the Water Detector will send an alert when it is dry.",
546
+ "condition": {
547
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Water Detector' && model.options.devices[arrayIndices].deviceId);"
548
+ }
549
+ },
550
+ "set_minStep": {
551
+ "title": "Set Minimum Step",
552
+ "type": "number",
553
+ "placeholder": "1",
554
+ "description": "Sets the minimum steps device will take. So if set to 20, it would allow you to set the curtain state to 0, 20, 40, 60, 80, and 100",
555
+ "condition": {
556
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier') && model.options.devices[arrayIndices].deviceId);"
557
+ }
558
+ },
559
+ "set_min": {
560
+ "title": "Set Minimum Open State",
561
+ "type": "number",
562
+ "placeholder": "0",
563
+ "description": "Sets the minimum percentage before needed to set to Open",
564
+ "condition": {
565
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
566
+ }
567
+ },
568
+ "set_max": {
569
+ "title": "Set Maximum Close State",
570
+ "type": "number",
571
+ "placeholder": "100",
572
+ "description": "Sets the maximum percentage before needing to set to Closed",
573
+ "condition": {
574
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
575
+ }
576
+ },
577
+ "disable_group": {
578
+ "title": "Disable Grouping",
579
+ "type": "boolean",
580
+ "condition": {
581
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);"
582
+ }
583
+ },
584
+ "setOpenMode": {
585
+ "title": "Opening Mode",
586
+ "type": "string",
587
+ "oneOf": [
588
+ {
589
+ "enum": [
590
+ "0"
690
591
  ],
691
- "condition": {
692
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
693
- }
592
+ "title": "Performance Mode"
694
593
  },
695
- "setCloseMode": {
696
- "title": "Curtain's Closing Mode",
697
- "type": "string",
698
- "oneOf": [
699
- {
700
- "enum": [
701
- "0"
702
- ],
703
- "title": "Performance Mode"
704
- },
705
- {
706
- "enum": [
707
- "1"
708
- ],
709
- "title": "Silent Mode"
710
- }
594
+ {
595
+ "enum": [
596
+ "1"
711
597
  ],
712
- "condition": {
713
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
714
- }
715
- },
716
- "silentModeSwitch": {
717
- "title": "Enable Curtain Silent Mode Switches",
718
- "type": "boolean",
719
- "condition": {
720
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
721
- }
722
- },
723
- "hide_lightsensor": {
724
- "title": "Hide Light Sensor",
725
- "type": "boolean",
726
- "condition": {
727
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
728
- }
729
- },
730
- "set_minlux": {
731
- "title": "Set Min Lux",
732
- "type": "number",
733
- "placeholder": "1",
734
- "condition": {
735
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].curtain.hide_lightsensor);"
736
- }
737
- },
738
- "set_maxlux": {
739
- "title": "Set Max Lux",
740
- "type": "number",
741
- "placeholder": "6001",
742
- "condition": {
743
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].curtain.hide_lightsensor);"
744
- }
598
+ "title": "Silent Mode"
745
599
  }
600
+ ],
601
+ "condition": {
602
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);"
746
603
  }
747
604
  },
748
- "blindTilt": {
749
- "type": "object",
750
- "properties": {
751
- "mode": {
752
- "title": "Mapping Mode",
753
- "type": "string",
754
- "oneOf": [
755
- {
756
- "enum": [
757
- "down_and_up"
758
- ],
759
- "title": "Down-to-Up"
760
- },
761
- {
762
- "enum": [
763
- "only_down"
764
- ],
765
- "title": "Middle to Down"
766
- },
767
- {
768
- "enum": [
769
- "only_up"
770
- ],
771
- "title": "Middle to Up"
772
- },
773
- {
774
- "enum": [
775
- "up_and_down"
776
- ],
777
- "title": "Up-to-Down"
778
- },
779
- {
780
- "enum": [
781
- "use_tilt_for_direction"
782
- ],
783
- "title": "Tilt Direction"
784
- }
785
- ],
786
- "description": "Defines how the Home app sliders control the blind tilt.",
787
- "condition": {
788
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
789
- }
790
- },
791
- "set_minStep": {
792
- "title": "Set Minimum Step",
793
- "type": "number",
794
- "placeholder": "1",
795
- "description": "Sets the minimum steps that blind tilt allows. So if set to 20, it would allow you to set the blind tilt state to 0, 20, 40, 60, 80, and 100",
796
- "condition": {
797
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
798
- }
799
- },
800
- "set_min": {
801
- "title": "Set Minimum Open State",
802
- "type": "number",
803
- "placeholder": "0",
804
- "description": "Sets the minimum percentage before needed to set Blind Tilt to Open",
805
- "condition": {
806
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
807
- }
808
- },
809
- "set_max": {
810
- "title": "Set Maximum Close State",
811
- "type": "number",
812
- "placeholder": "100",
813
- "description": "Sets the maximum percentage before needing to set Blind Tilt to Closed",
814
- "condition": {
815
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
816
- }
817
- },
818
- "hide_lightsensor": {
819
- "title": "Hide Light Sensor",
820
- "type": "boolean",
821
- "condition": {
822
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
823
- }
824
- },
825
- "updateRate": {
826
- "title": "Blind Tilt Update Rate",
827
- "type": "number",
828
- "minimum": 1,
829
- "placeholder": 5,
830
- "description": "Indicates the number of seconds before refreshing Blind Tilt status while updating slide progress.",
831
- "condition": {
832
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
833
- }
834
- },
835
- "setOpenMode": {
836
- "title": "Blind Tilt's Opening Mode",
837
- "type": "string",
838
- "oneOf": [
839
- {
840
- "enum": [
841
- "0"
842
- ],
843
- "title": "Performance Mode"
844
- },
845
- {
846
- "enum": [
847
- "1"
848
- ],
849
- "title": "Silent Mode"
850
- }
605
+ "setCloseMode": {
606
+ "title": "Closing Mode",
607
+ "type": "string",
608
+ "oneOf": [
609
+ {
610
+ "enum": [
611
+ "0"
851
612
  ],
852
- "condition": {
853
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
854
- }
613
+ "title": "Performance Mode"
855
614
  },
856
- "setCloseMode": {
857
- "title": "Blind Tilt's Closing Mode",
858
- "type": "string",
859
- "oneOf": [
860
- {
861
- "enum": [
862
- "0"
863
- ],
864
- "title": "Performance Mode"
865
- },
866
- {
867
- "enum": [
868
- "1"
869
- ],
870
- "title": "Silent Mode"
871
- }
615
+ {
616
+ "enum": [
617
+ "1"
872
618
  ],
873
- "condition": {
874
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
875
- }
876
- },
877
- "silentModeSwitch": {
878
- "title": "Enable Blind Tilt Silent Mode Switches",
879
- "type": "boolean",
880
- "condition": {
881
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);"
882
- }
619
+ "title": "Silent Mode"
883
620
  }
621
+ ],
622
+ "condition": {
623
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);"
884
624
  }
885
625
  },
886
- "contact": {
887
- "type": "object",
888
- "properties": {
889
- "hide_lightsensor": {
890
- "title": "Hide Contact Sensor's Light Sensor",
891
- "type": "boolean",
892
- "condition": {
893
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId);"
894
- }
895
- },
896
- "set_minlux": {
897
- "title": "Set Min Lux",
898
- "type": "number",
899
- "placeholder": "1",
900
- "condition": {
901
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].contact.hide_lightsensor);"
902
- }
903
- },
904
- "set_maxlux": {
905
- "title": "Set Max Lux",
906
- "type": "number",
907
- "placeholder": "6001",
908
- "condition": {
909
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].contact.hide_lightsensor);"
910
- }
911
- },
912
- "hide_motionsensor": {
913
- "title": "Hide Contact Sensor's Motion Sensor",
914
- "type": "boolean",
915
- "condition": {
916
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId);"
917
- }
918
- }
626
+ "silentModeSwitch": {
627
+ "title": "Enable Silent Mode Switches",
628
+ "type": "boolean",
629
+ "condition": {
630
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);"
919
631
  }
920
632
  },
921
- "motion": {
922
- "type": "object",
923
- "properties": {
924
- "hide_lightsensor": {
925
- "title": "Hide Motion Sensor's Light Sensor",
926
- "type": "boolean",
927
- "condition": {
928
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' && model.options.devices[arrayIndices].deviceId);"
929
- }
930
- },
931
- "set_minlux": {
932
- "title": "Set Min Lux",
933
- "type": "number",
934
- "placeholder": "1",
935
- "condition": {
936
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].motion.hide_lightsensor);"
937
- }
938
- },
939
- "set_maxlux": {
940
- "title": "Set Max Lux",
941
- "type": "number",
942
- "placeholder": "6001",
943
- "condition": {
944
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].motion.hide_lightsensor);"
945
- }
946
- }
633
+ "set_minlux": {
634
+ "title": "Set Min Lux",
635
+ "type": "number",
636
+ "placeholder": "1",
637
+ "condition": {
638
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_lightsensor);"
947
639
  }
948
640
  },
949
- "colorbulb": {
950
- "type": "object",
951
- "properties": {
952
- "set_minStep": {
953
- "title": "Set Min Step",
954
- "type": "number",
955
- "placeholder": "1",
956
- "condition": {
957
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' && model.options.devices[arrayIndices].deviceId);"
958
- }
959
- },
960
- "adaptiveLightingShift": {
961
- "title": "Adaptive Lighting Shift",
962
- "type": "number",
963
- "placeholder": "-1",
964
- "description": "The mired for each Adaptive Lighting update will be increased by this value, making the light appear warmer. Set to -1 to remove Adaptive Lighting feature. Must be -1 or more.",
965
- "condition": {
966
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' && model.options.devices[arrayIndices].deviceId);"
967
- }
968
- }
641
+ "set_maxlux": {
642
+ "title": "Set Max Lux",
643
+ "type": "number",
644
+ "placeholder": "6001",
645
+ "condition": {
646
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_lightsensor);"
969
647
  }
970
648
  },
971
- "striplight": {
972
- "type": "object",
973
- "properties": {
974
- "set_minStep": {
975
- "title": "Set Min Step",
976
- "type": "number",
977
- "placeholder": "1",
978
- "condition": {
979
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Strip Light' && model.options.devices[arrayIndices].deviceId);"
980
- }
981
- },
982
- "adaptiveLightingShift": {
983
- "title": "Adaptive Lighting Shift",
984
- "type": "number",
985
- "placeholder": "-1",
986
- "description": "The mired for each Adaptive Lighting update will be increased by this value, making the light appear warmer. Set to -1 to remove Adaptive Lighting feature. Must be -1 or more.",
987
- "condition": {
988
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Strip Light' && model.options.devices[arrayIndices].deviceId);"
989
- }
990
- }
649
+ "hide_motionsensor": {
650
+ "title": "Hide Contact Sensor's Motion Sensor",
651
+ "type": "boolean",
652
+ "condition": {
653
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId);"
991
654
  }
992
655
  },
993
- "lock": {
994
- "type": "object",
995
- "properties": {
996
- "hide_contactsensor": {
997
- "title": "Hide Lock's Contact Sensor",
998
- "type": "boolean",
999
- "condition": {
1000
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);"
1001
- }
1002
- },
1003
- "activate_latchbutton": {
1004
- "title": "Activate Latch Button",
1005
- "type": "boolean",
1006
- "condition": {
1007
- "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);"
1008
- }
1009
- }
656
+ "adaptiveLightingShift": {
657
+ "title": "Adaptive Lighting Shift",
658
+ "type": "number",
659
+ "placeholder": "-1",
660
+ "description": "The mired for each Adaptive Lighting update will be increased by this value, making the light appear warmer. Set to -1 to remove Adaptive Lighting feature. Must be -1 or more.",
661
+ "condition": {
662
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Strip Light') && model.options.devices[arrayIndices].deviceId);"
663
+ }
664
+ },
665
+ "hide_contactsensor": {
666
+ "title": "Hide Lock's Contact Sensor",
667
+ "type": "boolean",
668
+ "condition": {
669
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);"
670
+ }
671
+ },
672
+ "activate_latchbutton": {
673
+ "title": "Activate Latch Button",
674
+ "type": "boolean",
675
+ "condition": {
676
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);"
1010
677
  }
1011
678
  },
1012
679
  "disableCaching": {
@@ -1085,20 +752,22 @@
1085
752
  "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);"
1086
753
  }
1087
754
  },
1088
- "updateRate": {
1089
- "title": "Device Update Rate",
755
+ "pushRate": {
756
+ "title": "Device Push Rate",
1090
757
  "type": "number",
1091
758
  "placeholder": 360,
1092
759
  "condition": {
1093
760
  "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);"
1094
761
  }
1095
762
  },
1096
- "pushRate": {
1097
- "title": "Device Push Rate",
763
+ "updateRate": {
764
+ "title": "Update Rate",
1098
765
  "type": "number",
1099
- "placeholder": 360,
766
+ "minimum": 1,
767
+ "placeholder": 5,
768
+ "description": "Indicates the number of seconds before refreshing status while updating progress.",
1100
769
  "condition": {
1101
- "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);"
770
+ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);"
1102
771
  }
1103
772
  },
1104
773
  "offline": {
@@ -1437,236 +1106,216 @@
1437
1106
  "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType);"
1438
1107
  }
1439
1108
  },
1440
- "irair": {
1441
- "type": "object",
1442
- "properties": {
1443
- "hide_automode": {
1444
- "title": "Hide Auto Mode on IR Air Conditioners",
1445
- "type": "boolean",
1446
- "condition": {
1447
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1448
- }
1449
- },
1450
- "set_max_heat": {
1451
- "title": "IR Air Conditioner Maximum Heat Range",
1452
- "type": "number",
1453
- "placeholder": "25",
1454
- "description": "Set the maximum heat range for the IR Air Conditioner.",
1455
- "condition": {
1456
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1457
- }
1109
+ "hide_automode": {
1110
+ "title": "Hide Auto Mode on IR Air Conditioners",
1111
+ "type": "boolean",
1112
+ "condition": {
1113
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1114
+ }
1115
+ },
1116
+ "set_max_heat": {
1117
+ "title": "IR Air Conditioner Maximum Heat Range",
1118
+ "type": "number",
1119
+ "placeholder": "25",
1120
+ "description": "Set the maximum heat range for the IR Air Conditioner.",
1121
+ "condition": {
1122
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1123
+ }
1124
+ },
1125
+ "set_min_heat": {
1126
+ "title": "IR Air Conditioner Minimum Heat Range",
1127
+ "type": "number",
1128
+ "placeholder": "0",
1129
+ "description": "Set the minimum heat range for the IR Air Conditioner.",
1130
+ "condition": {
1131
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1132
+ }
1133
+ },
1134
+ "set_max_cool": {
1135
+ "title": "IR Air Conditioner Maximum Cool Range",
1136
+ "type": "number",
1137
+ "placeholder": "35",
1138
+ "description": "Set the maximum cool range for the IR Air Conditioner.",
1139
+ "multipleOf": 1,
1140
+ "condition": {
1141
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1142
+ }
1143
+ },
1144
+ "set_min_cool": {
1145
+ "title": "IR Air Conditioner Minimum Cool Range",
1146
+ "type": "number",
1147
+ "placeholder": "10",
1148
+ "description": "Set the minimum cool range for the IR Air Conditioner.",
1149
+ "condition": {
1150
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1151
+ }
1152
+ },
1153
+ "meterType": {
1154
+ "title": "Use an existing Switchbot device for temperature/humidity",
1155
+ "type": "string",
1156
+ "oneOf": [
1157
+ {
1158
+ "title": "Hub 2",
1159
+ "enum": [
1160
+ "Hub 2"
1161
+ ]
1458
1162
  },
1459
- "set_min_heat": {
1460
- "title": "IR Air Conditioner Minimum Heat Range",
1461
- "type": "number",
1462
- "placeholder": "0",
1463
- "description": "Set the minimum heat range for the IR Air Conditioner.",
1464
- "condition": {
1465
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1466
- }
1163
+ {
1164
+ "title": "Meter",
1165
+ "enum": [
1166
+ "Meter"
1167
+ ]
1467
1168
  },
1468
- "set_max_cool": {
1469
- "title": "IR Air Conditioner Maximum Cool Range",
1470
- "type": "number",
1471
- "placeholder": "35",
1472
- "description": "Set the maximum cool range for the IR Air Conditioner.",
1473
- "multipleOf": 1,
1474
- "condition": {
1475
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1476
- }
1169
+ {
1170
+ "title": "Meter Plus",
1171
+ "enum": [
1172
+ "MeterPlus"
1173
+ ]
1477
1174
  },
1478
- "set_min_cool": {
1479
- "title": "IR Air Conditioner Minimum Cool Range",
1480
- "type": "number",
1481
- "placeholder": "10",
1482
- "description": "Set the minimum cool range for the IR Air Conditioner.",
1483
- "condition": {
1484
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1485
- }
1175
+ {
1176
+ "title": "Meter Plus (JP)",
1177
+ "enum": [
1178
+ "Meter Plus (JP)"
1179
+ ]
1486
1180
  },
1487
- "meterType": {
1488
- "title": "Use an existing Switchbot device for temperature/humidity",
1489
- "type": "string",
1490
- "oneOf": [
1491
- {
1492
- "title": "Hub 2",
1493
- "enum": [
1494
- "Hub 2"
1495
- ]
1496
- },
1497
- {
1498
- "title": "Meter",
1499
- "enum": [
1500
- "Meter"
1501
- ]
1502
- },
1503
- {
1504
- "title": "Meter Plus",
1505
- "enum": [
1506
- "MeterPlus"
1507
- ]
1508
- },
1509
- {
1510
- "title": "Meter Plus (JP)",
1511
- "enum": [
1512
- "Meter Plus (JP)"
1513
- ]
1514
- },
1515
- {
1516
- "title": "WoIOSensor",
1517
- "enum": [
1518
- "WoIOSensor"
1519
- ]
1520
- },
1521
- {
1522
- "title": "Humidifier",
1523
- "enum": [
1524
- "Humidifier"
1525
- ]
1526
- }
1527
- ],
1528
- "condition": {
1529
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1530
- }
1181
+ {
1182
+ "title": "WoIOSensor",
1183
+ "enum": [
1184
+ "WoIOSensor"
1185
+ ]
1531
1186
  },
1532
- "meterId": {
1533
- "title": "Device ID of the device to use for temperature/humidity",
1534
- "type": "string",
1535
- "condition": {
1536
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irair?.meterType);"
1537
- }
1187
+ {
1188
+ "title": "Humidifier",
1189
+ "enum": [
1190
+ "Humidifier"
1191
+ ]
1538
1192
  }
1193
+ ],
1194
+ "condition": {
1195
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId);"
1539
1196
  }
1540
1197
  },
1541
- "irfan": {
1542
- "type": "object",
1543
- "properties": {
1544
- "swing_mode": {
1545
- "title": "Enable Swing Mode",
1546
- "type": "boolean",
1547
- "condition": {
1548
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId);"
1549
- }
1550
- },
1551
- "rotation_speed": {
1552
- "title": "Enable Rotation Speed",
1553
- "type": "boolean",
1554
- "condition": {
1555
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId);"
1556
- }
1557
- },
1558
- "set_minStep": {
1559
- "title": "Set Min Step",
1560
- "type": "number",
1561
- "placeholder": "1",
1562
- "condition": {
1563
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irfan && !model.options.irdevices[arrayIndices].irfan.rotation_speed);"
1564
- }
1565
- },
1566
- "set_min": {
1567
- "title": "Set Min",
1568
- "type": "number",
1569
- "placeholder": "0",
1570
- "condition": {
1571
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irfan && !model.options.irdevices[arrayIndices].irfan.rotation_speed);"
1572
- }
1573
- },
1574
- "set_max": {
1575
- "title": "Set Max",
1576
- "type": "number",
1577
- "placeholder": "100",
1578
- "condition": {
1579
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irfan && !model.options.irdevices[arrayIndices].irfan.rotation_speed);"
1580
- }
1581
- }
1198
+ "meterId": {
1199
+ "title": "Device ID of the device to use for temperature/humidity",
1200
+ "type": "string",
1201
+ "condition": {
1202
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irair?.meterType);"
1582
1203
  }
1583
1204
  },
1584
- "irlight": {
1585
- "type": "object",
1586
- "properties": {
1587
- "stateless": {
1588
- "title": "Enable Stateless Buttons",
1589
- "type": "boolean",
1590
- "condition": {
1591
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Light' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Light') && model.options.irdevices[arrayIndices].deviceId);"
1592
- }
1593
- }
1205
+ "swing_mode": {
1206
+ "title": "Enable Swing Mode",
1207
+ "type": "boolean",
1208
+ "condition": {
1209
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId);"
1594
1210
  }
1595
1211
  },
1596
- "other": {
1597
- "type": "object",
1598
- "properties": {
1599
- "deviceType": {
1600
- "title": "What Type of Device do you want to display in the Home App?",
1601
- "type": "string",
1602
- "required": true,
1603
- "default": "",
1604
- "oneOf": [
1605
- {
1606
- "title": "Door",
1607
- "enum": [
1608
- "door"
1609
- ]
1610
- },
1611
- {
1612
- "title": "Fan",
1613
- "enum": [
1614
- "fan"
1615
- ]
1616
- },
1617
- {
1618
- "title": "Faucet",
1619
- "enum": [
1620
- "faucet"
1621
- ]
1622
- },
1623
- {
1624
- "title": "Garage Door",
1625
- "enum": [
1626
- "garagedoor"
1627
- ]
1628
- },
1629
- {
1630
- "title": "Lock",
1631
- "enum": [
1632
- "lock"
1633
- ]
1634
- },
1635
- {
1636
- "title": "Outlet",
1637
- "enum": [
1638
- "outlet"
1639
- ]
1640
- },
1641
- {
1642
- "title": "Stateful Programmable Switch (Only Works in 3rd Party Home Apps)",
1643
- "enum": [
1644
- "stateful"
1645
- ]
1646
- },
1647
- {
1648
- "title": "Switch",
1649
- "enum": [
1650
- "switch"
1651
- ]
1652
- },
1653
- {
1654
- "title": "Window",
1655
- "enum": [
1656
- "window"
1657
- ]
1658
- },
1659
- {
1660
- "title": "Window Covering",
1661
- "enum": [
1662
- "windowcovering"
1663
- ]
1664
- }
1665
- ],
1666
- "condition": {
1667
- "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType === 'Others' && model.options.irdevices[arrayIndices].deviceId);"
1668
- }
1212
+ "rotation_speed": {
1213
+ "title": "Enable Rotation Speed",
1214
+ "type": "boolean",
1215
+ "condition": {
1216
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId);"
1217
+ }
1218
+ },
1219
+ "set_minStep": {
1220
+ "title": "Set Min Step",
1221
+ "type": "number",
1222
+ "placeholder": "1",
1223
+ "condition": {
1224
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irfan && !model.options.irdevices[arrayIndices].irfan.rotation_speed);"
1225
+ }
1226
+ },
1227
+ "set_min": {
1228
+ "title": "Set Min",
1229
+ "type": "number",
1230
+ "placeholder": "0",
1231
+ "condition": {
1232
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irfan && !model.options.irdevices[arrayIndices].irfan.rotation_speed);"
1233
+ }
1234
+ },
1235
+ "set_max": {
1236
+ "title": "Set Max",
1237
+ "type": "number",
1238
+ "placeholder": "100",
1239
+ "condition": {
1240
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irfan && !model.options.irdevices[arrayIndices].irfan.rotation_speed);"
1241
+ }
1242
+ },
1243
+ "stateless": {
1244
+ "title": "Enable Stateless Buttons",
1245
+ "type": "boolean",
1246
+ "condition": {
1247
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Light' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Light') && model.options.irdevices[arrayIndices].deviceId);"
1248
+ }
1249
+ },
1250
+ "type": {
1251
+ "title": "What Type of Device do you want to display in the Home App?",
1252
+ "type": "string",
1253
+ "required": true,
1254
+ "default": "",
1255
+ "oneOf": [
1256
+ {
1257
+ "title": "Door",
1258
+ "enum": [
1259
+ "door"
1260
+ ]
1261
+ },
1262
+ {
1263
+ "title": "Fan",
1264
+ "enum": [
1265
+ "fan"
1266
+ ]
1267
+ },
1268
+ {
1269
+ "title": "Faucet",
1270
+ "enum": [
1271
+ "faucet"
1272
+ ]
1273
+ },
1274
+ {
1275
+ "title": "Garage Door",
1276
+ "enum": [
1277
+ "garagedoor"
1278
+ ]
1279
+ },
1280
+ {
1281
+ "title": "Lock",
1282
+ "enum": [
1283
+ "lock"
1284
+ ]
1285
+ },
1286
+ {
1287
+ "title": "Outlet",
1288
+ "enum": [
1289
+ "outlet"
1290
+ ]
1291
+ },
1292
+ {
1293
+ "title": "Stateful Programmable Switch (Only Works in 3rd Party Home Apps)",
1294
+ "enum": [
1295
+ "stateful"
1296
+ ]
1297
+ },
1298
+ {
1299
+ "title": "Switch",
1300
+ "enum": [
1301
+ "switch"
1302
+ ]
1303
+ },
1304
+ {
1305
+ "title": "Window",
1306
+ "enum": [
1307
+ "window"
1308
+ ]
1309
+ },
1310
+ {
1311
+ "title": "Window Covering",
1312
+ "enum": [
1313
+ "windowcovering"
1314
+ ]
1669
1315
  }
1316
+ ],
1317
+ "condition": {
1318
+ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType === 'Others' && model.options.irdevices[arrayIndices].deviceId);"
1670
1319
  }
1671
1320
  },
1672
1321
  "firmware": {
@@ -1733,6 +1382,18 @@
1733
1382
  "title": "Enable BLE Scanning",
1734
1383
  "type": "boolean"
1735
1384
  },
1385
+ "discoverBLE": {
1386
+ "title": "Discover BLE Devices",
1387
+ "type": "boolean"
1388
+ },
1389
+ "disableLogsforBLE": {
1390
+ "title": "Disable Logging from BLE",
1391
+ "type": "boolean"
1392
+ },
1393
+ "disableLogsforOpenAPI": {
1394
+ "title": "Disable Logging from OpenAPI",
1395
+ "type": "boolean"
1396
+ },
1736
1397
  "webhookURL": {
1737
1398
  "title": "Webhook URL",
1738
1399
  "type": "string",
@@ -1854,58 +1515,31 @@
1854
1515
  "options.devices[].configDeviceType",
1855
1516
  "options.devices[].connectionType",
1856
1517
  "options.devices[].webhook",
1857
- "options.devices[].bot.deviceType",
1858
- "options.devices[].bot.mode",
1859
- "options.devices[].bot.allowPush",
1860
- "options.devices[].bot.doublePress",
1861
- "options.devices[].bot.pushRatePress",
1862
- "options.devices[].meter.hide_temperature",
1863
- "options.devices[].meter.convertUnitTo",
1864
- "options.devices[].meter.hide_humidity",
1865
- "options.devices[].iosensor.hide_temperature",
1866
- "options.devices[].iosensor.convertUnitTo",
1867
- "options.devices[].iosensor.hide_humidity",
1868
- "options.devices[].hub.hide_temperature",
1869
- "options.devices[].hub.convertUnitTo",
1870
- "options.devices[].hub.hide_humidity",
1871
- "options.devices[].hub.hide_lightsensor",
1872
- "options.devices[].waterdetector.hide_leak",
1873
- "options.devices[].waterdetector.dry",
1874
- "options.devices[].humidifier.set_minStep",
1875
- "options.devices[].humidifier.hide_temperature",
1876
- "options.devices[].curtain.set_minStep",
1877
- "options.devices[].curtain.set_min",
1878
- "options.devices[].curtain.set_max",
1879
- "options.devices[].curtain.setOpenMode",
1880
- "options.devices[].curtain.setCloseMode",
1881
- "options.devices[].curtain.silentModeSwitch",
1882
- "options.devices[].curtain.updateRate",
1883
- "options.devices[].curtain.disable_group",
1884
- "options.devices[].curtain.hide_lightsensor",
1885
- "options.devices[].curtain.set_minlux",
1886
- "options.devices[].curtain.set_maxlux",
1887
- "options.devices[].blindTilt.mode",
1888
- "options.devices[].blindTilt.set_minStep",
1889
- "options.devices[].blindTilt.set_min",
1890
- "options.devices[].blindTilt.set_max",
1891
- "options.devices[].blindTilt.hide_lightsensor",
1892
- "options.devices[].blindTilt.updateRate",
1893
- "options.devices[].blindTilt.setOpenMode",
1894
- "options.devices[].blindTilt.setCloseMode",
1895
- "options.devices[].blindTilt.silentModeSwitch",
1896
- "options.devices[].contact.hide_lightsensor",
1897
- "options.devices[].contact.set_minlux",
1898
- "options.devices[].contact.set_maxlux",
1899
- "options.devices[].contact.hide_motionsensor",
1900
- "options.devices[].motion.hide_lightsensor",
1901
- "options.devices[].motion.set_minlux",
1902
- "options.devices[].motion.set_maxlux",
1903
- "options.devices[].colorbulb.set_minStep",
1904
- "options.devices[].colorbulb.adaptiveLightingShift",
1905
- "options.devices[].striplight.set_minStep",
1906
- "options.devices[].striplight.adaptiveLightingShift",
1907
- "options.devices[].lock.hide_contactsensor",
1908
- "options.devices[].lock.activate_latchbutton",
1518
+ "options.devices[].type",
1519
+ "options.devices[].mode",
1520
+ "options.devices[].allowPush",
1521
+ "options.devices[].doublePress",
1522
+ "options.devices[].pushRatePress",
1523
+ "options.devices[].hide_temperature",
1524
+ "options.devices[].convertUnitTo",
1525
+ "options.devices[].hide_humidity",
1526
+ "options.devices[].hide_lightsensor",
1527
+ "options.devices[].set_minlux",
1528
+ "options.devices[].set_maxlux",
1529
+ "options.devices[].hide_leak",
1530
+ "options.devices[].dry",
1531
+ "options.devices[].mode",
1532
+ "options.devices[].set_minStep",
1533
+ "options.devices[].set_min",
1534
+ "options.devices[].set_max",
1535
+ "options.devices[].setOpenMode",
1536
+ "options.devices[].setCloseMode",
1537
+ "options.devices[].silentModeSwitch",
1538
+ "options.devices[].disable_group",
1539
+ "options.devices[].hide_motionsensor",
1540
+ "options.devices[].adaptiveLightingShift",
1541
+ "options.devices[].hide_contactsensor",
1542
+ "options.devices[].activate_latchbutton",
1909
1543
  "options.devices[].disableCaching",
1910
1544
  "options.devices[].maxRetries",
1911
1545
  "options.devices[].delayBetweenRetries",
@@ -1956,7 +1590,7 @@
1956
1590
  "options.irdevices[].hide_device",
1957
1591
  "options.irdevices[].configRemoteType",
1958
1592
  "options.irdevices[].connectionType",
1959
- "options.irdevices[].other.deviceType",
1593
+ "options.irdevices[].type",
1960
1594
  "options.irdevices[].customize",
1961
1595
  "options.irdevices[].customOn",
1962
1596
  "options.irdevices[].customOff",
@@ -1964,19 +1598,19 @@
1964
1598
  "options.irdevices[].disablePushOn",
1965
1599
  "options.irdevices[].disablePushOff",
1966
1600
  "options.irdevices[].disablePushDetail",
1967
- "options.irdevices[].irair.hide_automode",
1968
- "options.irdevices[].irair.set_max_heat",
1969
- "options.irdevices[].irair.set_min_heat",
1970
- "options.irdevices[].irair.set_max_cool",
1971
- "options.irdevices[].irair.set_min_cool",
1972
- "options.irdevices[].irair.meterType",
1973
- "options.irdevices[].irair.meterId",
1974
- "options.irdevices[].irfan.rotation_speed",
1975
- "options.irdevices[].irfan.swing_mode",
1976
- "options.irdevices[].irfan.set_minStep",
1977
- "options.irdevices[].irfan.set_min",
1978
- "options.irdevices[].irfan.set_max",
1979
- "options.irdevices[].irlight.stateless",
1601
+ "options.irdevices[].hide_automode",
1602
+ "options.irdevices[].set_max_heat",
1603
+ "options.irdevices[].set_min_heat",
1604
+ "options.irdevices[].set_max_cool",
1605
+ "options.irdevices[].set_min_cool",
1606
+ "options.irdevices[].meterType",
1607
+ "options.irdevices[].meterId",
1608
+ "options.irdevices[].rotation_speed",
1609
+ "options.irdevices[].swing_mode",
1610
+ "options.irdevices[].set_minStep",
1611
+ "options.irdevices[].set_min",
1612
+ "options.irdevices[].set_max",
1613
+ "options.irdevices[].stateless",
1980
1614
  "options.irdevices[].firmware",
1981
1615
  "options.irdevices[].external",
1982
1616
  "options.irdevices[].logging"
@@ -1991,6 +1625,18 @@
1991
1625
  "expanded": false,
1992
1626
  "items": [
1993
1627
  "options.BLE",
1628
+ {
1629
+ "key": "options.discoverBLE",
1630
+ "description": "This will scan for BLE devices and <em class='primary-text'>display</em> an Array in the logs so you can add them to the config."
1631
+ },
1632
+ {
1633
+ "key": "options.disableLogsforBLE",
1634
+ "description": "This will disable the logs coming from <em class='primary-text>node-switchbot</em> BLE ."
1635
+ },
1636
+ {
1637
+ "key": "options.disableLogsforOpenAPI",
1638
+ "description": "This will disable the logs coming from <em class='primary-text>node-switchbot</em> OpenAPI."
1639
+ },
1994
1640
  "options.webhookURL",
1995
1641
  "options.mqttURL",
1996
1642
  "options.mqttOptions",