isy-nodejs 1.0.6-alpha.2 → 1.0.8-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 (445) hide show
  1. package/dist/esm/CodeGeneration/CodeFactory.js +12 -6
  2. package/dist/esm/CodeGeneration/CodeFactory.js.map +1 -1
  3. package/dist/esm/CodeGeneration/NodeClassFactory.js +16 -7
  4. package/dist/esm/CodeGeneration/NodeClassFactory.js.map +1 -1
  5. package/dist/esm/Definitions/Global/Commands.js +6 -7
  6. package/dist/esm/Definitions/Global/Commands.js.map +1 -1
  7. package/dist/esm/Definitions/Global/Drivers.js +36 -23
  8. package/dist/esm/Definitions/Global/Drivers.js.map +1 -1
  9. package/dist/esm/Definitions/Insteon/generated/Boolean.js +10 -0
  10. package/dist/esm/Definitions/Insteon/generated/Boolean.js.map +1 -1
  11. package/dist/esm/Definitions/Insteon/generated/Error.js +10 -0
  12. package/dist/esm/Definitions/Insteon/generated/Error.js.map +1 -1
  13. package/dist/esm/Definitions/Insteon/generated/Lock.js +26 -0
  14. package/dist/esm/Definitions/Insteon/generated/Lock.js.map +1 -1
  15. package/dist/esm/Definitions/Insteon/generated/OnLevelRelay.js +10 -0
  16. package/dist/esm/Definitions/Insteon/generated/OnLevelRelay.js.map +1 -1
  17. package/{src/Devices/ISYMultiNodeDevice.ts → dist/esm/Devices/CompositeDevice.js} +108 -9
  18. package/dist/esm/Devices/CompositeDevice.js.map +1 -0
  19. package/dist/esm/Devices/DeviceFactory.js +1 -1
  20. package/dist/esm/Devices/DeviceFactory.js.map +1 -1
  21. package/dist/esm/Devices/ISYDeviceNode.js +1 -0
  22. package/dist/esm/Devices/ISYDeviceNode.js.map +1 -1
  23. package/dist/esm/Devices/ISYMultiNodeDevice.js +25 -1
  24. package/dist/esm/Devices/ISYMultiNodeDevice.js.map +1 -1
  25. package/dist/esm/Devices/Insteon/Generated/AlertModuleArmed.js +6 -6
  26. package/dist/esm/Devices/Insteon/Generated/AlertModuleArmed.js.map +1 -1
  27. package/dist/esm/Devices/Insteon/Generated/AlertModuleSiren.js +6 -6
  28. package/dist/esm/Devices/Insteon/Generated/AlertModuleSiren.js.map +1 -1
  29. package/dist/esm/Devices/Insteon/Generated/BallastRelayLampSwitch.js +6 -6
  30. package/dist/esm/Devices/Insteon/Generated/BallastRelayLampSwitch.js.map +1 -1
  31. package/dist/esm/Devices/Insteon/Generated/BinaryAlarm.js +6 -6
  32. package/dist/esm/Devices/Insteon/Generated/BinaryAlarm.js.map +1 -1
  33. package/dist/esm/Devices/Insteon/Generated/BinaryControl.js +6 -6
  34. package/dist/esm/Devices/Insteon/Generated/BinaryControl.js.map +1 -1
  35. package/dist/esm/Devices/Insteon/Generated/DimmerLamp.js +8 -8
  36. package/dist/esm/Devices/Insteon/Generated/DimmerLamp.js.map +1 -1
  37. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitch.js +8 -8
  38. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitch.js.map +1 -1
  39. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitchLed.js +8 -8
  40. package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitchLed.js.map +1 -1
  41. package/dist/esm/Devices/Insteon/Generated/DimmerMotorSwitch.js +8 -8
  42. package/dist/esm/Devices/Insteon/Generated/DimmerMotorSwitch.js.map +1 -1
  43. package/dist/esm/Devices/Insteon/Generated/DimmerSwitch.js +5 -5
  44. package/dist/esm/Devices/Insteon/Generated/DimmerSwitch.js.map +1 -1
  45. package/dist/esm/Devices/Insteon/Generated/DoorLock.js +6 -6
  46. package/dist/esm/Devices/Insteon/Generated/DoorLock.js.map +1 -1
  47. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Input.js +6 -6
  48. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Input.js.map +1 -1
  49. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Output.js +6 -6
  50. package/dist/esm/Devices/Insteon/Generated/Ezio2x4Output.js.map +1 -1
  51. package/dist/esm/Devices/Insteon/Generated/EzrainInput.js +6 -6
  52. package/dist/esm/Devices/Insteon/Generated/EzrainInput.js.map +1 -1
  53. package/dist/esm/Devices/Insteon/Generated/EzrainOutput.js +6 -6
  54. package/dist/esm/Devices/Insteon/Generated/EzrainOutput.js.map +1 -1
  55. package/dist/esm/Devices/Insteon/Generated/FanLincMotor.js +6 -6
  56. package/dist/esm/Devices/Insteon/Generated/FanLincMotor.js.map +1 -1
  57. package/dist/esm/Devices/Insteon/Generated/I3KeypadFlags.js +14 -14
  58. package/dist/esm/Devices/Insteon/Generated/I3KeypadFlags.js.map +1 -1
  59. package/dist/esm/Devices/Insteon/Generated/I3PaddleFlags.js +12 -12
  60. package/dist/esm/Devices/Insteon/Generated/I3PaddleFlags.js.map +1 -1
  61. package/dist/esm/Devices/Insteon/Generated/ImeterSolo.js +7 -7
  62. package/dist/esm/Devices/Insteon/Generated/ImeterSolo.js.map +1 -1
  63. package/dist/esm/Devices/Insteon/Generated/IrLincTx.js +5 -5
  64. package/dist/esm/Devices/Insteon/Generated/IrLincTx.js.map +1 -1
  65. package/dist/esm/Devices/Insteon/Generated/KeypadButton.js +6 -6
  66. package/dist/esm/Devices/Insteon/Generated/KeypadButton.js.map +1 -1
  67. package/dist/esm/Devices/Insteon/Generated/KeypadDimmer.js +8 -8
  68. package/dist/esm/Devices/Insteon/Generated/KeypadDimmer.js.map +1 -1
  69. package/dist/esm/Devices/Insteon/Generated/KeypadRelay.js +6 -6
  70. package/dist/esm/Devices/Insteon/Generated/KeypadRelay.js.map +1 -1
  71. package/dist/esm/Devices/Insteon/Generated/OnOffControl.js +6 -6
  72. package/dist/esm/Devices/Insteon/Generated/OnOffControl.js.map +1 -1
  73. package/dist/esm/Devices/Insteon/Generated/Pir2844.js +10 -10
  74. package/dist/esm/Devices/Insteon/Generated/Pir2844.js.map +1 -1
  75. package/dist/esm/Devices/Insteon/Generated/Pir2844OnOff.js +6 -6
  76. package/dist/esm/Devices/Insteon/Generated/Pir2844OnOff.js.map +1 -1
  77. package/dist/esm/Devices/Insteon/Generated/Pir2844c.js +10 -10
  78. package/dist/esm/Devices/Insteon/Generated/Pir2844c.js.map +1 -1
  79. package/dist/esm/Devices/Insteon/Generated/RelayLamp.js +6 -6
  80. package/dist/esm/Devices/Insteon/Generated/RelayLamp.js.map +1 -1
  81. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitch.js +6 -6
  82. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitch.js.map +1 -1
  83. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitchLed.js +6 -6
  84. package/dist/esm/Devices/Insteon/Generated/RelayLampSwitchLed.js.map +1 -1
  85. package/dist/esm/Devices/Insteon/Generated/RelaySwitch.js +5 -5
  86. package/dist/esm/Devices/Insteon/Generated/RelaySwitch.js.map +1 -1
  87. package/dist/esm/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.js +5 -5
  88. package/dist/esm/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.js.map +1 -1
  89. package/dist/esm/Devices/Insteon/Generated/RemoteLinc2.js +6 -6
  90. package/dist/esm/Devices/Insteon/Generated/RemoteLinc2.js.map +1 -1
  91. package/dist/esm/Devices/Insteon/Generated/Siren.js +9 -9
  92. package/dist/esm/Devices/Insteon/Generated/Siren.js.map +1 -1
  93. package/dist/esm/Devices/Insteon/Generated/SirenAlert.js +5 -5
  94. package/dist/esm/Devices/Insteon/Generated/SirenAlert.js.map +1 -1
  95. package/dist/esm/Devices/Insteon/Generated/TempLinc.js +12 -12
  96. package/dist/esm/Devices/Insteon/Generated/TempLinc.js.map +1 -1
  97. package/dist/esm/Devices/Insteon/Generated/Thermostat.js +12 -12
  98. package/dist/esm/Devices/Insteon/Generated/Thermostat.js.map +1 -1
  99. package/dist/esm/Devices/Insteon/Generated/X10.js +6 -6
  100. package/dist/esm/Devices/Insteon/Generated/X10.js.map +1 -1
  101. package/dist/esm/Devices/Insteon/InsteonDeviceFactory.js +20 -11
  102. package/dist/esm/Devices/Insteon/InsteonDeviceFactory.js.map +1 -1
  103. package/dist/esm/Devices/Insteon/InsteonDimmableDevice.js +2 -4
  104. package/dist/esm/Devices/Insteon/InsteonDimmableDevice.js.map +1 -1
  105. package/dist/esm/Devices/Insteon/InsteonDimmerOutletDevice.js +2 -2
  106. package/dist/esm/Devices/Insteon/InsteonDimmerOutletDevice.js.map +1 -1
  107. package/dist/esm/Devices/Insteon/InsteonDoorWindowSensorDevice.js +20 -7
  108. package/dist/esm/Devices/Insteon/InsteonDoorWindowSensorDevice.js.map +1 -1
  109. package/dist/esm/Devices/Insteon/InsteonFanDevice.js +17 -34
  110. package/dist/esm/Devices/Insteon/InsteonFanDevice.js.map +1 -1
  111. package/dist/esm/Devices/Insteon/InsteonOnOffOutletDevice.js +3 -13
  112. package/dist/esm/Devices/Insteon/InsteonOnOffOutletDevice.js.map +1 -1
  113. package/dist/esm/Devices/Insteon/InsteonRelayDevice.js +0 -16
  114. package/dist/esm/Devices/Insteon/InsteonRelayDevice.js.map +1 -1
  115. package/dist/esm/Devices/Insteon/index.js +10 -11
  116. package/dist/esm/Devices/Insteon/index.js.map +1 -1
  117. package/dist/esm/Devices/Lutron/Generated/LoadShed.js +6 -6
  118. package/dist/esm/Devices/Lutron/Generated/LoadShed.js.map +1 -1
  119. package/dist/esm/Devices/NodeFactory.js.map +1 -1
  120. package/dist/esm/Devices/UDI/Generated/Channel.js +7 -7
  121. package/dist/esm/Devices/UDI/Generated/Channel.js.map +1 -1
  122. package/dist/esm/Devices/UDI/Generated/Em3MainChannel.js +10 -10
  123. package/dist/esm/Devices/UDI/Generated/Em3MainChannel.js.map +1 -1
  124. package/dist/esm/Devices/UDI/Generated/Main.js +7 -7
  125. package/dist/esm/Devices/UDI/Generated/Main.js.map +1 -1
  126. package/dist/esm/Devices/UDI/Generated/PulseCounter.js +8 -8
  127. package/dist/esm/Devices/UDI/Generated/PulseCounter.js.map +1 -1
  128. package/dist/esm/Devices/UDI/Generated/Relay.js +6 -6
  129. package/dist/esm/Devices/UDI/Generated/Relay.js.map +1 -1
  130. package/dist/esm/Devices/UDI/Generated/TemperatureSensor.js +6 -6
  131. package/dist/esm/Devices/UDI/Generated/TemperatureSensor.js.map +1 -1
  132. package/dist/esm/Devices/ZWave/Generated/ColorSwitch.js +9 -9
  133. package/dist/esm/Devices/ZWave/Generated/ColorSwitch.js.map +1 -1
  134. package/dist/esm/Devices/ZWave/Generated/DimmerSwitch.js +6 -6
  135. package/dist/esm/Devices/ZWave/Generated/DimmerSwitch.js.map +1 -1
  136. package/dist/esm/Devices/ZigBee/ZWaveBaseDevice.js +9 -0
  137. package/dist/esm/Devices/ZigBee/ZWaveBaseDevice.js.map +1 -0
  138. package/dist/esm/Devices/ZigBee/ZigBeeBase.js +9 -0
  139. package/dist/esm/Devices/ZigBee/ZigBeeBase.js.map +1 -0
  140. package/dist/esm/Devices/ZigBee/index.js +3 -0
  141. package/dist/esm/Devices/ZigBee/index.js.map +1 -0
  142. package/dist/esm/ISY.js +19 -3
  143. package/dist/esm/ISY.js.map +1 -1
  144. package/dist/esm/ISYNode.js +7 -6
  145. package/dist/esm/ISYNode.js.map +1 -1
  146. package/dist/esm/Matter/Behaviors/BehaviorRegistry.js +37 -5
  147. package/dist/esm/Matter/Behaviors/BehaviorRegistry.js.map +1 -1
  148. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js +10 -3
  149. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  150. package/dist/esm/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.js +24 -0
  151. package/dist/esm/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.js.map +1 -0
  152. package/dist/esm/Matter/Behaviors/Insteon/ISYDimmableBehavior.js +23 -0
  153. package/dist/esm/Matter/Behaviors/Insteon/ISYDimmableBehavior.js.map +1 -0
  154. package/dist/esm/Matter/Behaviors/Insteon/ISYOnOffBehavior.js +4 -4
  155. package/dist/esm/Matter/Behaviors/Insteon/ISYOnOffBehavior.js.map +1 -1
  156. package/dist/esm/Matter/Behaviors/Insteon/IdentifyBehavior.js +23 -0
  157. package/dist/esm/Matter/Behaviors/Insteon/IdentifyBehavior.js.map +1 -0
  158. package/dist/esm/Matter/Behaviors/Insteon/RelayOnOffBehavior.js +24 -0
  159. package/dist/esm/Matter/Behaviors/Insteon/RelayOnOffBehavior.js.map +1 -0
  160. package/dist/esm/Matter/Behaviors/Insteon/index.js +4 -0
  161. package/dist/esm/Matter/Behaviors/Insteon/index.js.map +1 -0
  162. package/dist/esm/Matter/Bridge/Server.js +22 -11
  163. package/dist/esm/Matter/Bridge/Server.js.map +1 -1
  164. package/dist/esm/Matter/Mappings/Insteon.js.map +1 -1
  165. package/dist/esm/Matter/Mappings/MappingRegistry.js +5 -4
  166. package/dist/esm/Matter/Mappings/MappingRegistry.js.map +1 -1
  167. package/dist/esm/Registry.js +77 -0
  168. package/dist/esm/Registry.js.map +1 -0
  169. package/dist/esm/Utils.js +12 -0
  170. package/dist/esm/Utils.js.map +1 -1
  171. package/dist/esm/types/CodeGeneration/CodeFactory.d.ts +6 -5
  172. package/dist/esm/types/CodeGeneration/CodeFactory.d.ts.map +1 -1
  173. package/dist/esm/types/CodeGeneration/NodeClassFactory.d.ts.map +1 -1
  174. package/dist/esm/types/Definitions/Global/Commands.d.ts +4 -4
  175. package/dist/esm/types/Definitions/Global/Commands.d.ts.map +1 -1
  176. package/dist/esm/types/Definitions/Global/Drivers.d.ts +11 -8
  177. package/dist/esm/types/Definitions/Global/Drivers.d.ts.map +1 -1
  178. package/dist/esm/types/Definitions/Global/Events.d.ts +3 -3
  179. package/dist/esm/types/Definitions/Global/Events.d.ts.map +1 -1
  180. package/dist/esm/types/Definitions/Insteon/generated/Boolean.d.ts +4 -0
  181. package/dist/esm/types/Definitions/Insteon/generated/Boolean.d.ts.map +1 -1
  182. package/dist/esm/types/Definitions/Insteon/generated/Error.d.ts +4 -0
  183. package/dist/esm/types/Definitions/Insteon/generated/Error.d.ts.map +1 -1
  184. package/dist/esm/types/Definitions/Insteon/generated/Lock.d.ts +6 -0
  185. package/dist/esm/types/Definitions/Insteon/generated/Lock.d.ts.map +1 -1
  186. package/dist/esm/types/Definitions/Insteon/generated/OnLevelRelay.d.ts +4 -0
  187. package/dist/esm/types/Definitions/Insteon/generated/OnLevelRelay.d.ts.map +1 -1
  188. package/dist/esm/types/Devices/CompositeDevice.d.ts +64 -0
  189. package/dist/esm/types/Devices/CompositeDevice.d.ts.map +1 -0
  190. package/dist/esm/types/Devices/EndpointFor.d.ts +3 -2
  191. package/dist/esm/types/Devices/EndpointFor.d.ts.map +1 -1
  192. package/dist/esm/types/Devices/ISYDeviceNode.d.ts +4 -1
  193. package/dist/esm/types/Devices/ISYDeviceNode.d.ts.map +1 -1
  194. package/dist/esm/types/Devices/ISYMultiNodeDevice.d.ts +25 -1
  195. package/dist/esm/types/Devices/ISYMultiNodeDevice.d.ts.map +1 -1
  196. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleArmed.d.ts +2 -3
  197. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleArmed.d.ts.map +1 -1
  198. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleSiren.d.ts +2 -3
  199. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleSiren.d.ts.map +1 -1
  200. package/dist/esm/types/Devices/Insteon/Generated/BallastRelayLampSwitch.d.ts +2 -3
  201. package/dist/esm/types/Devices/Insteon/Generated/BallastRelayLampSwitch.d.ts.map +1 -1
  202. package/dist/esm/types/Devices/Insteon/Generated/BinaryAlarm.d.ts +2 -3
  203. package/dist/esm/types/Devices/Insteon/Generated/BinaryAlarm.d.ts.map +1 -1
  204. package/dist/esm/types/Devices/Insteon/Generated/BinaryControl.d.ts +2 -3
  205. package/dist/esm/types/Devices/Insteon/Generated/BinaryControl.d.ts.map +1 -1
  206. package/dist/esm/types/Devices/Insteon/Generated/DimmerLamp.d.ts +2 -3
  207. package/dist/esm/types/Devices/Insteon/Generated/DimmerLamp.d.ts.map +1 -1
  208. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitch.d.ts +2 -3
  209. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitch.d.ts.map +1 -1
  210. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitchLed.d.ts +2 -3
  211. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitchLed.d.ts.map +1 -1
  212. package/dist/esm/types/Devices/Insteon/Generated/DimmerMotorSwitch.d.ts +2 -3
  213. package/dist/esm/types/Devices/Insteon/Generated/DimmerMotorSwitch.d.ts.map +1 -1
  214. package/dist/esm/types/Devices/Insteon/Generated/DimmerSwitch.d.ts +2 -3
  215. package/dist/esm/types/Devices/Insteon/Generated/DimmerSwitch.d.ts.map +1 -1
  216. package/dist/esm/types/Devices/Insteon/Generated/DoorLock.d.ts +2 -3
  217. package/dist/esm/types/Devices/Insteon/Generated/DoorLock.d.ts.map +1 -1
  218. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Input.d.ts +2 -3
  219. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Input.d.ts.map +1 -1
  220. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Output.d.ts +2 -3
  221. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Output.d.ts.map +1 -1
  222. package/dist/esm/types/Devices/Insteon/Generated/EzrainInput.d.ts +2 -3
  223. package/dist/esm/types/Devices/Insteon/Generated/EzrainInput.d.ts.map +1 -1
  224. package/dist/esm/types/Devices/Insteon/Generated/EzrainOutput.d.ts +2 -3
  225. package/dist/esm/types/Devices/Insteon/Generated/EzrainOutput.d.ts.map +1 -1
  226. package/dist/esm/types/Devices/Insteon/Generated/FanLincMotor.d.ts +2 -3
  227. package/dist/esm/types/Devices/Insteon/Generated/FanLincMotor.d.ts.map +1 -1
  228. package/dist/esm/types/Devices/Insteon/Generated/I3KeypadFlags.d.ts +2 -3
  229. package/dist/esm/types/Devices/Insteon/Generated/I3KeypadFlags.d.ts.map +1 -1
  230. package/dist/esm/types/Devices/Insteon/Generated/I3PaddleFlags.d.ts +2 -3
  231. package/dist/esm/types/Devices/Insteon/Generated/I3PaddleFlags.d.ts.map +1 -1
  232. package/dist/esm/types/Devices/Insteon/Generated/ImeterSolo.d.ts +2 -3
  233. package/dist/esm/types/Devices/Insteon/Generated/ImeterSolo.d.ts.map +1 -1
  234. package/dist/esm/types/Devices/Insteon/Generated/IrLincTx.d.ts +2 -3
  235. package/dist/esm/types/Devices/Insteon/Generated/IrLincTx.d.ts.map +1 -1
  236. package/dist/esm/types/Devices/Insteon/Generated/KeypadButton.d.ts +2 -3
  237. package/dist/esm/types/Devices/Insteon/Generated/KeypadButton.d.ts.map +1 -1
  238. package/dist/esm/types/Devices/Insteon/Generated/KeypadDimmer.d.ts +2 -3
  239. package/dist/esm/types/Devices/Insteon/Generated/KeypadDimmer.d.ts.map +1 -1
  240. package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts +2 -3
  241. package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts.map +1 -1
  242. package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts +2 -3
  243. package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts.map +1 -1
  244. package/dist/esm/types/Devices/Insteon/Generated/Pir2844.d.ts +2 -3
  245. package/dist/esm/types/Devices/Insteon/Generated/Pir2844.d.ts.map +1 -1
  246. package/dist/esm/types/Devices/Insteon/Generated/Pir2844OnOff.d.ts +2 -3
  247. package/dist/esm/types/Devices/Insteon/Generated/Pir2844OnOff.d.ts.map +1 -1
  248. package/dist/esm/types/Devices/Insteon/Generated/Pir2844c.d.ts +2 -3
  249. package/dist/esm/types/Devices/Insteon/Generated/Pir2844c.d.ts.map +1 -1
  250. package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts +2 -3
  251. package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts.map +1 -1
  252. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts +2 -3
  253. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts.map +1 -1
  254. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts +2 -3
  255. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts.map +1 -1
  256. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitch.d.ts +2 -3
  257. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitch.d.ts.map +1 -1
  258. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.d.ts +2 -3
  259. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.d.ts.map +1 -1
  260. package/dist/esm/types/Devices/Insteon/Generated/RemoteLinc2.d.ts +2 -3
  261. package/dist/esm/types/Devices/Insteon/Generated/RemoteLinc2.d.ts.map +1 -1
  262. package/dist/esm/types/Devices/Insteon/Generated/Siren.d.ts +2 -3
  263. package/dist/esm/types/Devices/Insteon/Generated/Siren.d.ts.map +1 -1
  264. package/dist/esm/types/Devices/Insteon/Generated/SirenAlert.d.ts +2 -3
  265. package/dist/esm/types/Devices/Insteon/Generated/SirenAlert.d.ts.map +1 -1
  266. package/dist/esm/types/Devices/Insteon/Generated/TempLinc.d.ts +2 -3
  267. package/dist/esm/types/Devices/Insteon/Generated/TempLinc.d.ts.map +1 -1
  268. package/dist/esm/types/Devices/Insteon/Generated/Thermostat.d.ts +2 -3
  269. package/dist/esm/types/Devices/Insteon/Generated/Thermostat.d.ts.map +1 -1
  270. package/dist/esm/types/Devices/Insteon/Generated/X10.d.ts +2 -3
  271. package/dist/esm/types/Devices/Insteon/Generated/X10.d.ts.map +1 -1
  272. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts +8 -6
  273. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts.map +1 -1
  274. package/dist/esm/types/Devices/Insteon/InsteonDeviceFactory.d.ts +7 -2
  275. package/dist/esm/types/Devices/Insteon/InsteonDeviceFactory.d.ts.map +1 -1
  276. package/dist/esm/types/Devices/Insteon/InsteonDimmableDevice.d.ts +2 -2
  277. package/dist/esm/types/Devices/Insteon/InsteonDimmableDevice.d.ts.map +1 -1
  278. package/dist/esm/types/Devices/Insteon/InsteonDimmerOutletDevice.d.ts +2 -2
  279. package/dist/esm/types/Devices/Insteon/InsteonDimmerOutletDevice.d.ts.map +1 -1
  280. package/dist/esm/types/Devices/Insteon/InsteonDoorWindowSensorDevice.d.ts +17 -5
  281. package/dist/esm/types/Devices/Insteon/InsteonDoorWindowSensorDevice.d.ts.map +1 -1
  282. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts +18 -16
  283. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts.map +1 -1
  284. package/dist/esm/types/Devices/Insteon/InsteonLeakSensorDevice.d.ts +1 -1
  285. package/dist/esm/types/Devices/Insteon/InsteonLeakSensorDevice.d.ts.map +1 -1
  286. package/dist/esm/types/Devices/Insteon/InsteonOnOffOutletDevice.d.ts +8 -7
  287. package/dist/esm/types/Devices/Insteon/InsteonOnOffOutletDevice.d.ts.map +1 -1
  288. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts +0 -1
  289. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts.map +1 -1
  290. package/dist/esm/types/Devices/Insteon/index.d.ts +10 -11
  291. package/dist/esm/types/Devices/Insteon/index.d.ts.map +1 -1
  292. package/dist/esm/types/Devices/Lutron/Generated/LoadShed.d.ts +2 -3
  293. package/dist/esm/types/Devices/Lutron/Generated/LoadShed.d.ts.map +1 -1
  294. package/dist/esm/types/Devices/NodeFactory.d.ts +1 -1
  295. package/dist/esm/types/Devices/NodeFactory.d.ts.map +1 -1
  296. package/dist/esm/types/Devices/UDI/Generated/Channel.d.ts +2 -3
  297. package/dist/esm/types/Devices/UDI/Generated/Channel.d.ts.map +1 -1
  298. package/dist/esm/types/Devices/UDI/Generated/Em3MainChannel.d.ts +2 -3
  299. package/dist/esm/types/Devices/UDI/Generated/Em3MainChannel.d.ts.map +1 -1
  300. package/dist/esm/types/Devices/UDI/Generated/Main.d.ts +2 -3
  301. package/dist/esm/types/Devices/UDI/Generated/Main.d.ts.map +1 -1
  302. package/dist/esm/types/Devices/UDI/Generated/PulseCounter.d.ts +2 -3
  303. package/dist/esm/types/Devices/UDI/Generated/PulseCounter.d.ts.map +1 -1
  304. package/dist/esm/types/Devices/UDI/Generated/Relay.d.ts +2 -3
  305. package/dist/esm/types/Devices/UDI/Generated/Relay.d.ts.map +1 -1
  306. package/dist/esm/types/Devices/UDI/Generated/TemperatureSensor.d.ts +2 -3
  307. package/dist/esm/types/Devices/UDI/Generated/TemperatureSensor.d.ts.map +1 -1
  308. package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts +2 -3
  309. package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts.map +1 -1
  310. package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts +2 -3
  311. package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts.map +1 -1
  312. package/dist/esm/types/Devices/ZigBee/ZWaveBaseDevice.d.ts +10 -0
  313. package/dist/esm/types/Devices/ZigBee/ZWaveBaseDevice.d.ts.map +1 -0
  314. package/dist/esm/types/Devices/ZigBee/ZigBeeBase.d.ts +10 -0
  315. package/dist/esm/types/Devices/ZigBee/ZigBeeBase.d.ts.map +1 -0
  316. package/dist/esm/types/Devices/ZigBee/index.d.ts +2 -0
  317. package/dist/esm/types/Devices/ZigBee/index.d.ts.map +1 -0
  318. package/dist/esm/types/ISY.d.ts.map +1 -1
  319. package/dist/esm/types/ISYDevice.d.ts +3 -5
  320. package/dist/esm/types/ISYDevice.d.ts.map +1 -1
  321. package/dist/esm/types/ISYNode.d.ts +33 -28
  322. package/dist/esm/types/ISYNode.d.ts.map +1 -1
  323. package/dist/esm/types/Matter/Behaviors/BehaviorRegistry.d.ts +9 -5
  324. package/dist/esm/types/Matter/Behaviors/BehaviorRegistry.d.ts.map +1 -1
  325. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +1 -1
  326. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
  327. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts +8 -5
  328. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  329. package/dist/esm/types/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.d.ts +321 -0
  330. package/dist/esm/types/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.d.ts.map +1 -0
  331. package/dist/esm/types/Matter/Behaviors/Insteon/ISYDimmableBehavior.d.ts +42 -0
  332. package/dist/esm/types/Matter/Behaviors/Insteon/ISYDimmableBehavior.d.ts.map +1 -0
  333. package/dist/esm/types/Matter/Behaviors/Insteon/ISYOnOffBehavior.d.ts +4 -4
  334. package/dist/esm/types/Matter/Behaviors/Insteon/ISYOnOffBehavior.d.ts.map +1 -1
  335. package/dist/esm/types/Matter/Behaviors/Insteon/IdentifyBehavior.d.ts +24 -0
  336. package/dist/esm/types/Matter/Behaviors/Insteon/IdentifyBehavior.d.ts.map +1 -0
  337. package/dist/esm/types/Matter/Behaviors/Insteon/RelayOnOffBehavior.d.ts +241 -0
  338. package/dist/esm/types/Matter/Behaviors/Insteon/RelayOnOffBehavior.d.ts.map +1 -0
  339. package/dist/esm/types/Matter/Behaviors/Insteon/index.d.ts +4 -0
  340. package/dist/esm/types/Matter/Behaviors/Insteon/index.d.ts.map +1 -0
  341. package/dist/esm/types/Matter/Bridge/Server.d.ts.map +1 -1
  342. package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts +4173 -42
  343. package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts.map +1 -1
  344. package/dist/esm/types/Registry.d.ts +37 -0
  345. package/dist/esm/types/Registry.d.ts.map +1 -0
  346. package/dist/esm/types/Utils.d.ts +13 -0
  347. package/dist/esm/types/Utils.d.ts.map +1 -1
  348. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  349. package/package.json +2 -2
  350. package/src/CodeGeneration/CodeFactory.ts +16 -8
  351. package/src/CodeGeneration/NodeClassFactory.ts +7 -9
  352. package/src/Definitions/Global/Commands.ts +16 -13
  353. package/src/Definitions/Global/Drivers.ts +57 -36
  354. package/src/Definitions/Global/Events.ts +4 -4
  355. package/src/Definitions/Insteon/generated/Boolean.ts +9 -0
  356. package/src/Definitions/Insteon/generated/Error.ts +9 -0
  357. package/src/Definitions/Insteon/generated/Lock.ts +28 -0
  358. package/src/Definitions/Insteon/generated/OnLevelRelay.ts +11 -0
  359. package/src/Devices/Brultech/Generated/Channel.ts +8 -9
  360. package/src/Devices/Brultech/Generated/Main.ts +11 -12
  361. package/src/Devices/CompositeDevice.ts +277 -0
  362. package/src/Devices/DeviceFactory.ts +1 -1
  363. package/src/Devices/ISYDeviceNode.ts +8 -2
  364. package/src/Devices/Insteon/Generated/AlertModuleArmed.ts +7 -8
  365. package/src/Devices/Insteon/Generated/AlertModuleSiren.ts +7 -8
  366. package/src/Devices/Insteon/Generated/BallastRelayLampSwitch.ts +7 -8
  367. package/src/Devices/Insteon/Generated/BinaryAlarm.ts +7 -8
  368. package/src/Devices/Insteon/Generated/BinaryControl.ts +7 -8
  369. package/src/Devices/Insteon/Generated/DimmerLamp.ts +9 -10
  370. package/src/Devices/Insteon/Generated/DimmerLampSwitch.ts +9 -10
  371. package/src/Devices/Insteon/Generated/DimmerLampSwitchLed.ts +9 -10
  372. package/src/Devices/Insteon/Generated/DimmerMotorSwitch.ts +9 -10
  373. package/src/Devices/Insteon/Generated/DimmerSwitch.ts +6 -7
  374. package/src/Devices/Insteon/Generated/DoorLock.ts +7 -8
  375. package/src/Devices/Insteon/Generated/Ezio2x4Input.ts +7 -8
  376. package/src/Devices/Insteon/Generated/Ezio2x4Output.ts +7 -8
  377. package/src/Devices/Insteon/Generated/EzrainInput.ts +7 -8
  378. package/src/Devices/Insteon/Generated/EzrainOutput.ts +7 -8
  379. package/src/Devices/Insteon/Generated/FanLincMotor.ts +7 -8
  380. package/src/Devices/Insteon/Generated/I3KeypadFlags.ts +15 -16
  381. package/src/Devices/Insteon/Generated/I3PaddleFlags.ts +13 -14
  382. package/src/Devices/Insteon/Generated/ImeterSolo.ts +8 -9
  383. package/src/Devices/Insteon/Generated/IrLincTx.ts +6 -7
  384. package/src/Devices/Insteon/Generated/KeypadButton.ts +7 -8
  385. package/src/Devices/Insteon/Generated/KeypadDimmer.ts +9 -10
  386. package/src/Devices/Insteon/Generated/KeypadRelay.ts +7 -8
  387. package/src/Devices/Insteon/Generated/OnOffControl.ts +7 -8
  388. package/src/Devices/Insteon/Generated/Pir2844.ts +11 -12
  389. package/src/Devices/Insteon/Generated/Pir2844OnOff.ts +7 -8
  390. package/src/Devices/Insteon/Generated/Pir2844c.ts +11 -12
  391. package/src/Devices/Insteon/Generated/RelayLamp.ts +7 -8
  392. package/src/Devices/Insteon/Generated/RelayLampSwitch.ts +7 -8
  393. package/src/Devices/Insteon/Generated/RelayLampSwitchLed.ts +7 -8
  394. package/src/Devices/Insteon/Generated/RelaySwitch.ts +6 -7
  395. package/src/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.ts +6 -7
  396. package/src/Devices/Insteon/Generated/RemoteLinc2.ts +7 -8
  397. package/src/Devices/Insteon/Generated/Siren.ts +10 -11
  398. package/src/Devices/Insteon/Generated/SirenAlert.ts +6 -7
  399. package/src/Devices/Insteon/Generated/TempLinc.ts +13 -14
  400. package/src/Devices/Insteon/Generated/Thermostat.ts +13 -14
  401. package/src/Devices/Insteon/Generated/X10.ts +7 -8
  402. package/src/Devices/Insteon/InsteonDeviceFactory.ts +26 -12
  403. package/src/Devices/Insteon/InsteonDimmableDevice.ts +4 -4
  404. package/src/Devices/Insteon/InsteonDimmerOutletDevice.ts +3 -2
  405. package/src/Devices/Insteon/InsteonDoorWindowSensorDevice.ts +30 -7
  406. package/src/Devices/Insteon/InsteonFanDevice.ts +21 -36
  407. package/src/Devices/Insteon/InsteonOnOffOutletDevice.ts +5 -17
  408. package/src/Devices/Insteon/InsteonRelayDevice.ts +2 -3
  409. package/src/Devices/Insteon/index.ts +10 -14
  410. package/src/Devices/Lutron/Generated/LoadShed.ts +7 -8
  411. package/src/Devices/NCD/Generated/Relay.ts +19 -23
  412. package/src/Devices/NodeFactory.ts +1 -1
  413. package/src/Devices/Poly/Generated/MatterBridge.ts +6 -7
  414. package/src/Devices/Scene/Generated/Scene.ts +5 -6
  415. package/src/Devices/UDI/Generated/Channel.ts +8 -9
  416. package/src/Devices/UDI/Generated/Em3MainChannel.ts +11 -12
  417. package/src/Devices/UDI/Generated/Main.ts +8 -9
  418. package/src/Devices/UDI/Generated/PulseCounter.ts +9 -10
  419. package/src/Devices/UDI/Generated/Relay.ts +7 -8
  420. package/src/Devices/UDI/Generated/TemperatureSensor.ts +7 -8
  421. package/src/Devices/ZWave/Generated/ColorSwitch.ts +17 -18
  422. package/src/Devices/ZWave/Generated/DimmerSwitch.ts +7 -8
  423. package/src/Devices/ZigBee/ZigBeeBase.ts +22 -0
  424. package/src/Devices/ZigBee/index.ts +13 -0
  425. package/src/Devices/ZigBeeLegacy/Generated/Relay.ts +22 -20
  426. package/src/Devices/ZigBeeLegacy/Generated/Thermostat.ts +92 -76
  427. package/src/ISY.ts +27 -5
  428. package/src/ISYDevice.ts +4 -3
  429. package/src/ISYNode.ts +56 -39
  430. package/src/Matter/Behaviors/BehaviorRegistry.ts +44 -8
  431. package/src/Matter/Behaviors/ISYBridgedDeviceBehavior.ts +2 -2
  432. package/src/Matter/Behaviors/ISYClusterBehavior.ts +20 -9
  433. package/src/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.ts +30 -0
  434. package/src/Matter/Behaviors/Insteon/IdentifyBehavior.ts +26 -0
  435. package/src/Matter/Behaviors/Insteon/RelayOnOffBehavior.ts +34 -0
  436. package/src/Matter/Behaviors/Insteon/index.ts +3 -0
  437. package/src/Matter/Bridge/Server.ts +93 -85
  438. package/src/Matter/Mappings/Insteon.ts +3 -3
  439. package/src/Matter/Mappings/MappingRegistry.ts +29 -40
  440. package/src/Registry.ts +112 -0
  441. package/src/Utils.ts +29 -0
  442. package/src/Devices/Insteon/DimmerLampSwitch.ts +0 -207
  443. package/src/Devices/Insteon/InsteonRelaySwitchDevice.ts +0 -11
  444. package/src/Devices/Insteon/RelayLampSwitch.ts +0 -132
  445. package/src/Matter/Behaviors/Insteon/ISYOnOffBehavior.ts +0 -66
