isy-nodejs 1.0.7-alpha.0 → 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 (442) 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.map +1 -1
  145. package/dist/esm/Matter/Behaviors/BehaviorRegistry.js +37 -5
  146. package/dist/esm/Matter/Behaviors/BehaviorRegistry.js.map +1 -1
  147. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js +6 -1
  148. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  149. package/dist/esm/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.js +24 -0
  150. package/dist/esm/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.js.map +1 -0
  151. package/dist/esm/Matter/Behaviors/Insteon/ISYDimmableBehavior.js +23 -0
  152. package/dist/esm/Matter/Behaviors/Insteon/ISYDimmableBehavior.js.map +1 -0
  153. package/dist/esm/Matter/Behaviors/Insteon/ISYOnOffBehavior.js +4 -4
  154. package/dist/esm/Matter/Behaviors/Insteon/ISYOnOffBehavior.js.map +1 -1
  155. package/dist/esm/Matter/Behaviors/Insteon/IdentifyBehavior.js +23 -0
  156. package/dist/esm/Matter/Behaviors/Insteon/IdentifyBehavior.js.map +1 -0
  157. package/dist/esm/Matter/Behaviors/Insteon/RelayOnOffBehavior.js +24 -0
  158. package/dist/esm/Matter/Behaviors/Insteon/RelayOnOffBehavior.js.map +1 -0
  159. package/dist/esm/Matter/Behaviors/Insteon/index.js +4 -0
  160. package/dist/esm/Matter/Behaviors/Insteon/index.js.map +1 -0
  161. package/dist/esm/Matter/Bridge/Server.js +22 -11
  162. package/dist/esm/Matter/Bridge/Server.js.map +1 -1
  163. package/dist/esm/Matter/Mappings/Insteon.js.map +1 -1
  164. package/dist/esm/Matter/Mappings/MappingRegistry.js +5 -4
  165. package/dist/esm/Matter/Mappings/MappingRegistry.js.map +1 -1
  166. package/dist/esm/Registry.js +77 -0
  167. package/dist/esm/Registry.js.map +1 -0
  168. package/dist/esm/Utils.js +12 -0
  169. package/dist/esm/Utils.js.map +1 -1
  170. package/dist/esm/types/CodeGeneration/CodeFactory.d.ts +6 -5
  171. package/dist/esm/types/CodeGeneration/CodeFactory.d.ts.map +1 -1
  172. package/dist/esm/types/CodeGeneration/NodeClassFactory.d.ts.map +1 -1
  173. package/dist/esm/types/Definitions/Global/Commands.d.ts +4 -4
  174. package/dist/esm/types/Definitions/Global/Commands.d.ts.map +1 -1
  175. package/dist/esm/types/Definitions/Global/Drivers.d.ts +10 -8
  176. package/dist/esm/types/Definitions/Global/Drivers.d.ts.map +1 -1
  177. package/dist/esm/types/Definitions/Global/Events.d.ts +3 -3
  178. package/dist/esm/types/Definitions/Global/Events.d.ts.map +1 -1
  179. package/dist/esm/types/Definitions/Insteon/generated/Boolean.d.ts +4 -0
  180. package/dist/esm/types/Definitions/Insteon/generated/Boolean.d.ts.map +1 -1
  181. package/dist/esm/types/Definitions/Insteon/generated/Error.d.ts +4 -0
  182. package/dist/esm/types/Definitions/Insteon/generated/Error.d.ts.map +1 -1
  183. package/dist/esm/types/Definitions/Insteon/generated/Lock.d.ts +6 -0
  184. package/dist/esm/types/Definitions/Insteon/generated/Lock.d.ts.map +1 -1
  185. package/dist/esm/types/Definitions/Insteon/generated/OnLevelRelay.d.ts +4 -0
  186. package/dist/esm/types/Definitions/Insteon/generated/OnLevelRelay.d.ts.map +1 -1
  187. package/dist/esm/types/Devices/CompositeDevice.d.ts +64 -0
  188. package/dist/esm/types/Devices/CompositeDevice.d.ts.map +1 -0
  189. package/dist/esm/types/Devices/EndpointFor.d.ts +3 -2
  190. package/dist/esm/types/Devices/EndpointFor.d.ts.map +1 -1
  191. package/dist/esm/types/Devices/ISYDeviceNode.d.ts +4 -1
  192. package/dist/esm/types/Devices/ISYDeviceNode.d.ts.map +1 -1
  193. package/dist/esm/types/Devices/ISYMultiNodeDevice.d.ts +25 -1
  194. package/dist/esm/types/Devices/ISYMultiNodeDevice.d.ts.map +1 -1
  195. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleArmed.d.ts +2 -3
  196. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleArmed.d.ts.map +1 -1
  197. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleSiren.d.ts +2 -3
  198. package/dist/esm/types/Devices/Insteon/Generated/AlertModuleSiren.d.ts.map +1 -1
  199. package/dist/esm/types/Devices/Insteon/Generated/BallastRelayLampSwitch.d.ts +2 -3
  200. package/dist/esm/types/Devices/Insteon/Generated/BallastRelayLampSwitch.d.ts.map +1 -1
  201. package/dist/esm/types/Devices/Insteon/Generated/BinaryAlarm.d.ts +2 -3
  202. package/dist/esm/types/Devices/Insteon/Generated/BinaryAlarm.d.ts.map +1 -1
  203. package/dist/esm/types/Devices/Insteon/Generated/BinaryControl.d.ts +2 -3
  204. package/dist/esm/types/Devices/Insteon/Generated/BinaryControl.d.ts.map +1 -1
  205. package/dist/esm/types/Devices/Insteon/Generated/DimmerLamp.d.ts +2 -3
  206. package/dist/esm/types/Devices/Insteon/Generated/DimmerLamp.d.ts.map +1 -1
  207. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitch.d.ts +2 -3
  208. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitch.d.ts.map +1 -1
  209. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitchLed.d.ts +2 -3
  210. package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitchLed.d.ts.map +1 -1
  211. package/dist/esm/types/Devices/Insteon/Generated/DimmerMotorSwitch.d.ts +2 -3
  212. package/dist/esm/types/Devices/Insteon/Generated/DimmerMotorSwitch.d.ts.map +1 -1
  213. package/dist/esm/types/Devices/Insteon/Generated/DimmerSwitch.d.ts +2 -3
  214. package/dist/esm/types/Devices/Insteon/Generated/DimmerSwitch.d.ts.map +1 -1
  215. package/dist/esm/types/Devices/Insteon/Generated/DoorLock.d.ts +2 -3
  216. package/dist/esm/types/Devices/Insteon/Generated/DoorLock.d.ts.map +1 -1
  217. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Input.d.ts +2 -3
  218. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Input.d.ts.map +1 -1
  219. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Output.d.ts +2 -3
  220. package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Output.d.ts.map +1 -1
  221. package/dist/esm/types/Devices/Insteon/Generated/EzrainInput.d.ts +2 -3
  222. package/dist/esm/types/Devices/Insteon/Generated/EzrainInput.d.ts.map +1 -1
  223. package/dist/esm/types/Devices/Insteon/Generated/EzrainOutput.d.ts +2 -3
  224. package/dist/esm/types/Devices/Insteon/Generated/EzrainOutput.d.ts.map +1 -1
  225. package/dist/esm/types/Devices/Insteon/Generated/FanLincMotor.d.ts +2 -3
  226. package/dist/esm/types/Devices/Insteon/Generated/FanLincMotor.d.ts.map +1 -1
  227. package/dist/esm/types/Devices/Insteon/Generated/I3KeypadFlags.d.ts +2 -3
  228. package/dist/esm/types/Devices/Insteon/Generated/I3KeypadFlags.d.ts.map +1 -1
  229. package/dist/esm/types/Devices/Insteon/Generated/I3PaddleFlags.d.ts +2 -3
  230. package/dist/esm/types/Devices/Insteon/Generated/I3PaddleFlags.d.ts.map +1 -1
  231. package/dist/esm/types/Devices/Insteon/Generated/ImeterSolo.d.ts +2 -3
  232. package/dist/esm/types/Devices/Insteon/Generated/ImeterSolo.d.ts.map +1 -1
  233. package/dist/esm/types/Devices/Insteon/Generated/IrLincTx.d.ts +2 -3
  234. package/dist/esm/types/Devices/Insteon/Generated/IrLincTx.d.ts.map +1 -1
  235. package/dist/esm/types/Devices/Insteon/Generated/KeypadButton.d.ts +2 -3
  236. package/dist/esm/types/Devices/Insteon/Generated/KeypadButton.d.ts.map +1 -1
  237. package/dist/esm/types/Devices/Insteon/Generated/KeypadDimmer.d.ts +2 -3
  238. package/dist/esm/types/Devices/Insteon/Generated/KeypadDimmer.d.ts.map +1 -1
  239. package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts +2 -3
  240. package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts.map +1 -1
  241. package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts +2 -3
  242. package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts.map +1 -1
  243. package/dist/esm/types/Devices/Insteon/Generated/Pir2844.d.ts +2 -3
  244. package/dist/esm/types/Devices/Insteon/Generated/Pir2844.d.ts.map +1 -1
  245. package/dist/esm/types/Devices/Insteon/Generated/Pir2844OnOff.d.ts +2 -3
  246. package/dist/esm/types/Devices/Insteon/Generated/Pir2844OnOff.d.ts.map +1 -1
  247. package/dist/esm/types/Devices/Insteon/Generated/Pir2844c.d.ts +2 -3
  248. package/dist/esm/types/Devices/Insteon/Generated/Pir2844c.d.ts.map +1 -1
  249. package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts +2 -3
  250. package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts.map +1 -1
  251. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts +2 -3
  252. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts.map +1 -1
  253. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts +2 -3
  254. package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts.map +1 -1
  255. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitch.d.ts +2 -3
  256. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitch.d.ts.map +1 -1
  257. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.d.ts +2 -3
  258. package/dist/esm/types/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.d.ts.map +1 -1
  259. package/dist/esm/types/Devices/Insteon/Generated/RemoteLinc2.d.ts +2 -3
  260. package/dist/esm/types/Devices/Insteon/Generated/RemoteLinc2.d.ts.map +1 -1
  261. package/dist/esm/types/Devices/Insteon/Generated/Siren.d.ts +2 -3
  262. package/dist/esm/types/Devices/Insteon/Generated/Siren.d.ts.map +1 -1
  263. package/dist/esm/types/Devices/Insteon/Generated/SirenAlert.d.ts +2 -3
  264. package/dist/esm/types/Devices/Insteon/Generated/SirenAlert.d.ts.map +1 -1
  265. package/dist/esm/types/Devices/Insteon/Generated/TempLinc.d.ts +2 -3
  266. package/dist/esm/types/Devices/Insteon/Generated/TempLinc.d.ts.map +1 -1
  267. package/dist/esm/types/Devices/Insteon/Generated/Thermostat.d.ts +2 -3
  268. package/dist/esm/types/Devices/Insteon/Generated/Thermostat.d.ts.map +1 -1
  269. package/dist/esm/types/Devices/Insteon/Generated/X10.d.ts +2 -3
  270. package/dist/esm/types/Devices/Insteon/Generated/X10.d.ts.map +1 -1
  271. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts +8 -6
  272. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts.map +1 -1
  273. package/dist/esm/types/Devices/Insteon/InsteonDeviceFactory.d.ts +7 -2
  274. package/dist/esm/types/Devices/Insteon/InsteonDeviceFactory.d.ts.map +1 -1
  275. package/dist/esm/types/Devices/Insteon/InsteonDimmableDevice.d.ts +2 -2
  276. package/dist/esm/types/Devices/Insteon/InsteonDimmableDevice.d.ts.map +1 -1
  277. package/dist/esm/types/Devices/Insteon/InsteonDimmerOutletDevice.d.ts +2 -2
  278. package/dist/esm/types/Devices/Insteon/InsteonDimmerOutletDevice.d.ts.map +1 -1
  279. package/dist/esm/types/Devices/Insteon/InsteonDoorWindowSensorDevice.d.ts +17 -5
  280. package/dist/esm/types/Devices/Insteon/InsteonDoorWindowSensorDevice.d.ts.map +1 -1
  281. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts +18 -16
  282. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts.map +1 -1
  283. package/dist/esm/types/Devices/Insteon/InsteonLeakSensorDevice.d.ts +1 -1
  284. package/dist/esm/types/Devices/Insteon/InsteonLeakSensorDevice.d.ts.map +1 -1
  285. package/dist/esm/types/Devices/Insteon/InsteonOnOffOutletDevice.d.ts +8 -7
  286. package/dist/esm/types/Devices/Insteon/InsteonOnOffOutletDevice.d.ts.map +1 -1
  287. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts +0 -1
  288. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts.map +1 -1
  289. package/dist/esm/types/Devices/Insteon/index.d.ts +10 -11
  290. package/dist/esm/types/Devices/Insteon/index.d.ts.map +1 -1
  291. package/dist/esm/types/Devices/Lutron/Generated/LoadShed.d.ts +2 -3
  292. package/dist/esm/types/Devices/Lutron/Generated/LoadShed.d.ts.map +1 -1
  293. package/dist/esm/types/Devices/NodeFactory.d.ts +1 -1
  294. package/dist/esm/types/Devices/NodeFactory.d.ts.map +1 -1
  295. package/dist/esm/types/Devices/UDI/Generated/Channel.d.ts +2 -3
  296. package/dist/esm/types/Devices/UDI/Generated/Channel.d.ts.map +1 -1
  297. package/dist/esm/types/Devices/UDI/Generated/Em3MainChannel.d.ts +2 -3
  298. package/dist/esm/types/Devices/UDI/Generated/Em3MainChannel.d.ts.map +1 -1
  299. package/dist/esm/types/Devices/UDI/Generated/Main.d.ts +2 -3
  300. package/dist/esm/types/Devices/UDI/Generated/Main.d.ts.map +1 -1
  301. package/dist/esm/types/Devices/UDI/Generated/PulseCounter.d.ts +2 -3
  302. package/dist/esm/types/Devices/UDI/Generated/PulseCounter.d.ts.map +1 -1
  303. package/dist/esm/types/Devices/UDI/Generated/Relay.d.ts +2 -3
  304. package/dist/esm/types/Devices/UDI/Generated/Relay.d.ts.map +1 -1
  305. package/dist/esm/types/Devices/UDI/Generated/TemperatureSensor.d.ts +2 -3
  306. package/dist/esm/types/Devices/UDI/Generated/TemperatureSensor.d.ts.map +1 -1
  307. package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts +2 -3
  308. package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts.map +1 -1
  309. package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts +2 -3
  310. package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts.map +1 -1
  311. package/dist/esm/types/Devices/ZigBee/ZWaveBaseDevice.d.ts +10 -0
  312. package/dist/esm/types/Devices/ZigBee/ZWaveBaseDevice.d.ts.map +1 -0
  313. package/dist/esm/types/Devices/ZigBee/ZigBeeBase.d.ts +10 -0
  314. package/dist/esm/types/Devices/ZigBee/ZigBeeBase.d.ts.map +1 -0
  315. package/dist/esm/types/Devices/ZigBee/index.d.ts +2 -0
  316. package/dist/esm/types/Devices/ZigBee/index.d.ts.map +1 -0
  317. package/dist/esm/types/ISY.d.ts.map +1 -1
  318. package/dist/esm/types/ISYDevice.d.ts +3 -5
  319. package/dist/esm/types/ISYDevice.d.ts.map +1 -1
  320. package/dist/esm/types/ISYNode.d.ts +32 -25
  321. package/dist/esm/types/ISYNode.d.ts.map +1 -1
  322. package/dist/esm/types/Matter/Behaviors/BehaviorRegistry.d.ts +9 -5
  323. package/dist/esm/types/Matter/Behaviors/BehaviorRegistry.d.ts.map +1 -1
  324. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts +8 -5
  325. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  326. package/dist/esm/types/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.d.ts +321 -0
  327. package/dist/esm/types/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.d.ts.map +1 -0
  328. package/dist/esm/types/Matter/Behaviors/Insteon/ISYDimmableBehavior.d.ts +42 -0
  329. package/dist/esm/types/Matter/Behaviors/Insteon/ISYDimmableBehavior.d.ts.map +1 -0
  330. package/dist/esm/types/Matter/Behaviors/Insteon/ISYOnOffBehavior.d.ts +4 -4
  331. package/dist/esm/types/Matter/Behaviors/Insteon/ISYOnOffBehavior.d.ts.map +1 -1
  332. package/dist/esm/types/Matter/Behaviors/Insteon/IdentifyBehavior.d.ts +24 -0
  333. package/dist/esm/types/Matter/Behaviors/Insteon/IdentifyBehavior.d.ts.map +1 -0
  334. package/dist/esm/types/Matter/Behaviors/Insteon/RelayOnOffBehavior.d.ts +241 -0
  335. package/dist/esm/types/Matter/Behaviors/Insteon/RelayOnOffBehavior.d.ts.map +1 -0
  336. package/dist/esm/types/Matter/Behaviors/Insteon/index.d.ts +4 -0
  337. package/dist/esm/types/Matter/Behaviors/Insteon/index.d.ts.map +1 -0
  338. package/dist/esm/types/Matter/Bridge/Server.d.ts.map +1 -1
  339. package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts +4173 -42
  340. package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts.map +1 -1
  341. package/dist/esm/types/Model/EnumDefinition.d.ts +1 -1
  342. package/dist/esm/types/Registry.d.ts +37 -0
  343. package/dist/esm/types/Registry.d.ts.map +1 -0
  344. package/dist/esm/types/Utils.d.ts +13 -0
  345. package/dist/esm/types/Utils.d.ts.map +1 -1
  346. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  347. package/package.json +2 -2
  348. package/src/CodeGeneration/CodeFactory.ts +16 -8
  349. package/src/CodeGeneration/NodeClassFactory.ts +7 -9
  350. package/src/Definitions/Global/Commands.ts +16 -13
  351. package/src/Definitions/Global/Drivers.ts +56 -36
  352. package/src/Definitions/Global/Events.ts +4 -4
  353. package/src/Definitions/Insteon/generated/Boolean.ts +9 -0
  354. package/src/Definitions/Insteon/generated/Error.ts +9 -0
  355. package/src/Definitions/Insteon/generated/Lock.ts +28 -0
  356. package/src/Definitions/Insteon/generated/OnLevelRelay.ts +11 -0
  357. package/src/Devices/Brultech/Generated/Channel.ts +8 -9
  358. package/src/Devices/Brultech/Generated/Main.ts +11 -12
  359. package/src/Devices/CompositeDevice.ts +277 -0
  360. package/src/Devices/DeviceFactory.ts +1 -1
  361. package/src/Devices/ISYDeviceNode.ts +8 -2
  362. package/src/Devices/Insteon/Generated/AlertModuleArmed.ts +7 -8
  363. package/src/Devices/Insteon/Generated/AlertModuleSiren.ts +7 -8
  364. package/src/Devices/Insteon/Generated/BallastRelayLampSwitch.ts +7 -8
  365. package/src/Devices/Insteon/Generated/BinaryAlarm.ts +7 -8
  366. package/src/Devices/Insteon/Generated/BinaryControl.ts +7 -8
  367. package/src/Devices/Insteon/Generated/DimmerLamp.ts +9 -10
  368. package/src/Devices/Insteon/Generated/DimmerLampSwitch.ts +9 -10
  369. package/src/Devices/Insteon/Generated/DimmerLampSwitchLed.ts +9 -10
  370. package/src/Devices/Insteon/Generated/DimmerMotorSwitch.ts +9 -10
  371. package/src/Devices/Insteon/Generated/DimmerSwitch.ts +6 -7
  372. package/src/Devices/Insteon/Generated/DoorLock.ts +7 -8
  373. package/src/Devices/Insteon/Generated/Ezio2x4Input.ts +7 -8
  374. package/src/Devices/Insteon/Generated/Ezio2x4Output.ts +7 -8
  375. package/src/Devices/Insteon/Generated/EzrainInput.ts +7 -8
  376. package/src/Devices/Insteon/Generated/EzrainOutput.ts +7 -8
  377. package/src/Devices/Insteon/Generated/FanLincMotor.ts +7 -8
  378. package/src/Devices/Insteon/Generated/I3KeypadFlags.ts +15 -16
  379. package/src/Devices/Insteon/Generated/I3PaddleFlags.ts +13 -14
  380. package/src/Devices/Insteon/Generated/ImeterSolo.ts +8 -9
  381. package/src/Devices/Insteon/Generated/IrLincTx.ts +6 -7
  382. package/src/Devices/Insteon/Generated/KeypadButton.ts +7 -8
  383. package/src/Devices/Insteon/Generated/KeypadDimmer.ts +9 -10
  384. package/src/Devices/Insteon/Generated/KeypadRelay.ts +7 -8
  385. package/src/Devices/Insteon/Generated/OnOffControl.ts +7 -8
  386. package/src/Devices/Insteon/Generated/Pir2844.ts +11 -12
  387. package/src/Devices/Insteon/Generated/Pir2844OnOff.ts +7 -8
  388. package/src/Devices/Insteon/Generated/Pir2844c.ts +11 -12
  389. package/src/Devices/Insteon/Generated/RelayLamp.ts +7 -8
  390. package/src/Devices/Insteon/Generated/RelayLampSwitch.ts +7 -8
  391. package/src/Devices/Insteon/Generated/RelayLampSwitchLed.ts +7 -8
  392. package/src/Devices/Insteon/Generated/RelaySwitch.ts +6 -7
  393. package/src/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.ts +6 -7
  394. package/src/Devices/Insteon/Generated/RemoteLinc2.ts +7 -8
  395. package/src/Devices/Insteon/Generated/Siren.ts +10 -11
  396. package/src/Devices/Insteon/Generated/SirenAlert.ts +6 -7
  397. package/src/Devices/Insteon/Generated/TempLinc.ts +13 -14
  398. package/src/Devices/Insteon/Generated/Thermostat.ts +13 -14
  399. package/src/Devices/Insteon/Generated/X10.ts +7 -8
  400. package/src/Devices/Insteon/InsteonDeviceFactory.ts +26 -12
  401. package/src/Devices/Insteon/InsteonDimmableDevice.ts +4 -4
  402. package/src/Devices/Insteon/InsteonDimmerOutletDevice.ts +3 -2
  403. package/src/Devices/Insteon/InsteonDoorWindowSensorDevice.ts +30 -7
  404. package/src/Devices/Insteon/InsteonFanDevice.ts +21 -36
  405. package/src/Devices/Insteon/InsteonOnOffOutletDevice.ts +5 -17
  406. package/src/Devices/Insteon/InsteonRelayDevice.ts +2 -3
  407. package/src/Devices/Insteon/index.ts +10 -14
  408. package/src/Devices/Lutron/Generated/LoadShed.ts +7 -8
  409. package/src/Devices/NCD/Generated/Relay.ts +19 -23
  410. package/src/Devices/NodeFactory.ts +1 -1
  411. package/src/Devices/Poly/Generated/MatterBridge.ts +6 -7
  412. package/src/Devices/Scene/Generated/Scene.ts +5 -6
  413. package/src/Devices/UDI/Generated/Channel.ts +8 -9
  414. package/src/Devices/UDI/Generated/Em3MainChannel.ts +11 -12
  415. package/src/Devices/UDI/Generated/Main.ts +8 -9
  416. package/src/Devices/UDI/Generated/PulseCounter.ts +9 -10
  417. package/src/Devices/UDI/Generated/Relay.ts +7 -8
  418. package/src/Devices/UDI/Generated/TemperatureSensor.ts +7 -8
  419. package/src/Devices/ZWave/Generated/ColorSwitch.ts +17 -18
  420. package/src/Devices/ZWave/Generated/DimmerSwitch.ts +7 -8
  421. package/src/Devices/ZigBee/ZigBeeBase.ts +22 -0
  422. package/src/Devices/ZigBee/index.ts +13 -0
  423. package/src/Devices/ZigBeeLegacy/Generated/Relay.ts +22 -20
  424. package/src/Devices/ZigBeeLegacy/Generated/Thermostat.ts +92 -76
  425. package/src/ISY.ts +27 -5
  426. package/src/ISYDevice.ts +4 -3
  427. package/src/ISYNode.ts +48 -32
  428. package/src/Matter/Behaviors/BehaviorRegistry.ts +44 -8
  429. package/src/Matter/Behaviors/ISYClusterBehavior.ts +15 -6
  430. package/src/Matter/Behaviors/Insteon/DimmerLevelControlBehavior.ts +30 -0
  431. package/src/Matter/Behaviors/Insteon/IdentifyBehavior.ts +26 -0
  432. package/src/Matter/Behaviors/Insteon/RelayOnOffBehavior.ts +34 -0
  433. package/src/Matter/Behaviors/Insteon/index.ts +3 -0
  434. package/src/Matter/Bridge/Server.ts +93 -85
  435. package/src/Matter/Mappings/Insteon.ts +3 -3
  436. package/src/Matter/Mappings/MappingRegistry.ts +29 -40
  437. package/src/Registry.ts +112 -0
  438. package/src/Utils.ts +29 -0
  439. package/src/Devices/Insteon/DimmerLampSwitch.ts +0 -207
  440. package/src/Devices/Insteon/InsteonRelaySwitchDevice.ts +0 -11
  441. package/src/Devices/Insteon/RelayLampSwitch.ts +0 -132
  442. 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
  }
