isy-nodejs 1.0.2-alpha.6 → 1.0.3-alpha.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 (271) hide show
  1. package/dist/esm/CodeGeneration/CodeFactory.js +17 -6
  2. package/dist/esm/CodeGeneration/CodeFactory.js.map +1 -1
  3. package/dist/esm/CodeGeneration/EnumFactory.js +1 -1
  4. package/dist/esm/CodeGeneration/EnumFactory.js.map +1 -1
  5. package/dist/esm/CodeGeneration/NodeClassFactory.js +8 -8
  6. package/dist/esm/CodeGeneration/NodeClassFactory.js.map +1 -1
  7. package/dist/esm/Converters.js +16 -6
  8. package/dist/esm/Converters.js.map +1 -1
  9. package/dist/esm/Devices/Insteon/Generated/AlertModuleArmed.js +3 -1
  10. package/dist/esm/Devices/Insteon/Generated/AlertModuleArmed.js.map +1 -1
  11. package/dist/esm/Devices/Insteon/Generated/AlertModuleSiren.js +3 -1
  12. package/dist/esm/Devices/Insteon/Generated/AlertModuleSiren.js.map +1 -1
  13. package/dist/esm/Devices/Insteon/Generated/BallastRelayLampSwitch.js +3 -1
  14. package/dist/esm/Devices/Insteon/Generated/BallastRelayLampSwitch.js.map +1 -1
  15. package/dist/esm/Devices/Insteon/Generated/BinaryAlarm.js +3 -1
  16. package/dist/esm/Devices/Insteon/Generated/BinaryAlarm.js.map +1 -1
  17. package/dist/esm/Devices/Insteon/Generated/BinaryControl.js +3 -1
  18. package/dist/esm/Devices/Insteon/Generated/BinaryControl.js.map +1 -1
  19. package/dist/esm/Devices/Insteon/Generated/DimmerLamp.js +3 -1
  20. package/dist/esm/Devices/Insteon/Generated/DimmerLamp.js.map +1 -1
  21. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitch.js +3 -1
  22. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitch.js.map +1 -1
  23. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitchLed.js +3 -1
  24. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitchLed.js.map +1 -1
  25. package/dist/esm/Devices/Insteon/Generated/DimmerMotorSwitch.js +3 -1
  26. package/dist/esm/Devices/Insteon/Generated/DimmerMotorSwitch.js.map +1 -1
  27. package/dist/esm/Devices/Insteon/Generated/DimmerSwitch.js +3 -1
  28. package/dist/esm/Devices/Insteon/Generated/DimmerSwitch.js.map +1 -1
  29. package/dist/esm/Devices/Insteon/Generated/DoorLock.js +3 -1
  30. package/dist/esm/Devices/Insteon/Generated/DoorLock.js.map +1 -1
  31. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Input.js +3 -1
  32. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Input.js.map +1 -1
  33. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Output.js +3 -1
  34. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Output.js.map +1 -1
  35. package/dist/esm/Devices/Insteon/Generated/EzrainInput.js +3 -1
  36. package/dist/esm/Devices/Insteon/Generated/EzrainInput.js.map +1 -1
  37. package/dist/esm/Devices/Insteon/Generated/EzrainOutput.js +3 -1
  38. package/dist/esm/Devices/Insteon/Generated/EzrainOutput.js.map +1 -1
  39. package/dist/esm/Devices/Insteon/Generated/FanLincMotor.js +3 -1
  40. package/dist/esm/Devices/Insteon/Generated/FanLincMotor.js.map +1 -1
  41. package/dist/esm/Devices/Insteon/Generated/I3KeypadFlags.js +3 -1
  42. package/dist/esm/Devices/Insteon/Generated/I3KeypadFlags.js.map +1 -1
  43. package/dist/esm/Devices/Insteon/Generated/I3PaddleFlags.js +3 -1
  44. package/dist/esm/Devices/Insteon/Generated/I3PaddleFlags.js.map +1 -1
  45. package/dist/esm/Devices/Insteon/Generated/ImeterSolo.js +3 -1
  46. package/dist/esm/Devices/Insteon/Generated/ImeterSolo.js.map +1 -1
  47. package/dist/esm/Devices/Insteon/Generated/IrLincTx.js +3 -1
  48. package/dist/esm/Devices/Insteon/Generated/IrLincTx.js.map +1 -1
  49. package/dist/esm/Devices/Insteon/Generated/KeypadButton.js +3 -1
  50. package/dist/esm/Devices/Insteon/Generated/KeypadButton.js.map +1 -1
  51. package/dist/esm/Devices/Insteon/Generated/KeypadDimmer.js +4 -2
  52. package/dist/esm/Devices/Insteon/Generated/KeypadDimmer.js.map +1 -1
  53. package/dist/esm/Devices/Insteon/Generated/KeypadRelay.js +4 -2
  54. package/dist/esm/Devices/Insteon/Generated/KeypadRelay.js.map +1 -1
  55. package/dist/esm/Devices/Insteon/Generated/OnOffControl.js +4 -2
  56. package/dist/esm/Devices/Insteon/Generated/OnOffControl.js.map +1 -1
  57. package/dist/esm/Devices/Insteon/Generated/Pir2844.js +4 -2
  58. package/dist/esm/Devices/Insteon/Generated/Pir2844.js.map +1 -1
  59. package/dist/esm/Devices/Insteon/Generated/Pir2844OnOff.js +3 -1
  60. package/dist/esm/Devices/Insteon/Generated/Pir2844OnOff.js.map +1 -1
  61. package/dist/esm/Devices/Insteon/Generated/Pir2844c.js +4 -2
  62. package/dist/esm/Devices/Insteon/Generated/Pir2844c.js.map +1 -1
  63. package/dist/esm/Devices/Insteon/Generated/RelayLamp.js +4 -2
  64. package/dist/esm/Devices/Insteon/Generated/RelayLamp.js.map +1 -1
  65. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitch.js +4 -2
  66. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitch.js.map +1 -1
  67. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitchLed.js +4 -2
  68. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitchLed.js.map +1 -1
  69. package/dist/esm/Devices/Insteon/Generated/RelaySwitch.js +4 -2
  70. package/dist/esm/Devices/Insteon/Generated/RelaySwitch.js.map +1 -1
  71. package/dist/esm/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.js +4 -2
  72. package/dist/esm/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.js.map +1 -1
  73. package/dist/esm/Devices/Insteon/Generated/RemoteLinc2.js +3 -1
  74. package/dist/esm/Devices/Insteon/Generated/RemoteLinc2.js.map +1 -1
  75. package/dist/esm/Devices/Insteon/Generated/Siren.js +3 -1
  76. package/dist/esm/Devices/Insteon/Generated/Siren.js.map +1 -1
  77. package/dist/esm/Devices/Insteon/Generated/SirenAlert.js +3 -1
  78. package/dist/esm/Devices/Insteon/Generated/SirenAlert.js.map +1 -1
  79. package/dist/esm/Devices/Insteon/Generated/TempLinc.js +3 -1
  80. package/dist/esm/Devices/Insteon/Generated/TempLinc.js.map +1 -1
  81. package/dist/esm/Devices/Insteon/Generated/Thermostat.js +3 -1
  82. package/dist/esm/Devices/Insteon/Generated/Thermostat.js.map +1 -1
  83. package/dist/esm/Devices/Insteon/Generated/X10.js +3 -1
  84. package/dist/esm/Devices/Insteon/Generated/X10.js.map +1 -1
  85. package/dist/esm/Devices/Lutron/Generated/LoadShed.js +3 -1
  86. package/dist/esm/Devices/Lutron/Generated/LoadShed.js.map +1 -1
  87. package/dist/esm/Devices/UDI/Generated/Channel.js +3 -1
  88. package/dist/esm/Devices/UDI/Generated/Channel.js.map +1 -1
  89. package/dist/esm/Devices/UDI/Generated/Em3MainChannel.js +3 -1
  90. package/dist/esm/Devices/UDI/Generated/Em3MainChannel.js.map +1 -1
  91. package/dist/esm/Devices/UDI/Generated/Main.js +3 -1
  92. package/dist/esm/Devices/UDI/Generated/Main.js.map +1 -1
  93. package/dist/esm/Devices/UDI/Generated/PulseCounter.js +3 -1
  94. package/dist/esm/Devices/UDI/Generated/PulseCounter.js.map +1 -1
  95. package/dist/esm/Devices/UDI/Generated/Relay.js +3 -1
  96. package/dist/esm/Devices/UDI/Generated/Relay.js.map +1 -1
  97. package/dist/esm/Devices/UDI/Generated/TemperatureSensor.js +3 -1
  98. package/dist/esm/Devices/UDI/Generated/TemperatureSensor.js.map +1 -1
  99. package/dist/esm/Devices/ZWave/Generated/ColorSwitch.js +8 -2
  100. package/dist/esm/Devices/ZWave/Generated/ColorSwitch.js.map +1 -1
  101. package/dist/esm/Devices/ZWave/Generated/DimmerSwitch.js +3 -1
  102. package/dist/esm/Devices/ZWave/Generated/DimmerSwitch.js.map +1 -1
  103. package/dist/esm/ISY.js +58 -33
  104. package/dist/esm/ISY.js.map +1 -1
  105. package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js +1 -1
  106. package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js.map +1 -1
  107. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  108. package/dist/esm/Matter/Behaviors/Insteon/ISYOnOffBehavior.js.map +1 -1
  109. package/dist/esm/Matter/Bridge/Server.js +6 -6
  110. package/dist/esm/Matter/Bridge/Server.js.map +1 -1
  111. package/dist/esm/Matter/Mappings/Insteon.js +36 -13
  112. package/dist/esm/Matter/Mappings/Insteon.js.map +1 -1
  113. package/dist/esm/{Model/ClusterMap.js → Matter/Mappings/MappingRegistry.js} +12 -7
  114. package/dist/esm/Matter/Mappings/MappingRegistry.js.map +1 -0
  115. package/dist/esm/Model/ClassDefinition.js +7 -5
  116. package/dist/esm/Model/ClassDefinition.js.map +1 -1
  117. package/dist/esm/types/CodeGeneration/CodeFactory.d.ts.map +1 -1
  118. package/dist/esm/types/CodeGeneration/EnumFactory.d.ts.map +1 -1
  119. package/dist/esm/types/CodeGeneration/NodeClassFactory.d.ts.map +1 -1
  120. package/dist/esm/types/Converters.d.ts +12 -6
  121. package/dist/esm/types/Converters.d.ts.map +1 -1
  122. package/dist/esm/types/Devices/EndpointFor.d.ts +1 -1
  123. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleArmed.d.ts.map +1 -1
  124. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleSiren.d.ts.map +1 -1
  125. package/dist/esm/types/Devices/Insteon/Generated/BallastRelayLampSwitch.d.ts.map +1 -1
  126. package/dist/esm/types/Devices/Insteon/Generated/BinaryAlarm.d.ts.map +1 -1
  127. package/dist/esm/types/Devices/Insteon/Generated/BinaryControl.d.ts.map +1 -1
  128. package/dist/esm/types/Devices/Insteon/Generated/DimmerLamp.d.ts.map +1 -1
  129. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitch.d.ts.map +1 -1
  130. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitchLed.d.ts.map +1 -1
  131. package/dist/esm/types/Devices/Insteon/Generated/DimmerMotorSwitch.d.ts.map +1 -1
  132. package/dist/esm/types/Devices/Insteon/Generated/DimmerSwitch.d.ts.map +1 -1
  133. package/dist/esm/types/Devices/Insteon/Generated/DoorLock.d.ts.map +1 -1
  134. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Input.d.ts.map +1 -1
  135. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Output.d.ts.map +1 -1
  136. package/dist/esm/types/Devices/Insteon/Generated/EzrainInput.d.ts.map +1 -1
  137. package/dist/esm/types/Devices/Insteon/Generated/EzrainOutput.d.ts.map +1 -1
  138. package/dist/esm/types/Devices/Insteon/Generated/FanLincMotor.d.ts.map +1 -1
  139. package/dist/esm/types/Devices/Insteon/Generated/I3KeypadFlags.d.ts.map +1 -1
  140. package/dist/esm/types/Devices/Insteon/Generated/I3PaddleFlags.d.ts.map +1 -1
  141. package/dist/esm/types/Devices/Insteon/Generated/ImeterSolo.d.ts.map +1 -1
  142. package/dist/esm/types/Devices/Insteon/Generated/IrLincTx.d.ts.map +1 -1
  143. package/dist/esm/types/Devices/Insteon/Generated/KeypadButton.d.ts.map +1 -1
  144. package/dist/esm/types/Devices/Insteon/Generated/KeypadDimmer.d.ts.map +1 -1
  145. package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts +6 -6
  146. package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts.map +1 -1
  147. package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts +3 -3
  148. package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts.map +1 -1
  149. package/dist/esm/types/Devices/Insteon/Generated/Pir2844.d.ts.map +1 -1
  150. package/dist/esm/types/Devices/Insteon/Generated/Pir2844OnOff.d.ts.map +1 -1
  151. package/dist/esm/types/Devices/Insteon/Generated/Pir2844c.d.ts.map +1 -1
  152. package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts +3 -3
  153. package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts.map +1 -1
  154. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts +3 -3
  155. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts.map +1 -1
  156. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts +6 -6
  157. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts.map +1 -1
  158. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitch.d.ts.map +1 -1
  159. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.d.ts.map +1 -1
  160. package/dist/esm/types/Devices/Insteon/Generated/RemoteLinc2.d.ts.map +1 -1
  161. package/dist/esm/types/Devices/Insteon/Generated/Siren.d.ts.map +1 -1
  162. package/dist/esm/types/Devices/Insteon/Generated/SirenAlert.d.ts.map +1 -1
  163. package/dist/esm/types/Devices/Insteon/Generated/TempLinc.d.ts.map +1 -1
  164. package/dist/esm/types/Devices/Insteon/Generated/Thermostat.d.ts.map +1 -1
  165. package/dist/esm/types/Devices/Insteon/Generated/X10.d.ts.map +1 -1
  166. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts +2 -2
  167. package/dist/esm/types/Devices/Lutron/Generated/LoadShed.d.ts.map +1 -1
  168. package/dist/esm/types/Devices/UDI/Generated/Channel.d.ts.map +1 -1
  169. package/dist/esm/types/Devices/UDI/Generated/Em3MainChannel.d.ts.map +1 -1
  170. package/dist/esm/types/Devices/UDI/Generated/Main.d.ts.map +1 -1
  171. package/dist/esm/types/Devices/UDI/Generated/PulseCounter.d.ts.map +1 -1
  172. package/dist/esm/types/Devices/UDI/Generated/Relay.d.ts.map +1 -1
  173. package/dist/esm/types/Devices/UDI/Generated/TemperatureSensor.d.ts.map +1 -1
  174. package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts +16 -9
  175. package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts.map +1 -1
  176. package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts +15 -15
  177. package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts.map +1 -1
  178. package/dist/esm/types/ISY.d.ts +6 -2
  179. package/dist/esm/types/ISY.d.ts.map +1 -1
  180. package/dist/esm/types/ISYNode.d.ts +1 -1
  181. package/dist/esm/types/ISYNode.d.ts.map +1 -1
  182. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +1 -1
  183. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
  184. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts +1 -1
  185. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  186. package/dist/esm/types/Matter/Behaviors/Insteon/ISYOnOffBehavior.d.ts.map +1 -1
  187. package/dist/esm/types/Matter/Bridge/Server.d.ts +0 -1
  188. package/dist/esm/types/Matter/Bridge/Server.d.ts.map +1 -1
  189. package/dist/esm/types/Matter/Mappings/Insteon.d.ts +3 -1
  190. package/dist/esm/types/Matter/Mappings/Insteon.d.ts.map +1 -1
  191. package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts +144 -0
  192. package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts.map +1 -0
  193. package/dist/esm/types/Model/ClassDefinition.d.ts +9 -623
  194. package/dist/esm/types/Model/ClassDefinition.d.ts.map +1 -1
  195. package/dist/esm/types/Model/EnumDefinition.d.ts +1 -1
  196. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  197. package/package.json +4 -2
  198. package/src/CodeGeneration/CodeFactory.ts +18 -2
  199. package/src/CodeGeneration/EnumFactory.ts +5 -4
  200. package/src/CodeGeneration/NodeClassFactory.ts +9 -8
  201. package/src/Converters.ts +16 -10
  202. package/src/Devices/Brultech/Generated/Channel.ts +3 -1
  203. package/src/Devices/Brultech/Generated/Main.ts +3 -1
  204. package/src/Devices/Insteon/Generated/AlertModuleArmed.ts +3 -1
  205. package/src/Devices/Insteon/Generated/AlertModuleSiren.ts +3 -1
  206. package/src/Devices/Insteon/Generated/BallastRelayLampSwitch.ts +3 -1
  207. package/src/Devices/Insteon/Generated/BinaryAlarm.ts +3 -1
  208. package/src/Devices/Insteon/Generated/BinaryControl.ts +3 -1
  209. package/src/Devices/Insteon/Generated/DimmerLamp.ts +3 -1
  210. package/src/Devices/Insteon/Generated/DimmerLampSwitch.ts +3 -1
  211. package/src/Devices/Insteon/Generated/DimmerLampSwitchLed.ts +3 -1
  212. package/src/Devices/Insteon/Generated/DimmerMotorSwitch.ts +3 -1
  213. package/src/Devices/Insteon/Generated/DimmerSwitch.ts +3 -1
  214. package/src/Devices/Insteon/Generated/DoorLock.ts +3 -1
  215. package/src/Devices/Insteon/Generated/Ezio2x4Input.ts +3 -1
  216. package/src/Devices/Insteon/Generated/Ezio2x4Output.ts +3 -1
  217. package/src/Devices/Insteon/Generated/EzrainInput.ts +3 -1
  218. package/src/Devices/Insteon/Generated/EzrainOutput.ts +3 -1
  219. package/src/Devices/Insteon/Generated/FanLincMotor.ts +3 -1
  220. package/src/Devices/Insteon/Generated/I3KeypadFlags.ts +3 -1
  221. package/src/Devices/Insteon/Generated/I3PaddleFlags.ts +3 -1
  222. package/src/Devices/Insteon/Generated/ImeterSolo.ts +3 -1
  223. package/src/Devices/Insteon/Generated/IrLincTx.ts +3 -1
  224. package/src/Devices/Insteon/Generated/KeypadButton.ts +3 -1
  225. package/src/Devices/Insteon/Generated/KeypadDimmer.ts +4 -2
  226. package/src/Devices/Insteon/Generated/KeypadRelay.ts +16 -14
  227. package/src/Devices/Insteon/Generated/OnOffControl.ts +7 -5
  228. package/src/Devices/Insteon/Generated/Pir2844.ts +4 -2
  229. package/src/Devices/Insteon/Generated/Pir2844OnOff.ts +3 -1
  230. package/src/Devices/Insteon/Generated/Pir2844c.ts +4 -2
  231. package/src/Devices/Insteon/Generated/RelayLamp.ts +7 -5
  232. package/src/Devices/Insteon/Generated/RelayLampSwitch.ts +7 -5
  233. package/src/Devices/Insteon/Generated/RelayLampSwitchLed.ts +9 -7
  234. package/src/Devices/Insteon/Generated/RelaySwitch.ts +4 -2
  235. package/src/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.ts +4 -2
  236. package/src/Devices/Insteon/Generated/RemoteLinc2.ts +3 -1
  237. package/src/Devices/Insteon/Generated/Siren.ts +3 -1
  238. package/src/Devices/Insteon/Generated/SirenAlert.ts +3 -1
  239. package/src/Devices/Insteon/Generated/TempLinc.ts +3 -1
  240. package/src/Devices/Insteon/Generated/Thermostat.ts +3 -1
  241. package/src/Devices/Insteon/Generated/X10.ts +3 -1
  242. package/src/Devices/Lutron/Generated/LoadShed.ts +3 -1
  243. package/src/Devices/NCD/Generated/Relay.ts +3 -1
  244. package/src/Devices/Poly/Generated/MatterBridge.ts +3 -1
  245. package/src/Devices/Scene/Generated/Scene.ts +3 -1
  246. package/src/Devices/UDI/Generated/Channel.ts +3 -1
  247. package/src/Devices/UDI/Generated/Em3MainChannel.ts +3 -1
  248. package/src/Devices/UDI/Generated/Main.ts +3 -1
  249. package/src/Devices/UDI/Generated/PulseCounter.ts +3 -1
  250. package/src/Devices/UDI/Generated/Relay.ts +3 -1
  251. package/src/Devices/UDI/Generated/TemperatureSensor.ts +3 -1
  252. package/src/Devices/ZWave/Generated/ColorSwitch.ts +19 -7
  253. package/src/Devices/ZWave/Generated/DimmerSwitch.ts +13 -11
  254. package/src/Devices/ZigBeeLegacy/Generated/Relay.ts +3 -1
  255. package/src/Devices/ZigBeeLegacy/Generated/Thermostat.ts +3 -1
  256. package/src/ISY.ts +57 -24
  257. package/src/Matter/Behaviors/ISYBridgedDeviceBehavior.ts +1 -1
  258. package/src/Matter/Behaviors/ISYClusterBehavior.ts +2 -1
  259. package/src/Matter/Behaviors/Insteon/ISYOnOffBehavior.ts +2 -1
  260. package/src/Matter/Bridge/Server.ts +10 -6
  261. package/src/Matter/Mappings/Insteon.ts +38 -15
  262. package/src/{Model/ClusterMap.ts → Matter/Mappings/MappingRegistry.ts} +26 -14
  263. package/src/Model/ClassDefinition.ts +16 -10
  264. package/src/Utils.ts +1 -1
  265. package/dist/esm/CodeGeneration/NodeFactory.js +0 -245
  266. package/dist/esm/CodeGeneration/NodeFactory.js.map +0 -1
  267. package/dist/esm/Model/ClusterMap.js.map +0 -1
  268. package/dist/esm/types/CodeGeneration/NodeFactory.d.ts +0 -75
  269. package/dist/esm/types/CodeGeneration/NodeFactory.d.ts.map +0 -1
  270. package/dist/esm/types/Model/ClusterMap.d.ts +0 -101
  271. package/dist/esm/types/Model/ClusterMap.d.ts.map +0 -1
