isy-nodejs 1.0.1-alpha.2 → 1.0.1-alpha.20

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 (261) hide show
  1. package/dist/cjs/Converters.js +66 -30
  2. package/dist/cjs/Converters.js.map +1 -1
  3. package/dist/cjs/Definitions/Global/Drivers.js +10 -3
  4. package/dist/cjs/Definitions/Global/Drivers.js.map +1 -1
  5. package/dist/cjs/Definitions/Global/Events.js +1 -2
  6. package/dist/cjs/Definitions/Global/Events.js.map +1 -1
  7. package/dist/cjs/Devices/Elk/ElkAlarmPanelDevice.js +3 -3
  8. package/dist/cjs/Devices/Elk/ElkAlarmSensorDevice.js +9 -6
  9. package/dist/cjs/Devices/Elk/ElkAlarmSensorDevice.js.map +1 -1
  10. package/dist/cjs/Devices/Insteon/InsteonBaseDevice.js +5 -3
  11. package/dist/cjs/Devices/Insteon/InsteonBaseDevice.js.map +1 -1
  12. package/dist/cjs/Devices/Insteon/InsteonFanDevice.js +7 -3
  13. package/dist/cjs/Devices/Insteon/InsteonFanDevice.js.map +1 -1
  14. package/dist/cjs/Devices/Insteon/InsteonMotionSensorDevice.js +5 -5
  15. package/dist/cjs/Devices/Insteon/InsteonRelayDevice.js +3 -8
  16. package/dist/cjs/Devices/Insteon/InsteonRelayDevice.js.map +1 -1
  17. package/dist/cjs/Devices/Insteon/RelayLampSwitch.js +72 -0
  18. package/dist/cjs/Devices/Insteon/RelayLampSwitch.js.map +1 -0
  19. package/dist/cjs/ISY.js +58 -43
  20. package/dist/cjs/ISY.js.map +1 -1
  21. package/dist/cjs/ISYNode.js +15 -12
  22. package/dist/cjs/ISYNode.js.map +1 -1
  23. package/dist/cjs/ISYScene.js +3 -3
  24. package/dist/cjs/ISYScene.js.map +1 -1
  25. package/dist/cjs/Matter/Behaviors/ISYBridgedDeviceBehavior.js +11 -4
  26. package/dist/cjs/Matter/Behaviors/ISYBridgedDeviceBehavior.js.map +1 -1
  27. package/dist/cjs/Matter/Behaviors/ISYClusterBehavior.js +26 -7
  28. package/dist/cjs/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  29. package/dist/cjs/Matter/Behaviors/ISYOnOffBehavior.js +11 -8
  30. package/dist/cjs/Matter/Behaviors/ISYOnOffBehavior.js.map +1 -1
  31. package/dist/cjs/Matter/{Server → Bridge}/Server.js +88 -51
  32. package/dist/cjs/Matter/Bridge/Server.js.map +1 -0
  33. package/dist/cjs/Matter/Mappings/Insteon.js +19 -15
  34. package/dist/cjs/Matter/Mappings/Insteon.js.map +1 -1
  35. package/dist/cjs/Matter/Mappings/register.js +1 -0
  36. package/dist/cjs/Matter/Mappings/register.js.map +1 -0
  37. package/dist/cjs/Model/ClusterMap.js +12 -9
  38. package/dist/cjs/Model/ClusterMap.js.map +1 -1
  39. package/dist/cjs/Utils.js +60 -9
  40. package/dist/cjs/Utils.js.map +1 -1
  41. package/dist/cjs/types/CodeGeneration/EnumFactory.d.ts +1 -1
  42. package/dist/cjs/types/Converters.d.ts +28 -8
  43. package/dist/cjs/types/Converters.d.ts.map +1 -1
  44. package/dist/cjs/types/Definitions/Global/Drivers.d.ts +4 -3
  45. package/dist/cjs/types/Definitions/Global/Drivers.d.ts.map +1 -1
  46. package/dist/cjs/types/Definitions/Global/Events.d.ts.map +1 -1
  47. package/dist/cjs/types/Devices/Elk/ElkAlarmSensorDevice.d.ts.map +1 -1
  48. package/dist/cjs/types/Devices/EndpointFor.d.ts +2 -2
  49. package/dist/cjs/types/Devices/Insteon/InsteonBaseDevice.d.ts +3 -3
  50. package/dist/cjs/types/Devices/Insteon/InsteonBaseDevice.d.ts.map +1 -1
  51. package/dist/cjs/types/Devices/Insteon/InsteonDevice.d.ts +4 -4
  52. package/dist/cjs/types/Devices/Insteon/InsteonFanDevice.d.ts +5 -4
  53. package/dist/cjs/types/Devices/Insteon/InsteonFanDevice.d.ts.map +1 -1
  54. package/dist/cjs/types/Devices/Insteon/InsteonRelayDevice.d.ts +2 -4
  55. package/dist/cjs/types/Devices/Insteon/InsteonRelayDevice.d.ts.map +1 -1
  56. package/dist/cjs/types/Devices/Insteon/RelayLampSwitch.d.ts +93 -0
  57. package/dist/cjs/types/Devices/Insteon/RelayLampSwitch.d.ts.map +1 -0
  58. package/dist/cjs/types/ISY.d.ts +27 -21
  59. package/dist/cjs/types/ISY.d.ts.map +1 -1
  60. package/dist/cjs/types/ISYNode.d.ts +4 -4
  61. package/dist/cjs/types/ISYNode.d.ts.map +1 -1
  62. package/dist/cjs/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +16 -6
  63. package/dist/cjs/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
  64. package/dist/cjs/types/Matter/Behaviors/ISYClusterBehavior.d.ts +13 -11
  65. package/dist/cjs/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  66. package/dist/cjs/types/Matter/Behaviors/ISYOnOffBehavior.d.ts +4 -4
  67. package/dist/cjs/types/Matter/Behaviors/ISYOnOffBehavior.d.ts.map +1 -1
  68. package/dist/cjs/types/Matter/Bridge/Server.d.ts +27 -0
  69. package/dist/cjs/types/Matter/Bridge/Server.d.ts.map +1 -0
  70. package/dist/cjs/types/Matter/Mappings/register.d.ts +1 -0
  71. package/dist/cjs/types/Matter/Mappings/register.d.ts.map +1 -0
  72. package/dist/cjs/types/Model/ClusterMap.d.ts +19 -11
  73. package/dist/cjs/types/Model/ClusterMap.d.ts.map +1 -1
  74. package/dist/cjs/types/Utils.d.ts +3 -5
  75. package/dist/cjs/types/Utils.d.ts.map +1 -1
  76. package/dist/esm/Converters.js +63 -28
  77. package/dist/esm/Converters.js.map +1 -1
  78. package/dist/esm/Definitions/Global/Drivers.js +10 -3
  79. package/dist/esm/Definitions/Global/Drivers.js.map +1 -1
  80. package/dist/esm/Definitions/Global/Events.js +1 -2
  81. package/dist/esm/Definitions/Global/Events.js.map +1 -1
  82. package/dist/esm/Devices/Brultech/index.js +4 -0
  83. package/dist/esm/Devices/Brultech/index.js.map +1 -0
  84. package/dist/esm/Devices/Constructor.js +2 -0
  85. package/dist/esm/Devices/Constructor.js.map +1 -0
  86. package/dist/esm/Devices/DeviceFactory.js +13 -0
  87. package/dist/esm/Devices/DeviceFactory.js.map +1 -0
  88. package/dist/esm/Devices/DeviceMap.js +4 -0
  89. package/dist/esm/Devices/DeviceMap.js.map +1 -0
  90. package/dist/esm/Devices/Elk/ElkAlarmPanelDevice.js +181 -0
  91. package/dist/esm/Devices/Elk/ElkAlarmPanelDevice.js.map +1 -0
  92. package/dist/esm/Devices/Elk/ElkAlarmSensorDevice.js +110 -0
  93. package/dist/esm/Devices/Elk/ElkAlarmSensorDevice.js.map +1 -0
  94. package/dist/esm/Devices/EndpointFor.js +31 -0
  95. package/dist/esm/Devices/EndpointFor.js.map +1 -0
  96. package/dist/esm/Devices/ISYDevice.js +35 -0
  97. package/dist/esm/Devices/ISYDevice.js.map +1 -0
  98. package/dist/esm/Devices/ISYDeviceNode.js +62 -0
  99. package/dist/esm/Devices/ISYDeviceNode.js.map +1 -0
  100. package/dist/esm/Devices/ISYMultiNodeDevice.js +89 -0
  101. package/dist/esm/Devices/ISYMultiNodeDevice.js.map +1 -0
  102. package/dist/esm/Devices/Insteon/InsteonBallastDimmerDevice.js +8 -0
  103. package/dist/esm/Devices/Insteon/InsteonBallastDimmerDevice.js.map +1 -0
  104. package/dist/esm/Devices/Insteon/InsteonBaseDevice.js +49 -0
  105. package/dist/esm/Devices/Insteon/InsteonBaseDevice.js.map +1 -0
  106. package/dist/esm/Devices/Insteon/InsteonCOSensorDevice.js +14 -0
  107. package/dist/esm/Devices/Insteon/InsteonCOSensorDevice.js.map +1 -0
  108. package/dist/esm/Devices/Insteon/InsteonDevice.js +17 -0
  109. package/dist/esm/Devices/Insteon/InsteonDevice.js.map +1 -0
  110. package/dist/esm/Devices/Insteon/InsteonDeviceFactory.js +875 -0
  111. package/dist/esm/Devices/Insteon/InsteonDeviceFactory.js.map +1 -0
  112. package/dist/esm/Devices/Insteon/InsteonDimmableDevice.js +32 -0
  113. package/dist/esm/Devices/Insteon/InsteonDimmableDevice.js.map +1 -0
  114. package/dist/esm/Devices/Insteon/InsteonDimmerOutletDevice.js +7 -0
  115. package/dist/esm/Devices/Insteon/InsteonDimmerOutletDevice.js.map +1 -0
  116. package/dist/esm/Devices/Insteon/InsteonDimmerSwitchDevice.js +8 -0
  117. package/dist/esm/Devices/Insteon/InsteonDimmerSwitchDevice.js.map +1 -0
  118. package/dist/esm/Devices/Insteon/InsteonDoorWindowSensorDevice.js +11 -0
  119. package/dist/esm/Devices/Insteon/InsteonDoorWindowSensorDevice.js.map +1 -0
  120. package/dist/esm/Devices/Insteon/InsteonFanDevice.js +60 -0
  121. package/dist/esm/Devices/Insteon/InsteonFanDevice.js.map +1 -0
  122. package/dist/esm/Devices/Insteon/InsteonKeypadDevice.js +8 -0
  123. package/dist/esm/Devices/Insteon/InsteonKeypadDevice.js.map +1 -0
  124. package/dist/esm/Devices/Insteon/InsteonKeypadDimmerDevice.js +8 -0
  125. package/dist/esm/Devices/Insteon/InsteonKeypadDimmerDevice.js.map +1 -0
  126. package/dist/esm/Devices/Insteon/InsteonKeypadRelayDevice.js +8 -0
  127. package/dist/esm/Devices/Insteon/InsteonKeypadRelayDevice.js.map +1 -0
  128. package/dist/esm/Devices/Insteon/InsteonLeakSensorDevice.js +11 -0
  129. package/dist/esm/Devices/Insteon/InsteonLeakSensorDevice.js.map +1 -0
  130. package/dist/esm/Devices/Insteon/InsteonLockDevice.js +32 -0
  131. package/dist/esm/Devices/Insteon/InsteonLockDevice.js.map +1 -0
  132. package/dist/esm/Devices/Insteon/InsteonMotionSensorDevice.js +36 -0
  133. package/dist/esm/Devices/Insteon/InsteonMotionSensorDevice.js.map +1 -0
  134. package/dist/esm/Devices/Insteon/InsteonOnOffOutletDevice.js +19 -0
  135. package/dist/esm/Devices/Insteon/InsteonOnOffOutletDevice.js.map +1 -0
  136. package/dist/esm/Devices/Insteon/InsteonRelayDevice.js +41 -0
  137. package/dist/esm/Devices/Insteon/InsteonRelayDevice.js.map +1 -0
  138. package/dist/esm/Devices/Insteon/InsteonRelaySwitchDevice.js +8 -0
  139. package/dist/esm/Devices/Insteon/InsteonRelaySwitchDevice.js.map +1 -0
  140. package/dist/esm/Devices/Insteon/InsteonSmokeSensorDevice.js +11 -0
  141. package/dist/esm/Devices/Insteon/InsteonSmokeSensorDevice.js.map +1 -0
  142. package/dist/esm/Devices/Insteon/InsteonThermostatDevice.js +30 -0
  143. package/dist/esm/Devices/Insteon/InsteonThermostatDevice.js.map +1 -0
  144. package/dist/esm/Devices/Insteon/RelayLampSwitch.js +68 -0
  145. package/dist/esm/Devices/Insteon/RelayLampSwitch.js.map +1 -0
  146. package/dist/esm/Devices/Insteon/index.js +31 -0
  147. package/dist/esm/Devices/Insteon/index.js.map +1 -0
  148. package/dist/esm/Devices/Lutron/index.js +4 -0
  149. package/dist/esm/Devices/Lutron/index.js.map +1 -0
  150. package/dist/esm/Devices/MapsTo.js +2 -0
  151. package/dist/esm/Devices/MapsTo.js.map +1 -0
  152. package/dist/esm/Devices/NCD/index.js +4 -0
  153. package/dist/esm/Devices/NCD/index.js.map +1 -0
  154. package/dist/esm/Devices/NodeFactory.js +48 -0
  155. package/dist/esm/Devices/NodeFactory.js.map +1 -0
  156. package/dist/esm/Devices/Poly/index.js +4 -0
  157. package/dist/esm/Devices/Poly/index.js.map +1 -0
  158. package/dist/esm/Devices/Scene/index.js +4 -0
  159. package/dist/esm/Devices/Scene/index.js.map +1 -0
  160. package/dist/esm/Devices/UDI/index.js +4 -0
  161. package/dist/esm/Devices/UDI/index.js.map +1 -0
  162. package/dist/esm/Devices/ZWave/ZWaveBaseDevice.js +38 -0
  163. package/dist/esm/Devices/ZWave/ZWaveBaseDevice.js.map +1 -0
  164. package/dist/esm/Devices/ZWave/ZWaveDimmerSwitchDevice.js +8 -0
  165. package/dist/esm/Devices/ZWave/ZWaveDimmerSwitchDevice.js.map +1 -0
  166. package/dist/esm/Devices/ZWave/ZWaveLockDevice.js +35 -0
  167. package/dist/esm/Devices/ZWave/ZWaveLockDevice.js.map +1 -0
  168. package/dist/esm/Devices/ZWave/index.js +20 -0
  169. package/dist/esm/Devices/ZWave/index.js.map +1 -0
  170. package/dist/esm/Devices/index.js +9 -0
  171. package/dist/esm/Devices/index.js.map +1 -0
  172. package/dist/esm/ISY.js +56 -41
  173. package/dist/esm/ISY.js.map +1 -1
  174. package/dist/esm/ISYNode.js +16 -13
  175. package/dist/esm/ISYNode.js.map +1 -1
  176. package/dist/esm/ISYScene.js +3 -3
  177. package/dist/esm/ISYScene.js.map +1 -1
  178. package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js +11 -4
  179. package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js.map +1 -1
  180. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js +26 -7
  181. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  182. package/dist/esm/Matter/Behaviors/ISYOnOffBehavior.js +12 -9
  183. package/dist/esm/Matter/Behaviors/ISYOnOffBehavior.js.map +1 -1
  184. package/dist/esm/Matter/{Server → Bridge}/Server.js +60 -50
  185. package/dist/esm/Matter/Bridge/Server.js.map +1 -0
  186. package/dist/esm/Matter/Mappings/Insteon.js +22 -18
  187. package/dist/esm/Matter/Mappings/Insteon.js.map +1 -1
  188. package/dist/esm/Matter/Mappings/register.js +2 -0
  189. package/dist/esm/Matter/Mappings/register.js.map +1 -0
  190. package/dist/esm/Model/ClusterMap.js +12 -9
  191. package/dist/esm/Model/ClusterMap.js.map +1 -1
  192. package/dist/esm/Utils.js +55 -8
  193. package/dist/esm/Utils.js.map +1 -1
  194. package/dist/esm/types/CodeGeneration/EnumFactory.d.ts +1 -1
  195. package/dist/esm/types/Converters.d.ts +28 -8
  196. package/dist/esm/types/Converters.d.ts.map +1 -1
  197. package/dist/esm/types/Definitions/Global/Drivers.d.ts +4 -3
  198. package/dist/esm/types/Definitions/Global/Drivers.d.ts.map +1 -1
  199. package/dist/esm/types/Definitions/Global/Events.d.ts.map +1 -1
  200. package/dist/esm/types/Devices/Elk/ElkAlarmSensorDevice.d.ts.map +1 -1
  201. package/dist/esm/types/Devices/EndpointFor.d.ts +2 -2
  202. package/dist/esm/types/Devices/Insteon/InsteonBaseDevice.d.ts +3 -3
  203. package/dist/esm/types/Devices/Insteon/InsteonBaseDevice.d.ts.map +1 -1
  204. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts +4 -4
  205. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts +5 -4
  206. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts.map +1 -1
  207. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts +2 -4
  208. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts.map +1 -1
  209. package/dist/esm/types/Devices/Insteon/RelayLampSwitch.d.ts +93 -0
  210. package/dist/esm/types/Devices/Insteon/RelayLampSwitch.d.ts.map +1 -0
  211. package/dist/esm/types/ISY.d.ts +27 -21
  212. package/dist/esm/types/ISY.d.ts.map +1 -1
  213. package/dist/esm/types/ISYNode.d.ts +4 -4
  214. package/dist/esm/types/ISYNode.d.ts.map +1 -1
  215. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +16 -6
  216. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
  217. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts +13 -11
  218. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  219. package/dist/esm/types/Matter/Behaviors/ISYOnOffBehavior.d.ts +4 -4
  220. package/dist/esm/types/Matter/Behaviors/ISYOnOffBehavior.d.ts.map +1 -1
  221. package/dist/esm/types/Matter/Bridge/Server.d.ts +27 -0
  222. package/dist/esm/types/Matter/Bridge/Server.d.ts.map +1 -0
  223. package/dist/esm/types/Matter/Mappings/register.d.ts +2 -0
  224. package/dist/esm/types/Matter/Mappings/register.d.ts.map +1 -0
  225. package/dist/esm/types/Model/ClusterMap.d.ts +19 -11
  226. package/dist/esm/types/Model/ClusterMap.d.ts.map +1 -1
  227. package/dist/esm/types/Utils.d.ts +3 -5
  228. package/dist/esm/types/Utils.d.ts.map +1 -1
  229. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  230. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  231. package/package.json +4 -6
  232. package/src/Converters.ts +137 -69
  233. package/src/Definitions/Global/Drivers.ts +16 -7
  234. package/src/Definitions/Global/Events.ts +4 -3
  235. package/src/Devices/Elk/ElkAlarmPanelDevice.ts +3 -3
  236. package/src/Devices/Elk/ElkAlarmSensorDevice.ts +15 -21
  237. package/src/Devices/Insteon/Generated/RelayLamp.ts +8 -7
  238. package/src/Devices/Insteon/InsteonBaseDevice.ts +10 -9
  239. package/src/Devices/Insteon/InsteonFanDevice.ts +16 -11
  240. package/src/Devices/Insteon/InsteonMotionSensorDevice.ts +5 -5
  241. package/src/Devices/Insteon/InsteonRelayDevice.ts +3 -5
  242. package/src/Devices/Insteon/RelayLampSwitch.ts +131 -0
  243. package/src/ISY.ts +87 -61
  244. package/src/ISYNode.ts +17 -14
  245. package/src/ISYScene.ts +3 -3
  246. package/src/Matter/Behaviors/ISYBridgedDeviceBehavior.ts +29 -11
  247. package/src/Matter/Behaviors/ISYClusterBehavior.ts +46 -28
  248. package/src/Matter/Behaviors/ISYOnOffBehavior.ts +50 -64
  249. package/src/Matter/{Server → Bridge}/Server.ts +87 -59
  250. package/src/Matter/Mappings/Insteon.ts +53 -60
  251. package/src/Matter/Mappings/register.ts +0 -0
  252. package/src/Model/ClassDefinition.ts +1 -1
  253. package/src/Model/ClusterMap.ts +31 -22
  254. package/src/Utils.ts +62 -19
  255. package/tsconfig.json +2 -2
  256. package/dist/cjs/Matter/Server/Server.js.map +0 -1
  257. package/dist/cjs/types/Matter/Server/Server.d.ts +0 -4
  258. package/dist/cjs/types/Matter/Server/Server.d.ts.map +0 -1
  259. package/dist/esm/Matter/Server/Server.js.map +0 -1
  260. package/dist/esm/types/Matter/Server/Server.d.ts +0 -4
  261. package/dist/esm/types/Matter/Server/Server.d.ts.map +0 -1
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "isy-nodejs",
3
3
  "description": "Node.js wrapper for ISY interface including websockets for change notifications. Fork of isy-js by Rod Toll. Designed to be used in a node.js application.",