@@ -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>;
@@ -101,6 +106,8 @@ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cl
101
106
  return (this._device = this._device ?? (this.agent.get(ISYBridgedDeviceBehavior).device as P));
102
107
  }
103
108
 
109
+
110
+
104
111
  async handlePropertyChange({ driver, newValue, oldValue, formattedValue }: PropertyChange<P>) {
105
112
  // for (const key2 in this.map.attributes) {
106
113
  //await this.initialize();
@@ -123,6 +130,8 @@ export function ISYClusterBehavior<T extends Constructor<ClusterBehavior> & { cl
123
130
  // }
124
131
  }
125
132
  };
133
+ s.nodeClass = getConstructor(p);
134
+ return s;
126
135
  }
127
136
 
128
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
 
@@ -1,22 +1,23 @@
1
+ import * as Cluster from '@matter/types/cluster';
1
2
  import type * as Clusters from '@matter/types/clusters';
2
- import * as Cluster from '@matter/types/cluster'
3
3
 
4
- import type { Converter } from '../../Converters.js';
5
- import { DriverType } from '../../Definitions/Global/Drivers.js';
6
- import { Devices, Insteon } from '../../Devices/index.js';
7
- import type {Simplify, SimplifyDeep} from 'type-fest';
8
4
  import { ClusterBehavior, MutableEndpoint, SupportedBehaviors } from '@matter/main';