@@ -41,18 +41,18 @@ export class DimmerSwitchNode extends Base<Drivers, Commands> implements DimmerS
41
41
  this.drivers.ST = Driver.create("ST", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: "Status", name: "status" });
42
42
  this.drivers.ERR = Driver.create("ERR", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: "Responding", name: "responding" });
43
43
  }
44
- async on(value?: ZWave.PercentOpt | number, rampRate?: number | number) { return this.sendCommand("DON", value, { RR: rampRate }); }
44
+ async on(value?: number | ZWave.PercentOpt, rampRate?: number) { return this.sendCommand("DON", value, { RR: rampRate }); }
45
45
  async off() { return this.sendCommand("DOF"); }
46
46
  async fastOn() { return this.sendCommand("DFON"); }
47
47
  async fastOff() { return this.sendCommand("DFOF"); }
48
48
  async brighten() { return this.sendCommand("BRT"); }
49
49
  async dim() { return this.sendCommand("DIM"); }
50
- async fadeUp(startLevel?: ZWave.PercentOpt | number, rampRate?: number | number) { return this.sendCommand("FDUP", { STARTLEVEL: startLevel, RR: rampRate }); }
51
- async fadeDown(startLevel?: ZWave.PercentOpt | number, rampRate?: number | number) { return this.sendCommand("FDDOWN", { STARTLEVEL: startLevel, RR: rampRate }); }
52
- async fade(direction: ZWave.FadeDirection, startLevel?: ZWave.PercentOpt | number, rampRate?: number | number, direction2?: ZWave.FadeDirection, fadeRate2?: number | number) { return this.sendCommand("FADE", { DIR: direction, STARTLEVEL: startLevel, RR: rampRate, DIR2: direction2, STEP2: fadeRate2 }); }
50
+ async fadeUp(startLevel?: number | ZWave.PercentOpt, rampRate?: number) { return this.sendCommand("FDUP", { STARTLEVEL: startLevel, RR: rampRate }); }
51
+ async fadeDown(startLevel?: number | ZWave.PercentOpt, rampRate?: number) { return this.sendCommand("FDDOWN", { STARTLEVEL: startLevel, RR: rampRate }); }
52
+ async fade(direction: ZWave.FadeDirection, startLevel?: number | ZWave.PercentOpt, rampRate?: number, direction2?: ZWave.FadeDirection, fadeRate2?: number) { return this.sendCommand("FADE", { DIR: direction, STARTLEVEL: startLevel, RR: rampRate, DIR2: direction2, STEP2: fadeRate2 }); }
53
53
  async fadeStop() { return this.sendCommand("FDSTOP"); }