@@ -1,26 +1,62 @@
1
- import { ClusterBehavior, type Behavior } from '@matter/node';
2
- import type { RelaxTypes } from '../../Utils.js';
3
- import type { Constructor } from '../../Devices/Constructor.js';
1
+ import { Behavior, type ClusterBehavior } from '@matter/node';
2
+ import type { LabelsOf, RelaxTypes } from '../../Utils.js';
3
+
4
+ import type { ISYNode } from '../../ISYNode.js';
5
+ import { NodeFactory } from '../../Devices/NodeFactory.js';
6
+ import { Registry } from '../../Registry.js';
7
+ import type { Constructor } from 'type-fest';
8
+ import type { ISYDeviceNode } from '../../Devices/ISYDeviceNode.js';
9
+ import { Family } from '../../Definitions/Global/Families.js';
4
10
 
5
11
 
6
12
 
7
13
  export namespace BehaviorRegistry
8
14
  {
9
15
 
16
+ const registry = new Registry<string, Behavior.Type>();
17
+
18
+ export function register<T extends Behavior.Type, F extends Family, P extends ISYNode<F>>(behavior: T & {cluster: {name: string}, nodeClass: Constructor<P>}, family?: keyof typeof Family): void
19
+ {
20
+ if(family)
21
+ {
22
+ registry.register(behavior.cluster.name.toLowerCase(), behavior, family);
23
+ return;
24
+ }
25
+ registry.register(behavior.cluster.name.toLowerCase(), behavior, behavior.nodeClass as unknown as typeof ISYNode);
26
+ }
10
27
 
11
- const registry: {[x:string]: Constructor<ClusterBehavior>} = {};
28
+ export function get<T extends ISYDeviceNode<any,any,any,any>>(node: T, cluster: string): Behavior.Type
29
+ {
30
+ return registry.get(node, cluster.toLowerCase());
31
+ }
12
32
 
13
- type ClusterBehaviorType = RelaxTypes<Omit<typeof ClusterBehavior, "withInterface" | "unimplemented">>;
33
+ /*const registry: {[x:string]: Behavior.Type} = {};
34
+ const nodeLevelRegistry: {[x:string]: {[x:string]: Behavior.Type}} = {};
14
35
 
15
- export function register<T extends Behavior.Type>(behavior: {cluster: {name: string}} & Constructor<ClusterBehavior>): void
36
+
37
+
38
+ register<T extends Behavior.Type>(behavior: T & {cluster: {name: string}, nodeClass: {nodeDefId}} ): void
16
39
  {
17
40
  registry[behavior.cluster.name.toLowerCase()] = behavior;
41
+ nodeLevelRegistry[behavior.nodeClass.nodeDefId] = nodeLevelRegistry[behavior.
42
+ nodeClass.nodeDefId] ?? {};
43
+ nodeLevelRegistry[behavior.nodeClass.nodeDefId][behavior.cluster.name.toLowerCase()] = behavior;
44
+
18
45
  }
19
46
 
20
- export function get(cluster: string): Constructor<ClusterBehavior>
47
+ function get(nodeClass: typeof ISYNode, cluster: string): Behavior.Type
21
48
  {
49
+ if(nodeLevelRegistry[nodeClass.nodeDefId])
50
+ return nodeLevelRegistry[nodeClass.nodeDefId][cluster.toLowerCase()];
51
+ else
52
+ for (const nodeDefId in NodeFactory.getImplements(nodeClass))
53
+ {
54
+ if(nodeLevelRegistry[nodeDefId][cluster.toLowerCase()])
55
+ return nodeLevelRegistry[nodeDefId][cluster.toLowerCase()];
56
+ }
22
57
  return registry[cluster.toLowerCase()];
23
- }
58
+
59
+ }*/
24
60
 
25
61
 
26
62
  }