4
4
  "license": "MIT",
5
- "version": "1.0.1-alpha.2",
5
+ "version": "1.0.1-alpha.20",
6
6
  "author": {
7
7
  "name": "Pradeep Mouli"
8
8
  },
@@ -46,6 +46,7 @@
46
46
  "@types/node": "^22.7.5",
47
47
  "@types/xml2js": "",
48
48
  "@types/xmldoc": "",
49
+ "microdiff": "^1.4.0",
49
50
  "mocha": "",
50
51
  "rimraf": "^6.0.1"
51
52
  },
@@ -56,6 +57,7 @@
56
57
  "axios": "^1.7.7",
57
58
  "fast-xml-parser": "^4.5.0",
58
59
  "faye-websocket": "^0.11.4",
60
+ "install": "^0.13.0",
59
61
  "mocha": "^10.7.3",
60
62
  "p-queue": "^8.0.1",
61
63
  "winston": "^3.15.0",
@@ -64,12 +66,8 @@
64
66
  "bugs": {
65
67
  "url": "https://github.com/pradeepmouli/isy-nodejs/issues"
66
68
  },
67
- "repository": {
68
- "type": "git",
69
- "url": "https://github.com/pradeepmouli/isy-js.git"
70
- },
71
69
  "publishConfig": {
72
70
  "access": "public"
73
71
  },
