isy-nodejs 1.0.2-alpha.6 → 1.0.3-alpha.2

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 +64 -34
  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 +65 -25
  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,16 @@ 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
+
184
+ this.webSocketOptions.socketPath = this.socketPath;
185
+ } else {
186
+ this.webSocketOptions.auth = `${this.credentials.username}:${this.credentials.password}`;
187
+ }
188
+
189
+
177
190
  //this.elkEnabled = config.elkEnabled ?? false;
178
191
 
179
192
  this.nodesLoaded = false;
@@ -355,30 +368,47 @@ export class ISY extends EventEmitter implements Disposable {
355
368
  try {
356
369
  await this.loadConfig();
357
370
  await this.loadNodes();
371
+ await this.refreshStatuses();
358
372
  await this.loadVariables(VariableType.Integer);
359
373
  await this.loadVariables(VariableType.State);
360
- await this.refreshStatuses();
361
374
  await this.#finishInitialize(true);
362
375
  return true;
363
376
  } catch (e) {
364
377
  if (e instanceof ISYInitializationError) {
378
+ if(e.step === 'variables')
379
+ {
380
+ this.logger.warn(`Error loading variables: ${e.message}`);
381
+ await this.#finishInitialize(true);
382
+ return true;
383
+ }
365
384
  this.logger.error(`Error initializing ISY during (${e.step}): ${e.message}`);
385
+ return false;
366
386
  } else {
367
387
  this.logger.error(`Error initializing ISY: ${e.message}`);
388
+ return false;
368
389
  }
369
390
  throw e;
370
391
  } finally {
371
392
  if (this.nodesLoaded !== true) {
372
- that.#finishInitialize(false);
393
+ await that.#finishInitialize(false);
373
394
  }
374
395
  }
375
396
  }
376
397
 
398
+ webSocketOptions: WebSocket.ClientOptions & ClientRequestArgs;
399
+
377
400
  public async initializeWebSocket() {
378
401
  try {
379
402
  const that = this;
380
- const auth = `Basic ${Buffer.from(`${this.credentials.username}:${this.credentials.password}`).toString('base64')}`;
381
- this.logger.info(`Opening webSocket: ${this.wsprotocol}://${this.address}/rest/subscribe`);
403
+
404
+ //const auth = `Basic ${Buffer.from(`${this.credentials.username}:${this.credentials.password}`).toString('base64')}`;
405
+ let address = `${this.wsprotocol}://${this.address}/rest/subscribe`
406
+ if(this.socketPath)
407
+ {
408
+ address = `ws+unix://${this.socketPath}/rest/subscribe`;
409
+ }
410
+ this.logger.info(`Opening webSocket: ${address}`);
411
+ this.logger.info('Using the following websocket options: ' + JSON.stringify(this.webSocketOptions));
382
412
  if (this.webSocket) {
383
413
  try {
384
414
  this.webSocket.close();
@@ -386,27 +416,33 @@ export class ISY extends EventEmitter implements Disposable {
386
416
  this.logger.warn(`Error closing existing websocket: ${e.message}`);
387
417
  }
388
418
  }
389
- this.webSocket = new WebSocket.Client(`${this.wsprotocol}://${this.address}/rest/subscribe`, ['ISYSUB'], {
390
- headers: {
419
+
420
+ /*headers: {
391
421
  Origin: 'com.universal-devices.websockets.isy',
392
- Authorization: auth
422
+ auth
393
423
  },
394
- ping: 10
395
- });
396
424
 
397
- this.lastActivity = new Date();
425
+ ping: 10*/
426
+ let p = new Promise<void>((resolve, reject) => {
398
427
 
399
- this.webSocket
400
- .on('message', (event: any) => {
401
- that.logger.silly(`Received message: ${Utils.logStringify(event.data, 1)}`);
402
- that.handleWebSocketMessage(event);
428
+ this.webSocket = new WebSocket(`${address}`, ['ISYSUB'], this.webSocketOptions);
429
+ this.lastActivity = new Date();
430
+ //this.webSocket.onmessage = (event) => {this.handleWebSocketMessage()
431
+ this.webSocket.on('open',() => {
432
+ this.logger.info('Websocket connection open');
433
+ resolve();
434
+ })
435
+ .on('message',(data,b)=> {
436
+ that.logger.silly(`Received message: ${Utils.logStringify(data, 1)}`);
437
+ that.handleWebSocketMessage({data: data});
403
438
  })
404
439
  .on('error', (err: any, response: any) => {
405
- that.logger.warn(`Websocket subscription error: ${Utils.logStringify(err, 1)}`);
440
+ that.logger.warn(`Websocket subscription error: ${err}`);
441
+ return reject(new ISYInitializationError('Websocket subscription error', 'websocket'));
406
442
  })
407
443
  .on('fail', (data: string, response: any) => {
408
444
  that.logger.warn(`Websocket subscription failure: ${data}`);
409
- throw new Error('Websocket subscription failure');
445
+ return reject(new Error('Websocket subscription failure'));
410
446
  })
411
447
  .on('abort', () => {
412
448
  that.logger.warn('Websocket subscription aborted.');
@@ -414,8 +450,11 @@ export class ISY extends EventEmitter implements Disposable {
414
450
  })
415
451
  .on('timeout', (ms: string) => {
416
452
  that.logger.warn(`Websocket subscription timed out after ${ms} milliseconds.`);
417
- throw new Error('Timeout contacting ISY');
453
+ return reject(new Error('Timeout contacting ISY'));
454
+ //throw new Error('Timeout contacting ISY');
418
455
  });
456
+ });
457
+ return p;
419
458
  } catch (e) {
420
459
  throw new ISYInitializationError(e, 'websocket');
421
460
  }
@@ -646,7 +685,7 @@ export class ISY extends EventEmitter implements Disposable {
646
685
  }
647
686
  }
648
687
 
649
- #finishInitialize(success: boolean) {
688
+ async #finishInitialize(success: boolean) {
650
689
  if (!this.nodesLoaded) {
651
690
  this.nodesLoaded = true;
652
691
  //initializeCompleted();
@@ -656,10 +695,11 @@ export class ISY extends EventEmitter implements Disposable {
656
695
  // }
657
696
  if (this.enableWebSocket) {
658
697
  this.guardianTimer = setInterval(this.#guardian.bind(this), 60000);
659
- this.initializeWebSocket();
698
+ return this.initializeWebSocket();
660
699
  }
661
700
  }
662
701
  }
702
+
663
703
  }
664
704
 
665
705
  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)) {