@@ -68,7 +68,7 @@ export class ISYBridgedDeviceBehavior<N extends ISYNode<any, D, any, any>, D ext
68
68
 
69
69
  override [Symbol.asyncDispose]() {
70
70
  this.internal.device = null;
71
-
71
+
72
72
 
73
73
  return super[Symbol.asyncDispose]();
74
74
  }
@@ -80,7 +80,7 @@ export namespace ISYBridgedDeviceBehavior {
80
80
  map?: DeviceToClusterMap<typeof this.device, any>;
81
81
  }
82
82
 
83
- export type EventsFor<D extends { [x: string]: Driver<any, any, any> }> = {
83
+ export type EventsFor<D extends { [x: string]: Driver<any,any,any,any,any,any> }> = {
84
84
  [s in keyof D as `${D[s]['name']}Changed`]: Observable<[{ driver: s; newValue: any; oldValue: any; formattedValue: string }]>;
85
85
  };
86
86
 
@@ -8,6 +8,8 @@ import type { DriversOf, ISYNode } from '../../ISYNode.js';
8
8
  import type { ClusterMapping } from '../Mappings/MappingRegistry.js';
9
9
  import { ISYBridgedDeviceBehavior } from './ISYBridgedDeviceBehavior.js';
10
10
  import { isYieldExpression } from 'typescript';
11
+ import { getConstructor, type ConstructorOf, type Factory } from '../../Utils.js';
12
+ import { CompositeDevice } from '../../Devices/CompositeDevice.js';
11
13
 
12
14
  // #region Type aliases (6)
13
15
 
@@ -15,9 +17,10 @@ export type ClusterForBehavior<B> = B extends ClusterBehavior.Type<infer C, infe
15
17
  export type ConstructedType<B extends Constructor<any>> = B extends Constructor<infer C> ? C : never;
16
18
  // <reference path="MatterDevice.js" />
17
19
  // @ts-ignore
18
- export type DeviceBehavior<P extends ISYNode<any, any, any, any>, T extends { cluster? }> = {
20
+ export interface DeviceBehavior<P extends ISYNode<any, any, any, any>, T extends { cluster? }> {
19
21
  device: P;
20
22
 
23
+
21
24
  bridgedDeviceBehavior: ISYBridgedDeviceBehavior<P>;
22
25
 
23
26
  //ts-ignore
@@ -26,7 +29,7 @@ export type DeviceBehavior<P extends ISYNode<any, any, any, any>, T extends { cl
26
29
  handlePropertyChange(chg: PropertyChange<P>): void;
27
30
  };
28
31
  type NotUnknown<T extends ClusterBehavior> = T extends { cluster: { name: 'Unknown' } } ? never : T;
29
- export type PropertyChange<P extends ISYNode<any, any, any, any>> = {
32
+ export type PropertyChange<P extends ISYNode> = {
30
33
  driver: keyof DriversOf<P>;
31
34
  newValue: any;
32
35
  oldValue: any;
@@ -38,13 +41,15 @@ type t = ClusterForBehavior<LevelControlBehavior>;
38
41
 
39
42
  // #region Functions (1)
40
43
 
41
- export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cluster }, P extends ISYNode<any, any, any, any>>(
44
+ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cluster }, P extends ISYNode<any, any, any, any>> (
42
45
  base: T,
43
- p: Constructor<P>
44
- ): typeof base & { new (...args: any[]): DeviceBehavior<P, T> } {
45
- return class ISYClusterBehavior extends base implements DeviceBehavior<P, T> {
46
+ p: Constructor<P> | Factory<P>
47
+ ): typeof base & { new (...args: any[]): DeviceBehavior<P, T> } & {nodeClass: Constructor<P>} {
48
+ let s = class ISYClusterBehavior extends base implements DeviceBehavior<P, T> {
46
49
  _device: P;
47
50
 
51
+ static nodeClass = getConstructor(p);
52
+
48
53
  handlers: { [x in keyof DriversOf<P>]: (newValue, oldValue, formattedValue) => void } = {} as any;
49
54
 
50
55
  bridgedDeviceBehavior: ISYBridgedDeviceBehavior<P>;
@@ -59,7 +64,7 @@ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cl
59
64
  this.bridgedDeviceBehavior = behavior;
60
65
  //var behavior = this.agent.get(ISYBridgedDeviceBehavior);
61
66
  this._device = behavior.device as P;
62
- this._device.logger('Initializing cluster behavior');
67
+ this._device.logger(`Initializing cluster behavior: ${this.constructor.name}`);
63
68
  //@ts-ignore
64
69
 
65
70
  this.map = behavior.mapForBehavior<T>(this as unknown as T);
@@ -80,7 +85,8 @@ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cl
80
85
  if (!convFunc) throw new Error(`Converter ${converter} not found`);
81
86
  this.state[key2 as string] = convFunc(this._device.drivers[driver as string].value);
82
87
  this.handlers[driver] = (newValue, oldValue, formattedValue) => {
83
- //if (convFunc) this.state[key2 as string] = convFunc(newValue);
88
+ //this.device.logger(`Handling property change for ${driver} (${key2}) with value ${newValue}`);
89
+ //if (convFunc) this.state[key2 as string] = convFunc(newValue);
84
90
  this.state[key2 as string] = convFunc(newValue);
85
91
  };
86
92
  }
@@ -100,9 +106,12 @@ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cl
100
106
  return (this._device = this._device ?? (this.agent.get(ISYBridgedDeviceBehavior).device as P));
101
107
  }
102
108
 
109
+
110
+
103
111
  async handlePropertyChange({ driver, newValue, oldValue, formattedValue }: PropertyChange<P>) {
104
112
  // for (const key2 in this.map.attributes) {
105
- await this.initialize();
113
+ //await this.initialize();
114
+ this.device.logger(`${this.constructor.name}: handling property change for ${String(driver)} with value ${newValue}`);
106
115
  if (this.handlers[driver]) {
107
116
  this.handlers[driver](newValue, oldValue, formattedValue);
108
117
  }
@@ -121,6 +130,8 @@ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cl
121
130
  // }
122
131
  }
123
132
  };
133
+ s.nodeClass = getConstructor(p);
134
+ return s;
124
135
  }
125
136
 
126
137
  // #endregion Functions (1)
@@ -0,0 +1,30 @@
1
+ import type { MaybePromise } from '@matter/general';
2
+ import { DimmableLightRequirements } from '@matter/node/devices';
3
+ import { Converter } from '../../../Converters.js';
4
+ import { IdEffect } from '../../../Definitions/ZigBee/index.js';
5
+ import * as Insteon from '../../../Devices/Insteon/index.js';
6
+ import { BehaviorRegistry } from '../BehaviorRegistry.js';
7
+ import { ISYClusterBehavior } from '../ISYClusterBehavior.js';
8
+ import { IdentifyBehavior } from './IdentifyBehavior.js';
9
+
10
+
11
+
12
+ export class DimmerLevelControlBehavior extends ISYClusterBehavior(DimmableLightRequirements.LevelControlServer, Insteon.DimmerLamp) {
13
+ override async initialize(_options?: {}) {
14
+ await super.initialize(_options);
15
+ /*this.state.onLevel = Converter.get('Level255toZero.LightingLevel').to(this.device.drivers.OL)*/
16
+ //this.state.currentLevel = this.device.drivers.ST.value;
17
+ //this.state.onLevel = this.device.drivers.OL;
18
+ }
19
+
20
+ override setLevel(level: number): MaybePromise<void> {
21
+ level = Converter.Matter.LevelFrom0To255.LightingLevel.from(level);
22
+
23
+ if (level > 0) {
24
+ return this.device.on(level);
25
+ } else {
26
+ return this.device.off();
27
+ }
28
+ }
29
+ }
30
+ BehaviorRegistry.register(DimmerLevelControlBehavior);
@@ -0,0 +1,26 @@
1
+ import { DimmableLightRequirements } from '@matter/node/devices';
2
+ import { Identify } from '@project-chip/matter.js/cluster';
3
+ import * as Insteon from '../../../Devices/Insteon/index.js';
4
+ import { ISYClusterBehavior } from '../ISYClusterBehavior.js';
5
+ import { BehaviorRegistry } from '../BehaviorRegistry.js';
6
+
7
+ export class IdentifyBehavior extends ISYClusterBehavior(DimmableLightRequirements.IdentifyServer, Insteon.Relay) {
8
+ override async initialize(_options?: {}) {
9
+ await super.initialize(_options);
10
+ }
11
+
12
+ override async identify() {
13
+ return this.device.beep(100);
14
+ }
15
+
16
+ override async triggerEffect(request: Identify.TriggerEffectRequest) {
17
+ switch (request.effectIdentifier) {
18
+ case Identify.EffectIdentifier.Blink:
19
+ return this.device.on(100).then(() => this.device.off());
20
+ default:
21
+ return this.device.beep(100);
22
+ }
23
+ }
24
+ }
25
+
26
+ BehaviorRegistry.register(IdentifyBehavior);
@@ -0,0 +1,34 @@
1
+ import { OnOffLightRequirements } from '@project-chip/matter.js/devices/OnOffLightDevice';
2
+ import { InsteonRelayDevice } from '../../../Devices/Insteon/InsteonRelayDevice.js';
3
+
4
+ import { ISYClusterBehavior, type PropertyChange } from '../ISYClusterBehavior.js';
5
+
6
+ import { BehaviorRegistry } from '../BehaviorRegistry.js';
7
+ import { Insteon } from '../../../Devices/index.js';
8
+
9
+ export class RelayOnOffBehavior extends ISYClusterBehavior(OnOffLightRequirements.OnOffServer, Insteon.RelayLamp) {
10
+ override async initialize(_options?: {}) {
11
+ await super.initialize(_options);
12
+
13
+ //this.state.onOff = this.device.status;
14
+ //this.state.onOff = await this.device.state;
15
+ }
16
+
17
+ override on = async () => {
18
+ await this.device.on();
19
+
20
+ //this.device.commands.DON = true;
21
+ };
22
+
23
+ override async off() {
24
+ await this.device.off();
25
+
26
+ // this.device.drivers = false;
27
+ }
28
+
29
+ override async handlePropertyChange({ driver, newValue, oldValue, formattedValue }) {
30
+ return super.handlePropertyChange({ driver, newValue, oldValue, formattedValue });
31
+ }
32
+ }
33
+
34
+ BehaviorRegistry.register(RelayOnOffBehavior);
@@ -0,0 +1,3 @@
1
+ export * from './DimmerLevelControlBehavior.js';
2
+ export * from './IdentifyBehavior.js';
3
+ export * from './RelayOnOffBehavior.js';
@@ -1,20 +1,23 @@
1
1
  import { LogLevel, logLevelFromString, Logger as MatterLogger } from '@matter/general';
2
- import { Endpoint, EndpointServer, Environment, MutableEndpoint, ServerNode, StorageService, VendorId } from '@matter/main';
2
+ import { ClusterBehavior, Endpoint, EndpointServer, Environment, MutableEndpoint, ServerNode, StorageService, VendorId } from '@matter/main';
3
3
  import { AggregatorEndpoint } from '@matter/main/endpoints/aggregator';
4
4
  import { logEndpoint } from '@matter/main/protocol';
5
+ import { QrCode } from '@matter/main/types';
5
6
  import PackageJson from '@project-chip/matter.js/package.json' with { type: 'json' };
6
7
  import path from 'path';
7
8
  import { format, loggers } from 'winston';
9
+ import { DimmerLamp, RelayLamp } from '../../Devices/Insteon/index.js';
8
10
  import { ISYDeviceNode } from '../../Devices/ISYDeviceNode.js';
9
11
  import { ISY } from '../../ISY.js';
10
12
  import type { ISYNode } from '../../ISYNode.js';
11
- import { ISYDimmableBehavior, ISYOnOffBehavior } from '../Behaviors/Insteon/ISYOnOffBehavior.js';
13
+
12
14
  import '../Mappings/index.js';
13
- import { RelayLamp, DimmerLamp } from '../../Devices/Insteon/index.js';
14
15
  import { MappingRegistry } from '../Mappings/MappingRegistry.js';
15
- import { QrCode } from '@matter/main/types';
16
-
17
-
16
+ import { DimmerLevelControlBehavior } from '../Behaviors/Insteon/DimmerLevelControlBehavior.js';
17
+ import { RelayOnOffBehavior } from '../Behaviors/Insteon/index.js';
18
+ import { BehaviorRegistry } from '../Behaviors/BehaviorRegistry.js';
19
+ import { isClusterServer } from '@project-chip/matter.js/cluster';
20
+ import type { ISYDevice } from '../../ISYDevice.js';
18
21
 
19
22
  // #region Interfaces (1)
20
23
 
@@ -44,7 +47,7 @@ export interface Config {
44
47
  }
45
48
 
46
49
  export interface DeviceOptions {
47
- applyTo:
50
+ applyTo:
48
51
  | {
49
52
  classes: (typeof ISYNode<any, any, any, any>)[];
50
53
  }
@@ -64,9 +67,7 @@ export interface DeviceOptions {
64
67
 
65
68
  // #region Functions (3)
66
69
 
67
- let t : MutableEndpoint;
68
-
69
-
70
+ let t: MutableEndpoint;
70
71
 
71
72
  export function create(isy?: ISY, config?: Config): Promise<ServerNode> {
72
73
  return createMatterServer(isy, config);
@@ -87,10 +88,8 @@ export function appliesTo(node: ISYNode<any>, deviceOptions: DeviceOptions): boo
87
88
  }
88
89
 
89
90
  export function getDeviceOptions(node: ISYNode<any>, deviceOptions: DeviceOptions[]): DeviceOptions['options'] {
90
- if(deviceOptions)
91
- {
92
- if(Array.isArray(deviceOptions))
93
- {
91
+ if (deviceOptions) {
92
+ if (Array.isArray(deviceOptions)) {
94
93
  for (const options of deviceOptions) {
95
94
  if (appliesTo(node, options)) {
96
95
  return options.options; //TODO: rank by specificity
@@ -204,82 +203,93 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
204
203
  logger.info(`Bridge aggregator added`);
205
204
  let endpoints = 0;
206
205
  for (const node of isy.nodeMap.values()) {
207
- let device = node as ISYDeviceNode<any, any, any>;
208
- try
209
- {
210
- let deviceOptions = getDeviceOptions(node, config.DeviceOptions);
211
- if(deviceOptions?.label)
206
+ let device = node as ISYDeviceNode<any,any,any,any>
207
+ if(device.parentAddress !== device.address)
212
208
  {
213
- device.label = deviceOptions.label;
214
- }
215
- if (deviceOptions?.exclude) {
216
209
  continue;
217
210
  }
218
- let uniqueId = `${device.address.replaceAll(' ', '_').replaceAll('.', '_')}`;
219
- if (device.enabled) {
220
- //const name = `OnOff ${isASocket ? "Socket" : "Light"} ${i}`;
221
-
222
- //@ts-ignore
223
- //of (DimmableLightDevice.with(BridgedDeviceBasicInformationServer, ISYBridgedDeviceBehavior, ISYOnOffBehavior, ISYDimmableBehavior)) | typeof (OnOffLightDevice.with(BridgedDeviceBasicInformationServer, ISYBridgedDeviceBehavior, ISYOnOffBehavior));*/
224
- let deviceType = MappingRegistry.getMapping(device)?.deviceType;
211
+ try {
212
+ let deviceOptions = getDeviceOptions(node, config.DeviceOptions);
213
+ if (deviceOptions?.label) {
214
+ device.label = deviceOptions.label;
215
+ }
216
+ if (deviceOptions?.exclude) {
217
+ continue;
218
+ }
219
+ let uniqueId = `${device.address.replaceAll(' ', '_').replaceAll('.', '_')}`;
220
+ if (device.enabled) {
221
+ //const name = `OnOff ${isASocket ? "Socket" : "Light"} ${i}`;
225
222
 
223
+ //@ts-ignore
224
+ //of (DimmableLightDevice.with(BridgedDeviceBasicInformationServer, ISYBridgedDeviceBehavior, ISYOnOffBehavior, ISYDimmableBehavior)) | typeof (OnOffLightDevice.with(BridgedDeviceBasicInformationServer, ISYBridgedDeviceBehavior, ISYOnOffBehavior));*/
225
+ let deviceType = MappingRegistry.getMapping(device)?.deviceType;
226
226
 
227
227
 
228
- let baseBehavior = deviceType;
229
- if (DimmerLamp.isImplementedBy(device)) {
228
+ let baseBehavior = deviceType;
230
229
 
231
- baseBehavior = deviceType?.with(ISYOnOffBehavior, ISYDimmableBehavior);
232
- // if(device instanceof InsteonSwitchDevice)
233
- // {
234
- // baseBehavior = DimmerSwitchDevice.with(BridgedDeviceBasicInformationServer);
235
- }
236
- else if (RelayLamp.isImplementedBy(device)) {
237
- baseBehavior = deviceType?.with(ISYOnOffBehavior);
238
- // if(device instanceof InsteonSwitchDevice)
239
- // {
240
- // baseBehavior = OnOffLightSwitchDevice.with(BridgedDeviceBasicInformationServer);
241
- // }
242
- }
230
+ let b = deviceType?.behaviors;
243
231
 
244
- if (baseBehavior !== undefined) {
232
+ for (let s in b)
233
+ {
234
+ let behavior = deviceType.behaviors[s] as ClusterBehavior.Type;
235
+ if(behavior.cluster && behavior.cluster.name !== 'Unknown')
236
+ {
237
+ let b = BehaviorRegistry.get(device,behavior.cluster.name);
238
+ if(b)
239
+ {
240
+ baseBehavior = deviceType.with(b);
241
+ }
242
+ }
243
+ }
245
244
 
246
- logger.info(`Device ${device.label} (${device.address}) with NodeDefId = ${device.nodeDefId} mapped to ${deviceType.name}`);
247
- //@ts-ignore
248
- const endpoint = new Endpoint(baseBehavior, {
249
- id: uniqueId,
250
- isyNode: {
251
- address: device.address
252
- },
253
-
254
- bridgedDeviceBasicInformation: {
255
- nodeLabel: device.label.rightWithToken(32),
256
- vendorName: device instanceof ISYDeviceNode ? device.manufacturer : isy.vendorName,
257
- vendorId: VendorId(config.vendorId),
258
- productName: device.productName.leftWithToken(32),
259
- productLabel: device.model.leftWithToken(64),
260
-
261
- hardwareVersion: Number(device.version),
262
- hardwareVersionString: `v.${device.version}`,
263
- softwareVersion: Number(device.version),
264
- softwareVersionString: `v.${device.version}`,
265
-
266
- serialNumber: uniqueId,
267
- reachable: true,
268
- uniqueId: device.address
269
-
270
- },
271
-
272
- });
273
-
274
- await aggregator.add(endpoint);
275
- logger.info(`Endpoint added ${JSON.stringify(endpoint.id)} for ${device.label} (${device.address})`);
276
- endpoints++;
277
- //endpoints.push({0:endpoint,1:device});
245
+ /*if (DimmerLamp.isImplementedBy(device)) {
246
+ baseBehavior = deviceType?.with(RelayOnOffBehavior, DimmerLevelControlBehavior);
247
+ // if(device instanceof InsteonSwitchDevice)
248
+ // {
249
+ // baseBehavior = DimmerSwitchDevice.with(BridgedDeviceBasicInformationServer);
250
+ } else if (RelayLamp.isImplementedBy(device)) {
251
+ baseBehavior = deviceType?.with(RelayOnOffBehavior);
252
+ // if(device instanceof InsteonSwitchDevice)
253
+ // {
254
+ // baseBehavior = OnOffLightSwitchDevice.with(BridgedDeviceBasicInformationServer);
255
+ // }
256
+ }*/
257
+
258
+ if (baseBehavior !== undefined) {
259
+ logger.info(`Device ${device.label} (${device.address}) with NodeDefId = ${device.nodeDefId} mapped to ${deviceType.name}`);
260
+ //@ts-ignore
261
+ const endpoint = new Endpoint(baseBehavior, {
262
+ id: uniqueId,
263
+ isyNode: {
264
+ address: device.address
265
+ },
266
+
267
+ bridgedDeviceBasicInformation: {
268
+ nodeLabel: device.label.rightWithToken(32),
269
+ vendorName: device instanceof ISYDeviceNode ? device.manufacturer : isy.vendorName,
270
+ vendorId: VendorId(config.vendorId),
271
+ productName: device.productName.leftWithToken(32),
272
+ productLabel: device.model.leftWithToken(64),
273
+
274
+ hardwareVersion: Number(device.version),
275
+ hardwareVersionString: `v.${device.version}`,
276
+ softwareVersion: Number(device.version),
277
+ softwareVersionString: `v.${device.version}`,
278
+
279
+ serialNumber: uniqueId,
280
+ reachable: true,
281
+ uniqueId: device.address
282
+ }
283
+ });
284
+
285
+ await aggregator.add(endpoint);
286
+ logger.info(`Endpoint added ${JSON.stringify(endpoint.id)} for ${device.label} (${device.address})`);
287
+ endpoints++;
288
+ //endpoints.push({0:endpoint,1:device});
289
+ }
290
+ //endpoint.lifecycle.ready.on(()=> device.initialize(endpoint as any));
278
291
  }
279
- //endpoint.lifecycle.ready.on(()=> device.initialize(endpoint as any));
280
- }}
281
- catch(e)
282
- {
292
+ } catch (e) {
283
293
  logger.error(`Error adding endpoint for ${device.label} (${device.address}): ${e.message}`);
284
294
  }
285
295
 
@@ -289,7 +299,6 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
289
299
  * If the code in these change handlers fail then the change is also rolled back and not executed and an error is
290
300
  * reported back to the controller.
291
301
  */
292
-
293
302
  }
294
303
  logger.info(`${endpoints} endpoints added to bridge.`);
295
304
  /**
@@ -366,15 +375,14 @@ async function initializeConfiguration(isy: ISY, config?: Config): Promise<Confi
366
375
  environment.vars.set('discriminator', config.discriminator);
367
376
  }
368
377
 
369
- if(config.vendorId) {
378
+ if (config.vendorId) {
370
379
  environment.vars.set('vendorid', config.vendorId);
371
380
  }
372
381
 
373
- if(config.productId) {
382
+ if (config.productId) {
374
383
  environment.vars.set('productid', config.productId);
375
384
  }
376
385
 
377
-
378
386
  environment.vars.set('uniqueid', isy.id.replaceAll(':', '_'));
379
387
 
380
388
  //logger.info(`Matter configuration: ${JSON.stringify(environment.vars)}`);
@@ -387,7 +395,7 @@ async function initializeConfiguration(isy: ISY, config?: Config): Promise<Confi
387
395
  const productId = environment.vars.number('productid') ?? (await deviceStorage.get('productid', isy.productId));
388
396
  const productName = environment.vars.string('productname') ?? (await deviceStorage.get('productname', isy.productName));
389
397
  const port = environment.vars.number('port') ?? 5540;
390
- const uniqueId = environment.vars.string("uniqueid") ?? (await deviceStorage.get("uniqueid", isy.id.replaceAll(':', '_')));
398
+ const uniqueId = environment.vars.string('uniqueid') ?? (await deviceStorage.get('uniqueid', isy.id.replaceAll(':', '_')));
391
399
 
392
400
  // Persist basic data to keep them also on restart
393
401
  await deviceStorage.set({
@@ -55,13 +55,13 @@ export const map: FamilyToClusterMap<Family.Insteon> = {
55
55
  },
56
56
  commands: { setLevel: { command: 'DON' } }
57
57
  }
58
- } as EndpointMapping<DimmableLightDevice, Insteon.DimmerLampNode>
58
+ } as EndpointMapping<DimmableLightDevice, InstanceType<typeof Insteon.DimmerLamp.Node>>
59
59
  },
60
60
  DimmerLampSwitch: {
61
61
  deviceType: DimmableLightDevice,
62
62
  // @ts-ignore
63
63
  mapping: {
64
-
64
+
65
65
  OnOff: {
66
66
  attributes: {
67
67
  onOff: { driver: 'ST', converter: 'Percent.Boolean' }
@@ -78,7 +78,7 @@ export const map: FamilyToClusterMap<Family.Insteon> = {
78
78
  },
79
79
  commands: { setLevel: { command: 'DON' } }
80
80
  }
81
- } as EndpointMapping<DimmableLightDevice, Insteon.DimmerLampNode>
81
+ } as EndpointMapping<DimmableLightDevice, InstanceType<typeof Insteon.DimmerLamp.Node>>
82
82
  }
83
83
  };
84
84