9
5
  import { DimmableLightDevice, OnOffLightDevice } from '@matter/main/devices';
10
6
  import { BridgedDeviceBasicInformationBehavior } from '@matter/node/behaviors';
11
7
  import type { DeviceTypeDefinition } from '@project-chip/matter.js/device';
8
+ import type { Simplify, SimplifyDeep } from 'type-fest';
9
+ import type { Converter } from '../../Converters.js';
10
+ import { DriverType } from '../../Definitions/Global/Drivers.js';
12
11
  import { Family } from '../../Definitions/index.js';
13
12
  import type { Constructor } from '../../Devices/Constructor.js';
14
13
  import { NodeFactory } from '../../Devices/NodeFactory.js';
14
+ import { Devices, Insteon } from '../../Devices/index.js';
15
15
  import { CommandsOf, DriversOf, ISYNode } from '../../ISYNode.js';
16
16
  import { ClusterType } from '../../Model/ClusterType.js';
17
17
  import type { PathsWithLimit, PickOfType, Remove } from '../../Utils.js';
18
18
  import { ISYBridgedDeviceBehavior } from '../Behaviors/ISYBridgedDeviceBehavior.js';
19
- import { ISYOnOffBehavior } from '../Behaviors/Insteon/ISYOnOffBehavior.js';
19
+ import { BehaviorRegistry } from '../Behaviors/BehaviorRegistry.js';
20
+
20
21
 