74
- "gitHead": "8004f489e0ea150182931c54a999bf90f941d829"
72
+ "gitHead": "3b8710c1b6a783c32744c2f97f56ba8b836b02ca"
75
73
  }
package/src/Converters.ts CHANGED
@@ -1,87 +1,155 @@
1
- import { UnitOfMeasure } from "./Definitions/Global/UOM.js";
2
- import { Converter, invert } from './Utils.js';
1
+
2
+ import { UnitOfMeasure } from './Definitions/Global/UOM.js';
3
+ import { type StringKeys } from './Utils.js';
3
4
 
4
5
  let BooleanPercentage: Converter<boolean, number>;
6
+ let NullConverter: Converter<any, any>;
7
+ {
8
+ to: (value: any) => value;
9
+ from: (value: any) => value;
10
+ }
5
11
 
6
12
  BooleanPercentage = {
7
- to: (value: number): boolean => {
8
- return value > 0;
9
- },
10
- from: (value: boolean): number => {
11
- return value ? 100 : 0;
12
- },
13
+ to: (value: number): boolean => {
14
+ return value > 0;
15
+ },
16
+ from: (value: boolean): number => {
17
+ return value ? 100 : 0;
18
+ }
13
19
  };
14
20
 
15
- const StandardConverters : {
16
- [x in `${keyof typeof UnitOfMeasure}`]?: { [y in `${keyof typeof UnitOfMeasure}`]?: Converter<any, any> };
17
- } = {
18
- Boolean: {
19
- LevelFrom0To255: {
20
- from: (value: number) => value > 0,
21
- to: (value: boolean) => (value ? 255 : 0),
22
- },
23
- Percent: BooleanPercentage,
24
- },
25
- Percent: {},
26
- LevelFrom0To255: {
27
- Percent: {
28
- to: (value: number): number => {
29
- return Math.round((value * 255) / 100);
30
- },
31
- from: (value: number): number => {
32
- return Math.round((value * 100) / 255);
33
- },
34
- },
35
- },
21
+ const StandardConverters: {
22
+ [x in `${keyof typeof UnitOfMeasure}`]?: { [y in `${keyof typeof UnitOfMeasure}`]?: Converter<any, any> };
23
+ } = {
24
+ Boolean: {
25
+ LevelFrom0To255: {
26
+ to: (value: boolean) => (value ? 255 : 0),
27
+ from: (value: number) => value > 0
28
+ },
29
+ Percent: BooleanPercentage
30
+ },
31
+ Percent: {},
32
+ LevelFrom0To255: {
33
+ Percent: {
34
+ to: (value: number): number => {
35
+ return Math.round((value * 100) / 255);
36
+ },
37
+ from: (value: number): number => {
38
+ return Math.round((value * 255) / 100);
39
+ }
40
+ }
41
+ }
36
42
  };
37
43
 
38
44
  StandardConverters.Percent.LevelFrom0To255 = invert(StandardConverters.LevelFrom0To255.Percent);
39
45
  StandardConverters.LevelFrom0To255.Boolean = invert(StandardConverters.Boolean.LevelFrom0To255);
40
46
 
41
- export const ConverterRegistry = new Map<UnitOfMeasure, Map<UnitOfMeasure, Converter<any, any>>>();
47
+ export const StdConverterRegistry = new Map<UnitOfMeasure | string, Map<UnitOfMeasure | string, Converter<any, any>>>();
42
48
 
43
- function registerConverters(){
44
- for (const from in StandardConverters) {
45
- for (const to in StandardConverters[from]) {
46
- registerConverter(UnitOfMeasure[from], UnitOfMeasure[to], StandardConverters[from][to] as Converter<any, any>);
47
- }
48
- }
49
+ export const ConverterRegistry = new Map<string, Converter<any, any>>();
50
+
51
+ function registerConverters() {
52
+ for (const from in StandardConverters) {
53
+ for (const to in StandardConverters[from]) {
54
+ registerConverter(UnitOfMeasure[from], UnitOfMeasure[to], StandardConverters[from][to] as Converter<any, any>);
55
+ registerConverter(UnitOfMeasure[to], UnitOfMeasure[from], invert(StandardConverters[from][to]) as Converter<any, any>);
56
+ }
57
+ }
58
+ for (const from in Converter.Matter) {
59
+ for (const to in Converter.Matter[from]) {
60
+ registerConverter(from, to, Converter.Matter[from][to] as Converter<any, any>);
61
+ registerConverter(to, from, invert(Converter.Matter[from][to]) as Converter<any, any>);
62
+ }
63
+ }
49
64
  }
50
65
 
51
- export function registerConverter(from: UnitOfMeasure, to: UnitOfMeasure, converter: Converter<any, any>)
52
- {
53
- if (!ConverterRegistry.has(from)) {
54
- ConverterRegistry.set(from, new Map());
55
- }
56
- ConverterRegistry.get(from).set(to, converter);
66
+ export function registerConverter(
67
+ from: keyof typeof StandardConverters | UnitOfMeasure | keyof typeof Converter.Matter | string,
68
+ to: keyof typeof StandardConverters | UnitOfMeasure | keyof typeof Converter.Matter | string,
69
+ converter: Converter<any, any>
70
+ ) {
71
+ if (!StdConverterRegistry.has(from)) {
72
+ StdConverterRegistry.set(from, new Map());
73
+ }
74
+
75
+ StdConverterRegistry.get(from).set(to, converter);
76
+ let key = from + '.' + to;
77
+ if (!ConverterRegistry.has(key)) {
78
+ ConverterRegistry.set(key, converter);
79
+ }
57
80
  }
58
81
 
59
- export namespace Converters {
60
- export const Standard : typeof StandardConverters = StandardConverters;
61
-
62
- export const Matter: { [x in `${keyof typeof UnitOfMeasure}`]?: { [y: string]: Converter<any, any> } } = {
63
- LevelFrom0To255: {
64
- LightingLevel: {
65
- from: (value) => (value === 1 ? 0 : value === 254 ? 255 : value),
66
- to: (value) => (value === 0 ? 1 : value === 255 ? 254 : value),
67
- },
68
- }
69
- };
70
-
71
- export function getConverter(from: UnitOfMeasure, to: UnitOfMeasure): Converter<any, any> {
72
- if (!ConverterRegistry.has(from)) {
73
- return null;
74
- }
75
- return ConverterRegistry.get(from).get(to);
76
- }
77
-
78
- export function convert<F,T>(from: UnitOfMeasure, to: UnitOfMeasure, value: F): T {
79
- const converter = getConverter(from, to);
80
- if (converter) {
81
- return converter.to(value);
82
- }
83
- return null;
84
- }
82
+ export namespace Converter {
83
+ export const Standard: typeof StandardConverters = StandardConverters;
84
+
85
+ export const Matter = {
86
+ LevelFrom0To255: {
87
+ LightingLevel: {
88
+ from: (value) =>
89
+ value === 1 ? 0
90
+ : value === 254 ? 255
91
+ : value,
92
+ to: (value) =>
93
+ value === 0 ? 1
94
+ : value === 255 ? 254
95
+ : value
96
+ }
97
+ }
98
+ };
99
+
100
+ export type ConverterTypes = `${StringKeys<typeof StandardConverters>}`;
101
+
102
+ export type StandardConverters = `${StringKeys<typeof StandardConverters>}.${StringKeys<typeof StandardConverters>}`;
103
+
104
+ export type MatterISYConvertibleTypes = `${StringKeys<(typeof Matter)[`${keyof typeof Matter}`]>}`;
105
+
106
+ export type ISYMatterConvertibleTypes = `${StringKeys<typeof Matter>}`;
107
+
108
+ export type MatterConverters = `${MatterISYConvertibleTypes}.${ISYMatterConvertibleTypes}` | `${ISYMatterConvertibleTypes}.${MatterISYConvertibleTypes}`;
109
+
110
+ export type KnownConverters = StandardConverters | MatterConverters;
111
+
112
+ export function get(label: KnownConverters): Converter<any, any>;
113
+ export function get(from: UnitOfMeasure, to: UnitOfMeasure);
114
+ export function get(from: ConverterTypes, to: ConverterTypes);
115
+ export function get(from: UnitOfMeasure, to: UnitOfMeasure);
116
+ export function get(from: MatterISYConvertibleTypes, to: ISYMatterConvertibleTypes);
117
+ export function get(to: ISYMatterConvertibleTypes, from: MatterISYConvertibleTypes);
118
+ export function get(from: UnitOfMeasure | `${keyof typeof UnitOfMeasure}` | string, to?: UnitOfMeasure | `${keyof typeof UnitOfMeasure}` | string): Converter<any, any> {
119
+ let isString = typeof from === 'string';
120
+ let fuom = isString ? UnitOfMeasure[from] : from;
121
+ if (to) {
122
+ let tuom = typeof to === 'string' ? UnitOfMeasure[to] : to;
123
+
124
+ if (StdConverterRegistry.has(fuom)) {
125
+ return StdConverterRegistry.get(fuom).get(tuom);
126
+ }
127
+ } else if (typeof from === 'string') {
128
+ return ConverterRegistry.get(from);
129
+ }
130
+ return NullConverter;
131
+ }
132
+
133
+ export function convert<F, T>(from: UnitOfMeasure, to: UnitOfMeasure, value: F): T {
134
+ const converter = get(from, to);
135
+ if (converter) {
136
+ return converter.to(value);
137
+ }
138
+ return null;
139
+ }
85
140
  }
86
141
 
87
- registerConverters();
142
+ registerConverters();
143
+ export interface Converter<F, T> {
144
+ // #region Properties (2)
145
+ from: (value: F) => T;
146
+ to: (value: T) => F;
147
+ } //onst D: d = 'ST';
148
+ //type DriverLabel = Values<IdentityOf<DriverType>>;
149
+
150
+ export function invert<F, T>(converter: Converter<F, T>): Converter<T, F> {
151
+ return {
152
+ from: converter.to,
153
+ to: converter.from
154
+ };
155
+ }
@@ -9,9 +9,10 @@ import type { Identity, MaybePromise, UnionToIntersection } from '@project-chip/
9
9
  import exp from 'constants';
10
10
  import { init } from 'homebridge';
11
11
  import { server } from 'typescript';
12
+ import { Converter } from '../../Converters.js';
12
13
  import type { ISYDeviceNode } from '../../Devices/ISYDeviceNode.js';
13
14
  import type { DriverState } from '../../Model/DriverState.js';
14
- import type { Converter, StringKeys } from '../../Utils.js';
15
+ import type { StringKeys } from '../../Utils.js';
15
16
  import type { Family } from './Families.js';
16
17
 
17
18
  export enum DriverType {
@@ -293,7 +294,7 @@ export interface Driver<
293
294
  // #region Public Methods (2)
294
295
 
295
296
  apply(state: DriverState, notify?: boolean): boolean;
296
- patch(value: T, formattedValue: string, uom: UnitOfMeasure, prec: number): boolean;
297
+ patch(value: T, formattedValue: string, uom: UnitOfMeasure, prec: number, notify?: boolean): boolean;
297
298
 
298
299
  // #endregion Public Methods (2)
299
300
  //override on('change', listener: (value: any) => void): this;
@@ -339,7 +340,6 @@ export function isTrue(x: true | false): x is true {
339
340
 
340
341
  export type DriverTypeLiteral = EnumLiteral<DriverType>;
341
342
 
342
-
343
343
  export type EnumWithLiteral<D extends string | bigint | number | boolean> = D | EnumLiteral<D>;
344
344
  export namespace Driver {
345
345
  export type Signature<U extends UnitOfMeasure = UnitOfMeasure, V = any, SU = U, N = string, L = N> = { uom: U; value: V; name: N; label: L; serverUom?: SU };
@@ -384,7 +384,7 @@ export namespace Driver {
384
384
  type StatelessOrStateful<D extends string, U extends UnitOfMeasure, T = number, N = string, L = string, S extends boolean = false> =
385
385
  S extends true ? StatelessDriver<D, U, T, U, N, L> : Driver<D, U, T, U, N, L>;
386
386
 
387
- export function create<D extends Literal, U extends UnitOfMeasure, T = number, L extends string = string, N extends string = string, S extends boolean = false>(
387
+ export function create<D extends Literal, U extends UnitOfMeasure, T = number, N extends string = string, L extends string = string, S extends boolean = false>(
388
388
  driver: EnumWithLiteral<D>,
389
389
 
390
390
  node?: ISYNode<Family, any, any, any>,
@@ -446,13 +446,22 @@ export namespace Driver {
446
446
  if (notify) node.events.emit(`${this.name}Changed`, driver as D, this.state.value, previousValue, this.state.formattedValue);
447
447
  return true;
448
448
  },
449
- patch(value: T, formattedValue: string, uom: UnitOfMeasure, prec: number, notify = false) {
449
+ patch(value: T, formattedValue: string, uom: UnitOfMeasure, prec: number, notify = true) {
450
450
  let previousValue = this.state.value;
451
451
 
452
452
  this.state.formattedValue = formattedValue;
453
453
  if (uom != this.uom) {
454
- this.serverUom = uom;
455
- this.state.value = converter ? converter.from(value) : node.convertFrom(value, uom, driver as D);
454
+ this.serverUom == uom;
455
+ this.state.value = converter ? converter.from(value) : Converter.convert(uom, this.uom, value);
456
+
457
+ }
458
+ else if(converter)
459
+ {
460
+ this.state.value = converter.from(value);
461
+ }
462
+ else
463
+ {
464
+ this.state.value = value;
456
465
  }
457
466
  if (previousValue == this.state.value) {
458
467
  return false;
@@ -52,7 +52,8 @@ export namespace Event {
52
52
 
53
53
  constructor(node: N) {
54
54
  super({ captureRejections: true });
55
- }
55
+
56
+ }
56
57
 
57
58
  // #endregion Constructors (1)
58
59
  }
@@ -61,8 +62,8 @@ export namespace Event {
61
62
  node: N
62
63
  ): FunctionSigFor<E, NodeEventEmitter<N>> & Omit<NodeEventEmitter<N>, 'on'> {
63
64
  var f = new NodeEventEmitter(node);
64
- for (let evt in node.events) {
65
- const ev = node.events[evt];
65
+ for (let evt in node.drivers) {
66
+
66
67
  //f[`on${ev.name}`] = f.on.bind(f, ev.name);
67
68
  }
68
69
 
@@ -90,21 +90,21 @@ export class ELKAlarmPanelDevice extends ISYDeviceNode<Family.Global,any,any> {
90
90
  if (this.alarmTripState !== valueToSet) {
91
91
  const oldVal = this.alarmTripState;
92
92
  this.alarmTripState = valueToSet;
93
- this.emit('PropertyChanged', 'alarmTripState', this.alarmTripState, oldVal, AlarmTripState[this.alarmTripState]);
93
+ this.emit('propertyChanged', 'alarmTripState', this.alarmTripState, oldVal, AlarmTripState[this.alarmTripState]);
94
94
  valueChanged = true;
95
95
  }
96
96
  } else if (updateType === AlarmPanelProperty.AlarmState) {
97
97
  if (this.alarmState !== valueToSet) {
98
98
  const oldVal = this.alarmState;
99
99
  this.alarmState = valueToSet;
100
- this.emit('PropertyChanged', 'alarmState', this.alarmState, oldVal, AlarmState[this.alarmState]);
100
+ this.emit('propertyChanged', 'alarmState', this.alarmState, oldVal, AlarmState[this.alarmState]);
101
101
  valueChanged = true;
102
102
  }
103
103
  } else if (updateType === AlarmPanelProperty.AlarmMode) {
104
104
  if (this.alarmMode !== valueToSet) {
105
105
  const oldVal = this.alarmMode;
106
106
  this.alarmMode = valueToSet;
107
- this.emit('PropertyChanged', 'alarmMode', this.alarmState, oldVal, AlarmMode[this.alarmMode]);
107
+ this.emit('propertyChanged', 'alarmMode', this.alarmState, oldVal, AlarmMode[this.alarmMode]);
108
108
  valueChanged = true;
109
109
  }
110
110
  }
@@ -1,4 +1,3 @@
1
-
2
1
  import { Family } from '../../Definitions/Global/Families.js';
3
2
  import { ISY } from '../../ISY.js';
4
3
  import { ISYDeviceNode } from '../ISYDeviceNode.js';
@@ -6,7 +5,7 @@ import { AlarmSensorPhysicalState, AlarmSensorLogicalState } from './ElkAlarmPan
6
5
  /////////////////////////////
7
6
  // ELKAlarmSensor
8
7
  //
9
- export class ElkAlarmSensorDevice extends ISYDeviceNode<Family.Global,any,any> {
8
+ export class ElkAlarmSensorDevice extends ISYDeviceNode<Family.Global, any, any> {
10
9
  [x: string]: any;
11
10
  public area: number;
12
11
  public zone: string;
@@ -17,9 +16,12 @@ export class ElkAlarmSensorDevice extends ISYDeviceNode<Family.Global,any,any> {
17
16
  public physicalState: AlarmSensorPhysicalState;
18
17
  public logicalState: AlarmSensorLogicalState;
19
18
  public voltage: number;
20
- constructor (isy: ISY, name: string, area: number, zone: string) {
19
+ constructor(isy: ISY, name: string, area: number, zone: string) {
21
20
  super(isy, {
22
- family: Family.Global, name, address: `ElkZone_${zone}`, enabled: true,
21
+ family: Family.Global,
22
+ name,
23
+ address: `ElkZone_${zone}`,
24
+ enabled: true,
23
25
  pnode: undefined,
24
26
  startDelay: 0,
25
27
  hint: '',
@@ -49,13 +51,13 @@ export class ElkAlarmSensorDevice extends ISYDeviceNode<Family.Global,any,any> {
49
51
  return this.physicalState;
50
52
  }
51
53
  public isBypassed() {
52
- return (this.logicalState === 3);
54
+ return this.logicalState === 3;
53
55
  }
54
56
  public getLogicalState() {
55
57
  return this.logicalState;
56
58
  }
57
59
  public getCurrentDoorWindowState() {
58
- return (this.physicalState === this.SENSOR_STATE_PHYSICAL_OPEN || this.logicalState === this.SENSOR_STATE_LOGICAL_VIOLATED);
60
+ return this.physicalState === this.SENSOR_STATE_PHYSICAL_OPEN || this.logicalState === this.SENSOR_STATE_LOGICAL_VIOLATED;
59
61
  }
60
62
  public getSensorStatus() {
61
63
  return 'PS [' + this.physicalState + '] LS [' + this.logicatState + ']';
@@ -63,17 +65,11 @@ export class ElkAlarmSensorDevice extends ISYDeviceNode<Family.Global,any,any> {
63
65
  public isPresent() {
64
66
  if (this.voltage < 65 || this.voltage > 80) {
65
67
  return true;
66
- }
67
- else {
68
+ } else {
68
69
  return false;
69
70
  }
70
71
  }
71
- public override handleEvent(event: {
72
- control?: string;
73
- data?: any;
74
- node?: any;
75
- eventInfo?: any;
76
- }) {
72
+ public override handleEvent(event: { control?: string; data?: any; node?: any; eventInfo?: any }) {
77
73
  const zoneUpdate = event.eventInfo.ze;
78
74
  const zone = zoneUpdate.attr.zone;
79
75
  const updateType = zoneUpdate.attr.type;
@@ -84,24 +80,22 @@ export class ElkAlarmSensorDevice extends ISYDeviceNode<Family.Global,any,any> {
84
80
  if (this.logicalState !== valueToSet) {
85
81
  const temp = this.logicalState;
86
82
  this.logicalState = valueToSet;
87
- this.emit('PropertyChanged', 'logicalState', this.logicalState, temp, this.voltage.toString());
83
+ this.emit('propertyChanged', 'logicalState', this.logicalState, temp, this.voltage.toString());
88
84
  // Not triggering change update on logical state because physical always follows and don't want double notify.
89
85
  // valueChanged = true;
90
86
  }
91
- }
92
- else if (updateType === 52) {
87
+ } else if (updateType === 52) {
93
88
  if (this.physicalState !== valueToSet) {
94
89
  const temp = this.physicalState;
95
90
  this.physicalState = valueToSet;
96
- this.emit('PropertyChanged', 'physicalState', this.physicalState, temp, this.voltage.toString());
91
+ this.emit('propertyChanged', 'physicalState', this.physicalState, temp, this.voltage.toString());
97
92
  valueChanged = true;
98
93
  }
99
- }
100
- else if (updateType === 53) {
94
+ } else if (updateType === 53) {
101
95
  if (this.voltage !== valueToSet) {
102
96
  const temp = this.voltage;
103
97
  this.voltage = valueToSet;
104
- this.emit('PropertyChanged', 'voltage', this.voltage, temp, this.voltage.toString());
98
+ this.emit('propertyChanged', 'voltage', this.voltage, temp, this.voltage.toString());
105
99
  valueChanged = true;
106
100
  }
107
101
  }
@@ -1,5 +1,5 @@
1
- /* THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT DIRECTLY. */
2
-
1
+ /* THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT DIRECTLY. */
2
+
3
3
  import { UnitOfMeasure } from "../../../Definitions/Global/UOM.js";
4
4
  import { Family } from "../../../Definitions/Global/Families.js";
5
5
  import type { NodeInfo } from "../../../Model/NodeInfo.js";
@@ -11,12 +11,12 @@ import { Driver } from "../../../Definitions/Global/Drivers.js";
11
11
  import { Insteon } from "../../../Definitions/index.js";
12
12
  import type { DriverState } from "../../../Model/DriverState.js";
13
13
  import { NodeFactory } from "../../NodeFactory.js";
14
-
14
+
15
15
  export const nodeDefId = "RelayLampOnly";
16
-
16
+
17
17
  type Commands = RelayLamp.Commands;
18
18
  type Drivers = RelayLamp.Drivers;
19
-
19
+
20
20
  export class RelayLampNode extends Base<Drivers, Commands> implements RelayLamp.Interface {
21
21
  public readonly commands = {
22
22
  DON: this.on,
@@ -33,6 +33,7 @@ export class RelayLampNode extends Base<Drivers, Commands> implements RelayLamp.
33
33
  super(isy, nodeInfo);
34
34
  this.drivers.ST = Driver.create("ST", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: "Status", name: "status" });
35
35
  this.drivers.ERR = Driver.create("ERR", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: "Responding", name: "responding" });
36
+
36
37
  }
37
38
  async on(value?: (0 | 100)) {
38
39
  return this.sendCommand("DON", { value: value });
@@ -62,9 +63,9 @@ export class RelayLampNode extends Base<Drivers, Commands> implements RelayLamp.
62
63
  return this.drivers.ERR?.value;
63
64
  }
64
65
  }
65
-
66
+
66
67
  NodeFactory.register(RelayLampNode);
67
-
68
+
68
69
  export namespace RelayLamp {
69
70
  export interface Interface extends Omit<InstanceType<typeof RelayLampNode>, keyof ISYDeviceNode<any, any, any, any>> {
70
71
  nodeDefId: "RelayLampOnly";
@@ -1,16 +1,17 @@
1
+ import 'winston';
2
+ import { Converter } from '../../Converters.js';
3
+ import type { Command } from '../../Definitions/Global/Commands.js';
4
+ import { Driver, DriverType } from '../../Definitions/Global/Drivers.js';
1
5
  import { Family, Insteon } from '../../Definitions/Global/Families.js';
2
- import { ISY } from '../../ISY.js';
3
6
  import { UnitOfMeasure as UOM, UnitOfMeasure } from '../../Definitions/Global/UOM.js';
4
- import { byteToDegree, byteToPct, pctToByte, type StringKeys } from '../../Utils.js';
7
+ import { ISY } from '../../ISY.js';
8
+ import { ISYNode } from '../../ISYNode.js';
5
9
  import { NodeInfo } from '../../Model/NodeInfo.js';
10
+ import { byteToDegree, byteToPct, pctToByte, type StringKeys } from '../../Utils.js';
6
11
  import { ISYDeviceNode } from '../ISYDeviceNode.js';
7
- import { ISYNode } from '../../ISYNode.js';
8
- import 'winston';
9
- import type { Driver, DriverType } from '../../Definitions/Global/Drivers.js';
10
- import { Converters } from '../../Converters.js';
11
- import type { Command } from '../../Definitions/Global/Commands.js';
12
12
 
13
13
  import type { Merge } from '@project-chip/matter.js/util';
14
+ import type { DriverState } from '../../Model/DriverState.js';
14
15
 
15
16
  // import { InsteonNLS } from './insteonfam.js'
16
17
  export class InsteonBaseDevice<D extends ISYNode.DriverSignatures = {}, C extends ISYNode.CommandSignatures = {}> extends ISYDeviceNode<
@@ -23,7 +24,7 @@ export class InsteonBaseDevice<D extends ISYNode.DriverSignatures = {}, C extend
23
24
  constructor(isy: ISY, deviceNode: NodeInfo) {
24
25
  super(isy, deviceNode);
25
26
  this.family = Family.Insteon;
26
-
27
+ (this.drivers as any).ERR = Driver.create('ERR', this as any, deviceNode.property as DriverState, { uom: UnitOfMeasure.Index, label: 'Responding', name: 'responding' });
27
28
  //// this.productName = InsteonNLS.getDeviceDescription(String.fromCharCode(category,device,version));
28
29
  //his.childDevices = {};
29
30
  }
@@ -37,7 +38,7 @@ export class InsteonBaseDevice<D extends ISYNode.DriverSignatures = {}, C extend
37
38
  case UOM.DegreeX2:
38
39
  return byteToDegree(value);
39
40
  case UOM.LevelFrom0To255:
40
- return Converters.Standard.LevelFrom0To255.Percent.to(value);
41
+ return Converter.Standard.LevelFrom0To255.Percent.to(value);
41
42
  case UOM.Fahrenheit:
42
43
  return value / 10;
43
44
  default:
@@ -5,12 +5,15 @@ import { States } from '../../ISYConstants.js';
5
5
  import { InsteonBaseDevice } from './InsteonBaseDevice.js';
6
6
  import { InsteonDimmableDevice } from './InsteonDimmableDevice.js';
7
7
  import 'winston';
8
- import type { NodeInfo } from '../../Model/NodeInfo.js';
9
- import {Insteon} from './index.js';
8
+ import type { NodeInfo, StaticNodeInfo } from '../../Model/NodeInfo.js';
9
+ import { Insteon } from './index.js';
10
+ import { Command, Driver, UnitOfMeasure } from '../../Definitions/index.js';
11
+ import type { DriverState } from '../../Model/DriverState.js';
10
12
 
11
- export class InsteonFanMotorDevice extends InsteonBaseDevice {
12
- constructor (isy: ISY, deviceNode: NodeInfo) {
13
+ export class InsteonFanMotorDevice extends InsteonBaseDevice<Driver.Signatures<'ST'>, Command.Signatures<'DON' | 'DOF'>> {
14
+ constructor(isy: ISY, deviceNode: StaticNodeInfo) {
13
15
  super(isy, deviceNode);
16
+ this.drivers.ST = Driver.create('ST', this, deviceNode.property as DriverState, { uom: UnitOfMeasure.Percent, label: 'Fan Speed (%)', name: 'fanSpeed' });
14
17
  this.hidden = true;
15
18
  }
16
19
 
@@ -22,7 +25,7 @@ export class InsteonFanMotorDevice extends InsteonBaseDevice {
22
25
  }
23
26
 
24
27
  public async updateFanSpeed(level: number) {
25
- return (level);
28
+ return level;
26
29
  }
27
30
  public async updateIsOn(isOn: boolean) {
28
31
  if (!isOn) {
@@ -31,7 +34,6 @@ export class InsteonFanMotorDevice extends InsteonBaseDevice {
31
34
  //return this.commands.BEEP(States.Level.Max);
32
35
  }
33
36
  }
34
-
35
37
  }
36
38
 
37
39
  export class InsteonFanDevice extends InsteonBaseDevice {
@@ -40,11 +42,11 @@ export class InsteonFanDevice extends InsteonBaseDevice {
40
42
  constructor(isy: ISY, deviceNode: NodeInfo) {
41
43
  super(isy, deviceNode);
42
44
  this.light = new InsteonDimmableDevice(isy, deviceNode);
43
- this.light.events.on('PropertyChanged', ((a: any, b: any, c: any, d: string) => { this.emit('PropertyChanged', `light.${a}`, b, c, d); }).bind(this));
45
+ /*this.light.events.on('PropertyChanged', ((a: any, b: any, c: any, d: string) => { this.emit('PropertyChanged', `light.${a}`, b, c, d); }).bind(this));*/
44
46
  this.addChild(this.light);
45
47
  }
46
48
 
47
- public override handleEvent(event: { control?: string; data?: any; node?: any; }): boolean {
49
+ public override handleEvent(event: { control?: string; data?: any; node?: any }): boolean {
48
50
  this.logger(JSON.stringify(event));
49
51
  const child = this.children.find((p) => p.address === event.node);
50
52
  if (child !== undefined) {
@@ -58,13 +60,16 @@ export class InsteonFanDevice extends InsteonBaseDevice {
58
60
  if (childDevice instanceof InsteonFanMotorDevice) {
59
61
  this.logger('Fan Motor Found');
60
62
  this.motor = childDevice as InsteonFanMotorDevice;
61
- this.motor.events.on('statusChanged', ((a: any, b: any, c: any, d: string) => { this.emit('PropertyChanged', `motor.${a}`, b, c, d); }).bind(this));
63
+ this.motor.events.on(
64
+ 'statusChanged',
65
+ ((a: any, b: any, c: any, d: string) => {
66
+ this.emit('propertyChanged', `motor.${a}`, b, c, d);
67
+ }).bind(this)
68
+ );
62
69
  }
63
70
  }
64
71
 
65
72
  public async updateFanSpeed(level: number) {
66
73
  return this.motor.updateFanSpeed(level);
67
74
  }
68
-
69
-
70
75
  }
@@ -16,13 +16,13 @@ export class InsteonMotionSensorDevice extends InsteonBaseDevice {
16
16
  if (controlName === Commands.On) {
17
17
  this.logger('Motion detected.');
18
18
  this._isMotionDetected = true;
19
- this.emit('ControlTriggered',controlName);
20
- this.emit('PropertyChanged', 'motionDetected', true, false, "true");
19
+ this.emit('controlTriggered',controlName);
20
+ this.emit('propertyChanged', 'motionDetected', true, false, "true");
21
21
 
22
22
  setTimeout(() => {
23
23
  this.logger('No motion detected in last 30 seconds.');
24
24
  this._isMotionDetected = false;
25
- this.emit('PropertyChanged', 'motionDetected', false, true, "false"); /*Included for compatiblity purposes*/
25
+ this.emit('propertyChanged', 'motionDetected', false, true, "false"); /*Included for compatiblity purposes*/
26
26
  }, 30000);
27
27
  return true;
28
28
  }
@@ -30,8 +30,8 @@ export class InsteonMotionSensorDevice extends InsteonBaseDevice {
30
30
  else if (controlName === Commands.Off) {
31
31
  this._isMotionDetected = false;
32
32
  this.logger('No motion detected.');
33
- this.emit('ControlTriggered',controlName);
34
- this.emit('PropertyChanged', 'motionDetected', false, true, "false");
33
+ this.emit('controlTriggered',controlName);
34
+ this.emit('propertyChanged', 'motionDetected', false, true, "false");
35
35
  return true;
36
36
  }
37
37