54
54
  async query() { return this.sendCommand("QUERY"); }
55
- async setConfiguration(parameterNumber: number, parameterValue: number | number | number | number | number | number) { return this.sendCommand("CONFIG", { NUM: parameterNumber, VAL: parameterValue }); }
55
+ async setConfiguration(parameterNumber: number, parameterValue: number) { return this.sendCommand("CONFIG", { NUM: parameterNumber, VAL: parameterValue }); }
56
56
  async writeChanges() { return this.sendCommand("WDU"); }
57
57
  public get status(): number {
58
58
  return this.drivers.ST?.value;
@@ -68,7 +68,9 @@ export namespace DimmerSwitch {
68
68
  export interface Interface extends Omit<InstanceType<typeof DimmerSwitchNode>, keyof ISYDeviceNode<any, any, any, any>> {
69
69
  nodeDefId: "119";
70
70
  }
71
- export function is(node: ISYNode<any, any, any, any>): node is DimmerSwitchNode { return ["119"].includes(node.nodeDefId); }
71
+ export function is(node: ISYNode<any, any, any, any>): node is DimmerSwitchNode {
72
+ return ["119"].includes(node.nodeDefId);
73
+ }
72
74
  export function isImplementedBy(node: ISYNode<any, any, any, any>): node is DimmerSwitchNode {
73
75
  return ["119"].includes(node.nodeDefId);
74
76
  }
@@ -77,7 +79,7 @@ export namespace DimmerSwitch {
77
79
  }
78
80
  export const Node = DimmerSwitchNode;
79
81
  export type Commands = {
80
- DON: ((value?: ZWave.PercentOpt | number, RR?: number | number) => Promise<boolean>) & {
82
+ DON: ((value?: number | ZWave.PercentOpt, RR?: number) => Promise<boolean>) & {
81
83
  label: "On";
82
84
  name: "on";
83
85
  };
@@ -101,15 +103,15 @@ export namespace DimmerSwitch {
101
103
  label: "Dim";
102
104
  name: "dim";
103
105
  };
104
- FDUP: ((STARTLEVEL?: ZWave.PercentOpt | number, RR?: number | number) => Promise<boolean>) & {
106
+ FDUP: ((STARTLEVEL?: number | ZWave.PercentOpt, RR?: number) => Promise<boolean>) & {
105
107
  label: "Fade Up";
106
108
  name: "fadeUp";
107
109
  };
108
- FDDOWN: ((STARTLEVEL?: ZWave.PercentOpt | number, RR?: number | number) => Promise<boolean>) & {
110
+ FDDOWN: ((STARTLEVEL?: number | ZWave.PercentOpt, RR?: number) => Promise<boolean>) & {
109
111
  label: "Fade Down";
110
112
  name: "fadeDown";
111
113
  };
112
- FADE: ((DIR: ZWave.FadeDirection, STARTLEVEL?: ZWave.PercentOpt | number, RR?: number | number, DIR2?: ZWave.FadeDirection, STEP2?: number | number) => Promise<boolean>) & {
114
+ FADE: ((DIR: ZWave.FadeDirection, STARTLEVEL?: number | ZWave.PercentOpt, RR?: number, DIR2?: ZWave.FadeDirection, STEP2?: number) => Promise<boolean>) & {
113
115
  label: "Fade";
114
116
  name: "fade";
115
117
  };
@@ -121,7 +123,7 @@ export namespace DimmerSwitch {
121
123
  label: "Query";
122
124
  name: "query";
123
125
  };
124
- CONFIG: ((NUM: number, VAL: number | number | number | number | number | number) => Promise<boolean>) & {
126
+ CONFIG: ((NUM: number, VAL: number) => Promise<boolean>) & {
125
127
  label: "Set Configuration";
126
128
  name: "setConfiguration";
127
129
  };
@@ -53,7 +53,9 @@ export namespace Relay {
53
53
  export interface Interface extends Omit<InstanceType<typeof RelayNode>, keyof ISYDeviceNode<any, any, any, any>> {
54
54
  nodeDefId: "RelayLoadControl";
55
55
  }
56
- export function is(node: ISYNode<any, any, any, any>): node is RelayNode { return ["RelayLoadControl"].includes(node.nodeDefId); }
56
+ export function is(node: ISYNode<any, any, any, any>): node is RelayNode {
57
+ return ["RelayLoadControl"].includes(node.nodeDefId);
58
+ }
57
59
  export function isImplementedBy(node: ISYNode<any, any, any, any>): node is RelayNode {
58
60
  return ["RelayLoadControl"].includes(node.nodeDefId);
59
61
  }
@@ -105,7 +105,9 @@ export namespace Thermostat {
105
105
  export interface Interface extends Omit<InstanceType<typeof ThermostatNode>, keyof ISYDeviceNode<any, any, any, any>> {
106
106
  nodeDefId: "Thermostat";
107
107
  }
108
- export function is(node: ISYNode<any, any, any, any>): node is ThermostatNode { return ["Thermostat"].includes(node.nodeDefId); }
108
+ export function is(node: ISYNode<any, any, any, any>): node is ThermostatNode {
109
+ return ["Thermostat"].includes(node.nodeDefId);
110
+ }
109
111
  export function isImplementedBy(node: ISYNode<any, any, any, any>): node is ThermostatNode {
110
112
  return ["Thermostat"].includes(node.nodeDefId);
111
113
  }
package/src/ISY.ts CHANGED
@@ -1,9 +1,9 @@
1
- import WebSocket from 'faye-websocket';
1
+
2
2
  import { writeFile } from 'fs';
3
3
 
4
4
  import { Parser, type ParserOptions } from 'xml2js';
5
5
  import { parseBooleans, parseNumbers } from 'xml2js/lib/processors.js';
6
-
6
+ import WebSocket from 'ws';
7
7
  import axios, { type AxiosRequestConfig } from 'axios';
8
8
  import { EventEmitter } from 'events';
9
9
  import { format, Logger, loggers, type LeveledLogMethod } from 'winston';
@@ -27,6 +27,9 @@ import { NodeFactory } from './Devices/NodeFactory.js';
27
27
  import { ISYError } from './ISYError.js';
28
28
  import type { Config } from './Model/Config.js';
29
29
  import { findPackageJson } from './Utils.js';
30
+ import { textChangeRangeIsUnchanged } from 'typescript';
31
+ import type { ClientRequestArgs } from 'http';
32
+ import { promisify } from 'util';
30
33
 
31
34
 
32
35
 
@@ -94,9 +97,9 @@ interface ISYConfig {
94
97
  port: number;
95
98
  protocol: 'http' | 'https';
96
99
  username: string;
97
-
98
100
  socketPath?: string;
99
-
101
+ axiosOptions?: AxiosRequestConfig;
102
+ webSocketOptions?: WebSocket.ClientOptions & ClientRequestArgs;
100
103
  // #endregion Properties (8)
101
104
  }
102
105
 
@@ -135,7 +138,7 @@ export class ISY extends EventEmitter implements Disposable {
135
138
  public productName = 'eisy';
136
139
  public firmwareVersion: any;
137
140
  public vendorName = 'Universal Devices, Inc.';
138
- public webSocket: WebSocket.Client;
141
+ public webSocket: WebSocket;
139
142
 
140
143
  public apiVersion: string;
141
144
 
@@ -162,7 +165,7 @@ export class ISY extends EventEmitter implements Disposable {
162
165
  };
163
166
  this.protocol = config.protocol;
164
167
  this.wsprotocol = config.protocol === 'https' ? 'wss' : 'ws';
165
-
168
+ this.socketPath = config.socketPath;
166
169
  this.axiosOptions = {
167
170
  baseURL: `${this.protocol}://${this.host}:${this.port}`,
168
171
  validateStatus: (status) => status >= 200 && status < 300
@@ -174,6 +177,15 @@ export class ISY extends EventEmitter implements Disposable {
174
177
  this.axiosOptions.auth = { username: this.credentials.username, password: this.credentials.password };
175
178
  }
176
179
 
180
+ this.webSocketOptions = { origin: 'com.universal-devices.websockets.isy' };
181
+
182
+ if (this.socketPath) {
183
+ this.webSocketOptions.socketPath = this.socketPath;
184
+ } else {
185
+ this.webSocketOptions.auth = `${this.credentials.username}:${this.credentials.password}`;
186
+ }
187
+
188
+
177
189
  //this.elkEnabled = config.elkEnabled ?? false;
178
190
 
179
191
  this.nodesLoaded = false;
@@ -355,29 +367,40 @@ export class ISY extends EventEmitter implements Disposable {
355
367
  try {
356
368
  await this.loadConfig();
357
369
  await this.loadNodes();
370
+ await this.refreshStatuses();
358
371
  await this.loadVariables(VariableType.Integer);
359
372
  await this.loadVariables(VariableType.State);
360
- await this.refreshStatuses();
361
373
  await this.#finishInitialize(true);
362
374
  return true;
363
375
  } catch (e) {
364
376
  if (e instanceof ISYInitializationError) {
377
+ if(e.step === 'variables')
378
+ {
379
+ this.logger.warn(`Error loading variables: ${e.message}`);
380
+ await this.#finishInitialize(true);
381
+ return true;
382
+ }
365
383
  this.logger.error(`Error initializing ISY during (${e.step}): ${e.message}`);
384
+ return false;
366
385
  } else {
367
386
  this.logger.error(`Error initializing ISY: ${e.message}`);
387
+ return false;
368
388
  }
369
389
  throw e;
370
390
  } finally {
371
391
  if (this.nodesLoaded !== true) {
372
- that.#finishInitialize(false);
392
+ await that.#finishInitialize(false);
373
393
  }
374
394
  }
375
395
  }
376
396
 
397
+ webSocketOptions: WebSocket.ClientOptions & ClientRequestArgs;
398
+
377
399
  public async initializeWebSocket() {
378
400
  try {
379
401
  const that = this;
380
- const auth = `Basic ${Buffer.from(`${this.credentials.username}:${this.credentials.password}`).toString('base64')}`;
402
+
403
+ //const auth = `Basic ${Buffer.from(`${this.credentials.username}:${this.credentials.password}`).toString('base64')}`;
381
404
  this.logger.info(`Opening webSocket: ${this.wsprotocol}://${this.address}/rest/subscribe`);
382
405
  if (this.webSocket) {
383
406
  try {
@@ -386,27 +409,33 @@ export class ISY extends EventEmitter implements Disposable {
386
409
  this.logger.warn(`Error closing existing websocket: ${e.message}`);
387
410
  }
388
411
  }
389
- this.webSocket = new WebSocket.Client(`${this.wsprotocol}://${this.address}/rest/subscribe`, ['ISYSUB'], {
390
- headers: {
412
+
413
+ /*headers: {
391
414
  Origin: 'com.universal-devices.websockets.isy',
392
- Authorization: auth
415
+ auth
393
416
  },
394
- ping: 10
395
- });
396
417
 
397
- this.lastActivity = new Date();
418
+ ping: 10*/
419
+ let p = new Promise<void>((resolve, reject) => {
398
420
 
399
- this.webSocket
400
- .on('message', (event: any) => {
401
- that.logger.silly(`Received message: ${Utils.logStringify(event.data, 1)}`);
402
- that.handleWebSocketMessage(event);
421
+ this.webSocket = new WebSocket(`${this.wsprotocol}://${this.address}/rest/subscribe`, ['ISYSUB'], this.webSocketOptions);
422
+ this.lastActivity = new Date();
423
+ //this.webSocket.onmessage = (event) => {this.handleWebSocketMessage()
424
+ this.webSocket.on('open',() => {
425
+ this.logger.info('Websocket connection open');
426
+ resolve();
427
+ })
428
+ .on('message',(data,b)=> {
429
+ that.logger.silly(`Received message: ${Utils.logStringify(data, 1)}`);
430
+ that.handleWebSocketMessage({data: data});
403
431
  })
404
432
  .on('error', (err: any, response: any) => {
405
- that.logger.warn(`Websocket subscription error: ${Utils.logStringify(err, 1)}`);
433
+ that.logger.warn(`Websocket subscription error: ${err}`);
434
+ return reject(new ISYInitializationError('Websocket subscription error', 'websocket'));
406
435
  })
407
436
  .on('fail', (data: string, response: any) => {
408
437
  that.logger.warn(`Websocket subscription failure: ${data}`);
409
- throw new Error('Websocket subscription failure');
438
+ return reject(new Error('Websocket subscription failure'));
410
439
  })
411
440
  .on('abort', () => {
412
441
  that.logger.warn('Websocket subscription aborted.');
@@ -414,8 +443,11 @@ export class ISY extends EventEmitter implements Disposable {
414
443
  })
415
444
  .on('timeout', (ms: string) => {
416
445
  that.logger.warn(`Websocket subscription timed out after ${ms} milliseconds.`);
417
- throw new Error('Timeout contacting ISY');
446
+ return reject(new Error('Timeout contacting ISY'));
447
+ //throw new Error('Timeout contacting ISY');
418
448
  });
449
+ });
450
+ return p;
419
451
  } catch (e) {
420
452
  throw new ISYInitializationError(e, 'websocket');
421
453
  }
@@ -646,7 +678,7 @@ export class ISY extends EventEmitter implements Disposable {
646
678
  }
647
679
  }
648
680
 
649
- #finishInitialize(success: boolean) {
681
+ async #finishInitialize(success: boolean) {
650
682
  if (!this.nodesLoaded) {
651
683
  this.nodesLoaded = true;
652
684
  //initializeCompleted();
@@ -656,10 +688,11 @@ export class ISY extends EventEmitter implements Disposable {
656
688
  // }
657
689
  if (this.enableWebSocket) {
658
690
  this.guardianTimer = setInterval(this.#guardian.bind(this), 60000);
659
- this.initializeWebSocket();
691
+ return this.initializeWebSocket();
660
692
  }
661
693
  }
662
694
  }
695
+
663
696
  }
664
697
 
665
698
  async #guardian() {
@@ -11,10 +11,10 @@ import internal from 'stream';
11
11
  import type { Driver } from '../../Definitions/Global/Drivers.js';
12
12
  import { ISY } from '../../ISY.js';
13
13
  import type { ISYDevice } from '../../ISYDevice.js';
14
- import { DeviceToClusterMap, MappingRegistry, type ClusterMapping, type BehaviorMapping } from '../../Model/ClusterMap.js';
15
14
  import { server } from 'typescript';
16
15
  import type { ISYNode } from '../../ISYNode.js';
17
16
  import type { Family } from '../../Definitions/index.js';
17
+ import { MappingRegistry, type BehaviorMapping, type DeviceToClusterMap } from '../Mappings/MappingRegistry.js';
18
18
 
19
19
 
20
20
 
@@ -4,8 +4,9 @@ import '@project-chip/matter.js/device';
4
4
  import { Converter } from '../../Converters.js';
5
5
  import type { Constructor } from '../../Devices/Constructor.js';
6
6
  import type { DriversOf, ISYNode } from '../../ISYNode.js';
7
- import { BehaviorMapping } from '../../Model/ClusterMap.js';
7
+
8
8
  import { ISYBridgedDeviceBehavior } from './ISYBridgedDeviceBehavior.js';
9
+ import type { BehaviorMapping } from '../Mappings/MappingRegistry.js';
9
10
 
10
11
  // #region Type aliases (6)
11
12
 
@@ -8,7 +8,7 @@ import type { MaybePromise } from '@project-chip/matter.js/util';
8
8
  import { DriverType } from '../../../Definitions/Global/Drivers.js';
9
9
  import { InsteonDimmableDevice } from '../../../Devices/Insteon/InsteonDimmableDevice.js';
10
10
  import { InsteonRelayDevice } from '../../../Devices/Insteon/InsteonRelayDevice.js';
11
- import { MappingRegistry } from '../../../Model/ClusterMap.js';
11
+
12
12
  import { ClusterForBehavior, ISYClusterBehavior, type PropertyChange } from '../ISYClusterBehavior.js';
13
13
 
14
14
  import { Converter } from '../../../Converters.js';
@@ -53,6 +53,7 @@ export class ISYDimmableBehavior extends ISYClusterBehavior(DimmableLightRequire
53
53
 
54
54
  override setLevel(level: number): MaybePromise<void> {
55
55
  level = Converter.Matter.LevelFrom0To255.LightingLevel.from(level);
56
+
56
57
  if (level > 0) {
57
58
  return this.device.on(level);
58
59
  } else {
@@ -17,14 +17,16 @@ import { ISYBridgedDeviceBehavior } from '../Behaviors/ISYBridgedDeviceBehavior.
17
17
  import { ISYDimmableBehavior, ISYOnOffBehavior } from '../Behaviors/Insteon/ISYOnOffBehavior.js';
18
18
  import '../Mappings/Insteon.js';
19
19
  import type { ISYNode } from '../../ISYNode.js';
20
- import { MappingRegistry, type DeviceToClusterMap } from '../../Model/ClusterMap.js';
20
+
21
21
  import { Options } from '../../Definitions/ZWave/index.js';
22
22
  import { InsteonBaseDevice } from '../../Devices/Insteon/InsteonBaseDevice.js';
23
23
  import { DimmerLamp } from '../../Devices/Insteon/Generated/DimmerLamp.js';
24
24
  import { Family } from '../../Definitions/index.js';
25
25
  import { RelayLamp } from '../../Devices/Insteon/index.js';
26
26
  import type { DeviceTypeDefinition } from '@project-chip/matter.js/device';
27
+ import { MappingRegistry } from '../Mappings/MappingRegistry.js';
27
28
  import type { BridgedISYNodeInformationServer } from '../../Devices/EndpointFor.js';
29
+ import { BasicInformation } from '@project-chip/matter.js/cluster';
28
30
 
29
31
 
30
32
  // #region Interfaces (1)
@@ -226,7 +228,7 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
226
228
  if (deviceOptions?.exclude) {
227
229
  continue;
228
230
  }
229
- let serialNumber = `${device.address.replaceAll(' ', '_').replaceAll('.', '_')}`;
231
+ let uniqueId = `${device.address.replaceAll(' ', '_').replaceAll('.', '_')}`;
230
232
  if (device.enabled) {
231
233
  //const name = `OnOff ${isASocket ? "Socket" : "Light"} ${i}`;
232
234
 
@@ -257,7 +259,7 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
257
259
  logger.info(`Device ${device.label} (${device.address}) with NodeDefId = ${device.nodeDefId} mapped to ${deviceType.name}`);
258
260
  //@ts-ignore
259
261
  const endpoint = new Endpoint(baseBehavior, {
260
- id: serialNumber,
262
+ id: uniqueId,
261
263
  isyNode: {
262
264
  address: device.address
263
265
  },
@@ -274,10 +276,12 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
274
276
  softwareVersion: Number(device.version),
275
277
  softwareVersionString: `v.${device.version}`,
276
278
 
277
- serialNumber: serialNumber,
279
+ serialNumber: device.address,
278
280
  reachable: true,
279
- uniqueId: device.address
280
- }
281
+ uniqueId: uniqueId
282
+
283
+ },
284
+
281
285
  });
282
286
 
283
287
  await aggregator.add(endpoint);
@@ -1,13 +1,14 @@
1
1
 
2
2
  import { Family } from '../../Definitions/Global/Families.js';
3
3
  import * as Insteon from '../../Devices/Insteon/index.js';
4
- import { MappingRegistry, type EndpointMapping, type FamilyToClusterMap } from '../../Model/ClusterMap.js';
4
+
5
5
 
6
6
  //import InsteonMap from "./Insteon.json";
7
7
 
8
8
  import { OnOffLightDevice, DimmableLightDevice } from '@matter/node/devices';
9
+ import { add, MappingRegistry, type EndpointMapping, type FamilyToClusterMap } from './MappingRegistry.js';
9
10
 
10
- const map: FamilyToClusterMap<Family.Insteon> = {
11
+ export const map: FamilyToClusterMap<Family.Insteon> = {
11
12
  Family: Family.Insteon,
12
13
 
13
14
  RelayLamp: {
@@ -15,11 +16,10 @@ const map: FamilyToClusterMap<Family.Insteon> = {
15
16
  mapping: {
16
17
  OnOff: {
17
18
  attributes: {
18
- onOff: { driver: 'ST', converter: 'LevelFrom0To255.Boolean' }
19
+ onOff: { driver: 'ST', converter: 'Percent.Boolean' }
19
20
  },
20
21
  commands: { on: 'DON' }
21
22
  }
22
-
23
23
  }
24
24
  },
25
25
  RelayLampSwitch: {
@@ -27,12 +27,12 @@ const map: FamilyToClusterMap<Family.Insteon> = {
27
27
  mapping: {
28
28
  OnOff: {
29
29
  attributes: {
30
- onOff: { driver: 'ST', converter: 'LevelFrom0To255.Boolean' }
30
+ onOff: { driver: 'ST', converter: 'Percent.Boolean' }
31
31
  },
32
32
  commands: { on: 'DON' }
33
33
  }
34
34
  }
35
- ,},
35
+ },
36
36
  DimmerLamp: {
37
37
  deviceType: DimmableLightDevice,
38
38
  // @ts-ignore
@@ -40,16 +40,16 @@ const map: FamilyToClusterMap<Family.Insteon> = {
40
40
  // @ts-ignore
41
41
  OnOff: {
42
42
  attributes: {
43
- onOff: { driver: 'ST', converter: 'LevelFrom0To255.Boolean' }
43
+ onOff: { driver: 'ST', converter: 'Percent.Boolean' }
44
44
  },
45
45
  commands: { on: 'DON' }
46
46
  },
47
47
  LevelControl: {
48
48
  // @ts-ignore
49
49
  attributes: {
50
- currentLevel: { driver: 'ST', converter: 'LevelFrom0To255.LightingLevel' },
51
- startUpCurrentLevel: { driver: 'OL', converter: 'LevelFrom0To255.LightingLevel' },
52
- onLevel: { driver: 'OL', converter: 'LevelFrom0To255.LightingLevel' }
50
+ currentLevel: { driver: 'ST', converter: 'Percent.LightingLevel' },
51
+ startUpCurrentLevel: { driver: 'OL', converter: 'Percent.LightingLevel' },
52
+ onLevel: { driver: 'OL', converter: 'Percent.LightingLevel' }
53
53
  },
54
54
  commands: { setLevel: { command: 'DON' } }
55
55
  }
@@ -59,20 +59,19 @@ const map: FamilyToClusterMap<Family.Insteon> = {
59
59
  deviceType: DimmableLightDevice,
60
60
  // @ts-ignore
61
61
  mapping: {
62
-
63
62
  // @ts-ignore
64
63
  OnOff: {
65
64
  attributes: {
66
- onOff: { driver: 'ST', converter: 'LevelFrom0To255.Boolean' }
65
+ onOff: { driver: 'ST', converter: 'Percent.Boolean' }
67
66
  },
68
67
  commands: { on: 'DON' }
69
68
  },
70
69
  LevelControl: {
71
70
  // @ts-ignore
72
71
  attributes: {
73
- currentLevel: { driver: 'ST', converter: 'LevelFrom0To255.LightingLevel' },
74
- startUpCurrentLevel: { driver: 'OL', converter: 'LevelFrom0To255.LightingLevel' },
75
- onLevel: { driver: 'OL', converter: 'LevelFrom0To255.LightingLevel' }
72
+ currentLevel: { driver: 'ST', converter: 'Percent.LightingLevel' },
73
+ startUpCurrentLevel: { driver: 'OL', converter: 'Percent.LightingLevel' },
74
+ onLevel: { driver: 'OL', converter: 'Percent.LightingLevel' }
76
75
  },
77
76
  commands: { setLevel: { command: 'DON' } }
78
77
  }
@@ -80,5 +79,29 @@ const map: FamilyToClusterMap<Family.Insteon> = {
80
79
  }
81
80
  };
82
81
 
82
+ /*let newMap = add(map, Insteon.DimmerLamp.Node, {
83
+ deviceType: DimmableLightDevice,
84
+ // @ts-ignore
85
+ mapping: {
86
+ // @ts-ignore
87
+ OnOff: {
88
+ attributes: {
89
+ onOff: { driver: 'ST', converter: 'Percent.Boolean' ,
90
+ },
91
+ commands: { on: 'DON' }
92
+ },
93
+ //@ts-ignore
94
+ LevelControl: {
95
+ // @ts-ignore
96
+ attributes: {
97
+ currentLevel: { driver: 'ST', converter: 'Percent.LightingLevel' },
98
+ startUpCurrentLevel: { driver: 'OL', converter: 'Percent.LightingLevel' },
99
+ onLevel: { driver: 'OL', converter: 'Percent.LightingLevel' }
100
+ },
101
+ commands: { setLevel: { command: 'DON' } }
102
+ }
103
+ }
104
+ }});*/
105
+
83
106
 
84
107
  MappingRegistry.register(map);
@@ -1,20 +1,21 @@
1
1
  import * as Clusters from '@project-chip/matter.js/cluster';
2
2
 
3
- import type { Converter } from '../Converters.js';
4
- import { DriverType } from '../Definitions/Global/Drivers.js';
5
- import { Devices, Insteon } from '../Devices/index.js';
3
+ import type { Converter } from '../../Converters.js';
4
+ import { DriverType } from '../../Definitions/Global/Drivers.js';
5
+ import { Devices, Insteon } from '../../Devices/index.js';
6
6
 
7
7
  import { ClusterBehavior, MutableEndpoint, SupportedBehaviors } from '@matter/main';
8
8
  import type { OnOffLightDevice } from '@matter/main/devices';
9
9
  import { BridgedDeviceBasicInformationBehavior } from '@matter/node/behaviors';
10
10
  import type { DeviceTypeDefinition } from '@project-chip/matter.js/device';
11
- import { Family } from '../Definitions/index.js';
12
- import { NodeFactory } from '../Devices/NodeFactory.js';
13
- import { CommandsOf, DriversOf, ISYNode } from '../ISYNode.js';
14
- import { ISYBridgedDeviceBehavior } from '../Matter/Behaviors/ISYBridgedDeviceBehavior.js';
15
- import { ISYOnOffBehavior } from '../Matter/Behaviors/Insteon/ISYOnOffBehavior.js';
16
- import type { PickOfType, Remove } from '../Utils.js';
17
- import { ClusterType } from './ClusterType.js';
11
+ import { Family } from '../../Definitions/index.js';
12
+ import { NodeFactory } from '../../Devices/NodeFactory.js';
13
+ import { CommandsOf, DriversOf, ISYNode } from '../../ISYNode.js';
14
+ import { ISYBridgedDeviceBehavior } from '../Behaviors/ISYBridgedDeviceBehavior.js';
15
+ import { ISYOnOffBehavior } from '../Behaviors/Insteon/ISYOnOffBehavior.js';
16
+ import type { PathsWithLimit, PickOfType, Remove } from '../../Utils.js';
17
+ import { ClusterType } from '../../Model/ClusterType.js';
18
+ import type { Constructor } from '../../Devices/Constructor.js';
18
19
 
19
20
  // #region Type aliases (16)
20
21
 
@@ -117,9 +118,20 @@ export type EndpointMapping1<A extends MutableEndpoint, K> = {
117
118
  commands?: SBCommandMapping<A['behaviors'], K>;
118
119
  };
119
120
  //@ts-ignore
120
- export type FamilyToClusterMap<T extends Family.Insteon | Family.ZWave | Family.ZigBee> = { Family: T } & {
121
+
122
+ type SupportedFamily = Family.Insteon | Family.ZWave | Family.ZigBee;
123
+ export type FamilyToClusterMap<T extends SupportedFamily> = { Family: T } & {
121
124
  [Type in Extract<keyof Devices.Insteon, `${string}Node`> as Remove<Type, 'Node'>]?: DeviceToClusterMap<InstanceType<Devices.Insteon[Type]>, MutableEndpoint>;
122
125
  };
126
+
127
+
128
+ export function add<const F extends SupportedFamily, const T extends ISYNode<F>, const D extends MutableEndpoint> (familyToClusterMap: FamilyToClusterMap<F>, deviceClass: Constructor<T>, mapping: DeviceToClusterMap<T, D> )
129
+ {
130
+ const map = {};
131
+ map[deviceClass.name] = mapping;
132
+
133
+ return {...map,...familyToClusterMap};
134
+ }
123
135
  export type SBAttributeMapping<SB extends SupportedBehaviors, D> = {
124
136
  [K in keyof SB]: Partial<Record<any, DriversOf<D> | { driver: DriversOf<D>; converter?: string }>>;
125
137
  };
@@ -149,7 +161,7 @@ export class MappingRegistry {
149
161
 
150
162
  // #region Public Static Methods (3)
151
163
 
152
- public static getMapping<T extends ISYNode<any, any, any, any>>(device: T): DeviceToClusterMap<T, MutableEndpoint> {
164
+ public static getMapping<const T extends ISYNode>(device: T): DeviceToClusterMap<T, MutableEndpoint> {
153
165
  let m = this.cache[device.address];
154
166
  if (!m) {
155
167
  if (MappingRegistry.map.has(device.family)) {
@@ -180,7 +192,7 @@ export class MappingRegistry {
180
192
  return m;
181
193
  }
182
194
 
183
- public static getMappingForBehavior<T extends ISYNode<any, any, any, any>, B extends ClusterBehavior>(device: T, behavior: B): BehaviorMapping<B, T> {
195
+ public static getMappingForBehavior<T extends ISYNode<any, any, any, any>, const B extends ClusterBehavior>(device: T, behavior: B): BehaviorMapping<B, T> {
184
196
  //var m = MappingRegistry.getMapping(device);
185
197
 
186
198
  //return m[behavior.cluster.name];
@@ -189,7 +201,7 @@ export class MappingRegistry {
189
201
  }
190
202
  }
191
203
  //@ts-ignore
192
- public static register(map: Partial<FamilyToClusterMap<any>> | { [x in Paths<typeof Devices>]: DeviceToClusterMap<any, any> }) {
204
+ public static register<const T extends Family.Insteon | Family.ZWave | Family.ZigBee>(map: Partial<FamilyToClusterMap<T>> | { [x in PathsWithLimit<typeof Devices,1>]: DeviceToClusterMap<any, any> }) {
193
205
  if ('Family' in map) {
194
206
  let regMap: Map<string, DeviceToClusterMap<any, any>>;
195
207
  if (!MappingRegistry.map.has(map.Family)) {
@@ -136,6 +136,8 @@ function buildNodeClassDefinitions<T extends Family>(nodeDefs: NodeDef[], family
136
136
  return map;
137
137
  }
138
138
 
139
+ export type NCD = NodeClassDefinition<Family>;
140
+
139
141
  export class NodeClassDefinition<T extends Family> {
140
142
  // #region Properties (11)
141
143
 
@@ -370,15 +372,17 @@ export class NodeClassDefinition<T extends Family> {
370
372
  }
371
373
 
372
374
  export type DataTypeDefinition =
373
- | {
375
+ {
374
376
  uom: UnitOfMeasure;
375
377
  serverUom?: UnitOfMeasure;
376
378
  enum: false;
379
+ indexId?: string;
377
380
  min: number;
378
381
  max: number;
379
382
  step?: number;
380
383
  precision?: number;
381
- }
384
+ returnType?: string;
385
+ }
382
386
  | {
383
387
  uom: UnitOfMeasure;
384
388
  enum: true;
@@ -386,15 +390,15 @@ export type DataTypeDefinition =
386
390
  values: {
387
391
  [x: number]: string;
388
392
  };
393
+ returnType?: string;
389
394
  };
390
395
 
391
396
  export abstract class NodeMemberDefinition<TId extends string> {
392
397
  // #region Properties (7)
393
398
 
394
399
  public classDef: NodeClassDefinition<any>;
395
- public dataType: {
396
- [x in keyof typeof UnitOfMeasure]?: DataTypeDefinition;
397
- };
400
+ public dataType: DataTypeDefinition[];
401
+
398
402
  public editorId: string;
399
403
  public hidden: boolean;
400
404
  public id: TId;
@@ -409,7 +413,7 @@ export abstract class NodeMemberDefinition<TId extends string> {
409
413
  this.classDef = classDef;
410
414
  if (def) {
411
415
  this.editorId = def.editor;
412
- this.dataType = {};
416
+ this.dataType = [];
413
417
 
414
418
  var r = this.parseEditorId(def.editor);
415
419
  if (r) this.applyEditorDef({ id: def.editor, range: r });
@@ -430,12 +434,13 @@ export abstract class NodeMemberDefinition<TId extends string> {
430
434
 
431
435
  public applyEditorDef(e: EditorDef) {
432
436
  if (e.id === this.editorId) {
433
- var d = {};
437
+ var d = [];
434
438
  for (const rangeDef of toArray(e.range)) {
439
+ let dt = {} as DataTypeDefinition;
435
440
  if ('subset' in rangeDef) {
436
- d[rangeDef.uom]= { uom: rangeDef.uom, indexId: rangeDef.nls, ...this.#parseSubset(e) };
441
+ dt = { uom: rangeDef.uom, indexId: rangeDef.nls, ...this.#parseSubset(e) };
437
442
  } else {
438
- d[rangeDef.uom] = {
443
+ dt = {
439
444
  uom: rangeDef.uom,
440
445
  enum: false,
441
446
  min: rangeDef.min,
@@ -448,8 +453,9 @@ export abstract class NodeMemberDefinition<TId extends string> {
448
453
  }
449
454
  if(rangeDef.uom === UnitOfMeasure.Index)
450
455
  {
451
- d[rangeDef.uom].enum = true;
456
+ dt.enum = true;
452
457
  }
458
+ d.push(dt);
453
459
 
454
460
  }
455
461
  this.dataType = d;