21
22
  // #region Type aliases (16)
22
23
 
@@ -27,7 +28,6 @@ export type AttributeMapping<B, D> =
27
28
  export type ClusterMapping<B, T extends ISYNode<any, any, any, any>> = {
28
29
  attributes?: ClusterAttributeMapping<B, T>;
29
30
  commands?: ClusterCommandMapping<B, T>;
30
-
31
31
  };
32
32
  export type ClusterAttributeMapping<A, K> = {
33
33
  [key in keyof Cluster.ClusterType.AttributesOf<A>]: { driver: Extract<keyof DriversOf<K>, string>; converter?: Converter.KnownConverters } | Extract<keyof DriversOf<K>, string>;
@@ -91,43 +91,33 @@ export type CommandMapping<B, D> =
91
91
  // behavior?: typeof ClusterBehavior;
92
92
 
93
93
  // }
94
- export interface DeviceToClusterMap<T extends ISYNode<Family, any, any, any>, D extends MutableEndpoint> {
94
+ export interface DeviceToClusterMap<T extends ISYNode<Family, any, any, any>, D extends MutableEndpoint> {
95
95
  deviceType: D;
96
96
  mapping: EndpointMapping<D, T>;
97
- };
98
-
99
-
100
-
97
+ }
101
98
 
102
99
  export interface Mapping<T extends ISYNode, D extends MutableEndpoint> {
103
100
  deviceType: D;
104
101
 
105
102
  nodeType?: T;
106
103
  mapping?: {
107
- [K in keyof D['behaviors']]?:
108
- {attributes?: {
109
- [K2 in keyof Cluster.ClusterType.AttributesOf<D['behaviors'][K]>]: { driver: keyof DriversOf<T>; converter?: Converter.KnownConverters } | keyof DriversOf<T>;
110
- },
111
- commands?: {
112
- [K2 in keyof Cluster.ClusterType.CommandsOf<D['behaviors'][K]>]: { command: keyof CommandsOf<T>; converter?: Converter.KnownConverters } | keyof CommandsOf<T>;
113
- }
114
- }
115
- }
116
-
117
-
118
-
104
+ [K in keyof D['behaviors']]?: {
105
+ attributes?: {
106
+ [K2 in keyof Cluster.ClusterType.AttributesOf<D['behaviors'][K]>]: { driver: keyof DriversOf<T>; converter?: Converter.KnownConverters } | keyof DriversOf<T>;
107
+ };
108
+ commands?: {
109
+ [K2 in keyof Cluster.ClusterType.CommandsOf<D['behaviors'][K]>]: { command: keyof CommandsOf<T>; converter?: Converter.KnownConverters } | keyof CommandsOf<T>;
110
+ };
111
+ };
112
+ };
119
113
  }
120
114
 
121
- function addA<T extends ISYNode<any,any,any,any>,D extends MutableEndpoint>(mapping1: Mapping<T,D>, mapping2: Mapping<T,D>) : Mapping<T,D> {
122
- return {deviceType: mapping1.deviceType, nodeType: mapping1.nodeType, mapping: {...mapping1.mapping, ...mapping2.mapping}};
123
-
124
- }
125
-
126
-
127
-
115
+ function addA<T extends ISYNode<any, any, any, any>, D extends MutableEndpoint>(mapping1: Mapping<T, D>, mapping2: Mapping<T, D>): Mapping<T, D> {
116
+ return { deviceType: mapping1.deviceType, nodeType: mapping1.nodeType, mapping: { ...mapping1.mapping, ...mapping2.mapping } };
117
+ }
128
118
 
129
119
  export type EndpointMapping<A extends MutableEndpoint, D extends ISYNode<Family, any, any, any>> = {
130
- [K in StringKeys<A['behaviors']>]?: ClusterMapping<A['behaviors'][K],D> //{
120
+ [K in StringKeys<A['behaviors']>]?: ClusterMapping<A['behaviors'][K], D>; //{
131
121
  /*attributes?: AttributeMapping<A['behaviors'][Uncapitalize<K>], D>;
132
122
  commands?: CommandMapping<A['behaviors'][Uncapitalize<K>], D>;*/
133
123
  //};
@@ -154,13 +144,10 @@ export type EndpointMapping1<A extends MutableEndpoint, K> = {
154
144
 
155
145
  type SupportedFamily = Family.Insteon | Family.ZWave | Family.ZigBee;
156
146
  export type FamilyToClusterMap<T extends SupportedFamily> = { Family: T } & {
157
- [Type in Extract<keyof Devices.Insteon, `${string}Node`> as Remove<Type, 'Node'>]?: DeviceToClusterMap<InstanceType<Devices.Insteon[Type]>, MutableEndpoint>;
147
+ [Type in keyof Devices.Insteon]?: Devices.Insteon[Type] extends {Node: Constructor<ISYNode<any,any,any,any>>} ?DeviceToClusterMap<InstanceType<Devices.Insteon[Type]["Node"]>, MutableEndpoint> : undefined;
158
148
  };
159
149
 
160
- interface ISYtoMatterMapping<N extends ISYNode, M extends MutableEndpoint> extends DeviceToClusterMap<N, M> {
161
-
162
-
163
- }
150
+ interface ISYtoMatterMapping<N extends ISYNode, M extends MutableEndpoint> extends DeviceToClusterMap<N, M> {}
164
151
 
165
152
  export function add<const F extends SupportedFamily, const T extends ISYNode<F>, const D extends MutableEndpoint>(
166
153
  familyToClusterMap: FamilyToClusterMap<F>,
@@ -275,7 +262,10 @@ export class MappingRegistry {
275
262
 
276
263
  regMap = MappingRegistry.map.get(x.family);
277
264
  let m = map[key] as DeviceToClusterMap<ISYNode, MutableEndpoint>;
278
- m = { deviceType: m.deviceType.with(BridgedDeviceBasicInformationBehavior, ISYBridgedDeviceBehavior), mapping: m.mapping };
265
+ let deviceType = m.deviceType;
266
+ deviceType = deviceType.with(BridgedDeviceBasicInformationBehavior, ISYBridgedDeviceBehavior);
267
+
268
+ m = { deviceType: deviceType, mapping: m.mapping };
279
269
 
280
270
  regMap.set(keys[1], m);
281
271
  regMap.set(x.name, m);
@@ -299,8 +289,7 @@ var clusterMap = {
299
289
  }
300
290
  };
301
291
 
302
-
303
- interface SimplyEndpointMapping<T extends ISYNode<Family, any, any, any>,K extends MutableEndpoint> extends SimplifyDeep<ISYtoMatterMapping<T,K>> {}
292
+ interface SimplyEndpointMapping<T extends ISYNode<Family, any, any, any>, K extends MutableEndpoint> extends SimplifyDeep<ISYtoMatterMapping<T, K>> {}
304
293
 
305
294
  /*
306
295
  const map = {