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
@@ -17,7 +17,7 @@ const nodeDefId = "RelayLoadControl";
17
17
  type Commands = Relay.Commands;
18
18
  type Drivers = Relay.Drivers;
19
19
 
20
- export class RelayNode extends Base<Drivers, Commands> implements Relay.Interface {
20
+ class RelayNode extends Base<Drivers, Commands> implements Relay.Interface {
21
21
  public override readonly commands = {
22
22
  DON: this.on,
23
23
  DOF: this.off,
@@ -25,36 +25,38 @@ export class RelayNode extends Base<Drivers, Commands> implements Relay.Interfac
25
25
  ADRPST: this.adr
26
26
  };
27
27
  static override nodeDefId = "RelayLoadControl";
28
- static override implements = ["RelayLoadControl"];
29
- declare readonly nodeDefId: "RelayLoadControl";
28
+ static override implements = ['RelayLoadControl'];
29
+ declare readonly nodeDefId: 'RelayLoadControl';
30
30
  constructor (isy: ISY, nodeInfo: NodeInfo) {
31
31
  super(isy, nodeInfo);
32
- this.drivers.ST = Driver.create("ST", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: "Status", name: "status" });
33
- this.drivers.ERR = Driver.create("ERR", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: "Responding", name: "responding" });
32
+ this.drivers.ST = Driver.create("ST", this, nodeInfo.state['ST'], { uom: UnitOfMeasure.Unknown, label: "Status", name: "status" });
33
+ this.drivers.ERR = Driver.create("ERR", this, nodeInfo.state['ERR'], { uom: UnitOfMeasure.Unknown, label: "Responding", name: "responding" });
34
34
  }
35
35
  async on() { return this.sendCommand("DON"); }
36
36
  async off() { return this.sendCommand("DOF"); }
37
37
  async query() { return this.sendCommand("QUERY"); }
38
- async adr(value: (0 | 1)) { return this.sendCommand("ADRPST", value); }
39
- public get status(): (0 | 100) {
40
- return this.drivers.ST?.value;
41
- }
42
- public get responding(): ZigBeeLegacy.Error {
43
- return this.drivers.ERR?.value;
44
- }
38
+ async adr(value: ) { return this.sendCommand("ADRPST", value); }
39
+ public get status(): {
40
+
41
+ return this.drivers.ST?.value;
42
+ }
43
+ public
44
+ get responding():
45
+ {
46
+ return this.drivers.ERR?.value;
47
+ }
45
48
  }
46
49
 
47
50
  NodeFactory.register(RelayNode);
48
51
 
49
52
  export namespace Relay {
50
53
  export interface Interface extends Omit<InstanceType<typeof RelayNode>, keyof ISYDeviceNode<any, any, any, any>> {
51
- nodeDefId: "RelayLoadControl";
52
54
  }
53
55
  export function is(node: ISYNode<any, any, any, any>): node is RelayNode {
54
- return ["RelayLoadControl"].includes(node.nodeDefId);
56
+ return ['RelayLoadControl'].includes(node.nodeDefId);
55
57
  }
56
58
  export function isImplementedBy(node: ISYNode<any, any, any, any>): node is RelayNode {
57
- return ["RelayLoadControl"].includes(node.nodeDefId);
59
+ return ['RelayLoadControl'].includes(node.nodeDefId);
58
60
  }
59
61
  export function create(isy: ISY, nodeInfo: NodeInfo) {
60
62
  return new RelayNode(isy, nodeInfo);
@@ -73,21 +75,21 @@ export namespace Relay {
73
75
  label: "Query";
74
76
  name: "query";
75
77
  };
76
- ADRPST: ((value: (0 | 1)) => Promise<boolean>) & {
78
+ ADRPST: ((value: ) => Promise<boolean>) & {
77
79
  label: "ADR";
78
80
  name: "adr";
79
81
  };
80
82
  };
81
83
  export type Drivers = {
82
84
  ST: {
83
- uom: UnitOfMeasure.Percent;
84
- value: (0 | 100);
85
+ uom: ;
86
+ value: ;
85
87
  label: "Status";
86
88
  name: "status";
87
89
  };
88
90
  ERR: {
89
- uom: UnitOfMeasure.Index;
90
- value: ZigBeeLegacy.Error;
91
+ uom: ;
92
+ value: ;
91
93
  label: "Responding";
92
94
  name: "responding";
93
95
  };
@@ -17,7 +17,7 @@ const nodeDefId = "Thermostat";
17
17
  type Commands = Thermostat.Commands;
18
18
  type Drivers = Thermostat.Drivers;
19
19
 
20
- export class ThermostatNode extends Base<Drivers, Commands> implements Thermostat.Interface {
20
+ class ThermostatNode extends Base<Drivers, Commands> implements Thermostat.Interface {
21
21
  public override readonly commands = {
22
22
  CLISPH: this.updateHeatSetpoint,
23
23
  CLISPC: this.updateCoolSetpoint,
@@ -30,100 +30,116 @@ export class ThermostatNode extends Base<Drivers, Commands> implements Thermosta
30
30
  ADRPST: this.adr
31
31
  };
32
32
  static override nodeDefId = "Thermostat";
33
- static override implements = ["Thermostat"];
34
- declare readonly nodeDefId: "Thermostat";
33
+ static override implements = ['Thermostat'];
34
+ declare readonly nodeDefId: 'Thermostat';
35
35
  constructor (isy: ISY, nodeInfo: NodeInfo) {
36
36
  super(isy, nodeInfo);
37
- this.drivers.ST = Driver.create("ST", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Degree, label: "Temperature", name: "temperature" });
38
- this.drivers.CLISPH = Driver.create("CLISPH", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Degree, label: "Heat Setpoint", name: "heatSetpoint" });
39
- this.drivers.CLISPC = Driver.create("CLISPC", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Degree, label: "Cool Setpoint", name: "coolSetpoint" });
40
- this.drivers.CLIMD = Driver.create("CLIMD", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.ThermostatMode, label: "Mode", name: "mode" });
41
- this.drivers.CLIFS = Driver.create("CLIFS", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.ThermostatFanMode, label: "Fan Mode", name: "fanMode" });
42
- this.drivers.CLIHCS = Driver.create("CLIHCS", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.ThermostatHeatCoolState, label: "Heat/Cool State", name: "heatCoolState" });
43
- this.drivers.CLIFRS = Driver.create("CLIFRS", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.ThermostatFanRunState, label: "Fan State", name: "fanState" });
44
- this.drivers.CLISMD = Driver.create("CLISMD", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: "Schedule Mode", name: "scheduleMode" });
45
- this.drivers.ERR = Driver.create("ERR", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: "Responding", name: "responding" });
37
+ this.drivers.ST = Driver.create("ST", this, nodeInfo.state['ST'], { uom: UnitOfMeasure.Unknown, label: "Temperature", name: "temperature" });
38
+ this.drivers.CLISPH = Driver.create("CLISPH", this, nodeInfo.state['CLISPH'], { uom: UnitOfMeasure.Unknown, label: "Heat Setpoint", name: "heatSetpoint" });
39
+ this.drivers.CLISPC = Driver.create("CLISPC", this, nodeInfo.state['CLISPC'], { uom: UnitOfMeasure.Unknown, label: "Cool Setpoint", name: "coolSetpoint" });
40
+ this.drivers.CLIMD = Driver.create("CLIMD", this, nodeInfo.state['CLIMD'], { uom: UnitOfMeasure.Unknown, label: "Mode", name: "mode" });
41
+ this.drivers.CLIFS = Driver.create("CLIFS", this, nodeInfo.state['CLIFS'], { uom: UnitOfMeasure.Unknown, label: "Fan Mode", name: "fanMode" });
42
+ this.drivers.CLIHCS = Driver.create("CLIHCS", this, nodeInfo.state['CLIHCS'], { uom: UnitOfMeasure.Unknown, label: "Heat/Cool State", name: "heatCoolState" });
43
+ this.drivers.CLIFRS = Driver.create("CLIFRS", this, nodeInfo.state['CLIFRS'], { uom: UnitOfMeasure.Unknown, label: "Fan State", name: "fanState" });
44
+ this.drivers.CLISMD = Driver.create("CLISMD", this, nodeInfo.state['CLISMD'], { uom: UnitOfMeasure.Unknown, label: "Schedule Mode", name: "scheduleMode" });
45
+ this.drivers.ERR = Driver.create("ERR", this, nodeInfo.state['ERR'], { uom: UnitOfMeasure.Unknown, label: "Responding", name: "responding" });
46
46
  }
47
- async updateHeatSetpoint(value: number) { return this.sendCommand("CLISPH", value); }
48
- async updateCoolSetpoint(value: number) { return this.sendCommand("CLISPC", value); }
49
- async updateMode(value: number) { return this.sendCommand("CLIMD", value); }
50
- async updateFanMode(value: (0 | 1)) { return this.sendCommand("CLIFS", value); }
51
- async updateScheduleMode(value: number) { return this.sendCommand("CLISMD", value); }
52
- async heatSetpointShift(value: number) { return this.sendCommand("CLISPHD", value); }
53
- async coolSetpointShift(value: number) { return this.sendCommand("CLISPCD", value); }
47
+ async updateHeatSetpoint(value: ) { return this.sendCommand("CLISPH", value); }
48
+ async updateCoolSetpoint(value: ) { return this.sendCommand("CLISPC", value); }
49
+ async updateMode(value: ) { return this.sendCommand("CLIMD", value); }
50
+ async updateFanMode(value: ) { return this.sendCommand("CLIFS", value); }
51
+ async updateScheduleMode(value: ) { return this.sendCommand("CLISMD", value); }
52
+ async heatSetpointShift(value: ) { return this.sendCommand("CLISPHD", value); }
53
+ async coolSetpointShift(value: ) { return this.sendCommand("CLISPCD", value); }
54
54
  async query() { return this.sendCommand("QUERY"); }
55
- async adr(value: (0 | 1)) { return this.sendCommand("ADRPST", value); }
56
- public get temperature(): number {
57
- return this.drivers.ST?.value;
58
- }
59
- public get heatSetpoint(): number {
60
- return this.drivers.CLISPH?.value;
61
- }
62
- public get coolSetpoint(): number {
63
- return this.drivers.CLISPC?.value;
64
- }
65
- public get mode(): number {
66
- return this.drivers.CLIMD?.value;
67
- }
68
- public get fanMode(): (0 | 1) {
69
- return this.drivers.CLIFS?.value;
70
- }
71
- public get heatCoolState(): number {
72
- return this.drivers.CLIHCS?.value;
73
- }
74
- public get fanState(): (0 | 1) {
75
- return this.drivers.CLIFRS?.value;
76
- }
77
- public get scheduleMode(): number {
78
- return this.drivers.CLISMD?.value;
79
- }
80
- public get responding(): ZigBeeLegacy.Error {
81
- return this.drivers.ERR?.value;
82
- }
55
+ async adr(value: ) { return this.sendCommand("ADRPST", value); }
56
+ public get temperature(): {
57
+
58
+ return this.drivers.ST?.value;
59
+ }
60
+ public
61
+ get heatSetpoint():
62
+ {
63
+ return this.drivers.CLISPH?.value;
64
+ }
65
+ public
66
+ get coolSetpoint():
67
+ {
68
+ return this.drivers.CLISPC?.value;
69
+ }
70
+ public
71
+ get mode():
72
+ {
73
+ return this.drivers.CLIMD?.value;
74
+ }
75
+ public
76
+ get fanMode():
77
+ {
78
+ return this.drivers.CLIFS?.value;
79
+ }
80
+ public
81
+ get heatCoolState():
82
+ {
83
+ return this.drivers.CLIHCS?.value;
84
+ }
85
+ public
86
+ get fanState():
87
+ {
88
+ return this.drivers.CLIFRS?.value;
89
+ }
90
+ public
91
+ get scheduleMode():
92
+ {
93
+ return this.drivers.CLISMD?.value;
94
+ }
95
+ public
96
+ get responding():
97
+ {
98
+ return this.drivers.ERR?.value;
99
+ }
83
100
  }
84
101
 
85
102
  NodeFactory.register(ThermostatNode);
86
103
 
87
104
  export namespace Thermostat {
88
105
  export interface Interface extends Omit<InstanceType<typeof ThermostatNode>, keyof ISYDeviceNode<any, any, any, any>> {
89
- nodeDefId: "Thermostat";
90
106
  }
91
107
  export function is(node: ISYNode<any, any, any, any>): node is ThermostatNode {
92
- return ["Thermostat"].includes(node.nodeDefId);
108
+ return ['Thermostat'].includes(node.nodeDefId);
93
109
  }
94
110
  export function isImplementedBy(node: ISYNode<any, any, any, any>): node is ThermostatNode {
95
- return ["Thermostat"].includes(node.nodeDefId);
111
+ return ['Thermostat'].includes(node.nodeDefId);
96
112
  }
97
113
  export function create(isy: ISY, nodeInfo: NodeInfo) {
98
114
  return new ThermostatNode(isy, nodeInfo);
99
115
  }
100
116
  export const Node = ThermostatNode;
101
117
  export type Commands = {
102
- CLISPH: ((value: number) => Promise<boolean>) & {
118
+ CLISPH: ((value: ) => Promise<boolean>) & {
103
119
  label: "Heat Setpoint";
104
120
  name: "updateHeatSetpoint";
105
121
  };
106
- CLISPC: ((value: number) => Promise<boolean>) & {
122
+ CLISPC: ((value: ) => Promise<boolean>) & {
107
123
  label: "Cool Setpoint";
108
124
  name: "updateCoolSetpoint";
109
125
  };
110
- CLIMD: ((value: number) => Promise<boolean>) & {
126
+ CLIMD: ((value: ) => Promise<boolean>) & {
111
127
  label: "Mode";
112
128
  name: "updateMode";
113
129
  };
114
- CLIFS: ((value: (0 | 1)) => Promise<boolean>) & {
130
+ CLIFS: ((value: ) => Promise<boolean>) & {
115
131
  label: "Fan Mode";
116
132
  name: "updateFanMode";
117
133
  };
118
- CLISMD: ((value: number) => Promise<boolean>) & {
134
+ CLISMD: ((value: ) => Promise<boolean>) & {
119
135
  label: "Schedule Mode";
120
136
  name: "updateScheduleMode";
121
137
  };
122
- CLISPHD: ((value: number) => Promise<boolean>) & {
138
+ CLISPHD: ((value: ) => Promise<boolean>) & {
123
139
  label: "Heat Setpoint Shift";
124
140
  name: "heatSetpointShift";
125
141
  };
126
- CLISPCD: ((value: number) => Promise<boolean>) & {
142
+ CLISPCD: ((value: ) => Promise<boolean>) & {
127
143
  label: "Cool Setpoint Shift";
128
144
  name: "coolSetpointShift";
129
145
  };
@@ -131,63 +147,63 @@ export namespace Thermostat {
131
147
  label: "Query";
132
148
  name: "query";
133
149
  };
134
- ADRPST: ((value: (0 | 1)) => Promise<boolean>) & {
150
+ ADRPST: ((value: ) => Promise<boolean>) & {
135
151
  label: "ADR";
136
152
  name: "adr";
137
153
  };
138
154
  };
139
155
  export type Drivers = {
140
156
  ST: {
141
- uom: UnitOfMeasure.Degree;
142
- value: number;
157
+ uom: ;
158
+ value: ;
143
159
  label: "Temperature";
144
160
  name: "temperature";
145
161
  };
146
162
  CLISPH: {
147
- uom: UnitOfMeasure.Degree;
148
- value: number;
163
+ uom: ;
164
+ value: ;
149
165
  label: "Heat Setpoint";
150
166
  name: "heatSetpoint";
151
167
  };
152
168
  CLISPC: {
153
- uom: UnitOfMeasure.Degree;
154
- value: number;
169
+ uom: ;
170
+ value: ;
155
171
  label: "Cool Setpoint";
156
172
  name: "coolSetpoint";
157
173
  };
158
174
  CLIMD: {
159
- uom: UnitOfMeasure.ThermostatMode;
160
- value: number;
175
+ uom: ;
176
+ value: ;
161
177
  label: "Mode";
162
178
  name: "mode";
163
179
  };
164
180
  CLIFS: {
165
- uom: UnitOfMeasure.ThermostatFanMode;
166
- value: (0 | 1);
181
+ uom: ;
182
+ value: ;
167
183
  label: "Fan Mode";
168
184
  name: "fanMode";
169
185
  };
170
186
  CLIHCS: {
171
- uom: UnitOfMeasure.ThermostatHeatCoolState;
172
- value: number;
187
+ uom: ;
188
+ value: ;
173
189
  label: "Heat/Cool State";
174
190
  name: "heatCoolState";
175
191
  };
176
192
  CLIFRS: {
177
- uom: UnitOfMeasure.ThermostatFanRunState;
178
- value: (0 | 1);
193
+ uom: ;
194
+ value: ;
179
195
  label: "Fan State";
180
196
  name: "fanState";
181
197
  };
182
198
  CLISMD: {
183
- uom: UnitOfMeasure.Index;
184
- value: number;
199
+ uom: ;
200
+ value: ;
185
201
  label: "Schedule Mode";
186
202
  name: "scheduleMode";
187
203
  };
188
204
  ERR: {
189
- uom: UnitOfMeasure.Index;
190
- value: ZigBeeLegacy.Error;
205
+ uom: ;
206
+ value: ;
191
207
  label: "Responding";
192
208
  name: "responding";
193
209
  };
package/src/ISY.ts CHANGED
@@ -28,6 +28,7 @@ import { ISYError } from './ISYError.js';
28
28
  import type { Config } from './Model/Config.js';
29
29
  import { findPackageJson } from './Utils.js';
30
30
  import { GenericNode } from './Devices/GenericNode.js';
31
+ import { CompositeDevice } from './Devices/CompositeDevice.js';
31
32
 
32
33
  type InitStep = 'config' | 'loadNodes' | 'readFolders' | 'readDevices' | 'readScenes' | 'variables' | 'websocket' | 'refreshStatuses' | 'initialize';
33
34
 
@@ -753,7 +754,7 @@ export class ISY extends EventEmitter implements Disposable {
753
754
  } else {
754
755
  this.deviceMap[nodeInfo.pnode].push(nodeInfo.address);
755
756
  }
756
- let newDevice: ISYDeviceNode<any, any, any, any> = null;
757
+ let newDevice = null;
757
758
 
758
759
  // let deviceTypeInfo = this.isyTypeToTypeName(device.type, device.address);
759
760
  // this.logger.info(JSON.stringify(deviceTypeInfo));
@@ -761,7 +762,7 @@ export class ISY extends EventEmitter implements Disposable {
761
762
  const enabled = nodeInfo.enabled ?? true;
762
763
  const d = await NodeFactory.get(nodeInfo);
763
764
  const m = DeviceFactory.getDeviceDetails(nodeInfo);
764
- const cls = m?.class ?? d;
765
+ const cls = m.class ?? d;
765
766
  nodeInfo.property = Array.isArray(nodeInfo.property) ? nodeInfo.property : [nodeInfo.property];
766
767
  nodeInfo.state = nodeInfo.property.reduce((acc, p) => {
767
768
  if (p && p?.id) {
@@ -773,7 +774,8 @@ export class ISY extends EventEmitter implements Disposable {
773
774
 
774
775
  if (cls) {
775
776
  try {
776
- newDevice = new cls(this, nodeInfo) as ISYDeviceNode<any, any, any, any>;
777
+ newDevice = new cls(this, nodeInfo);
778
+
777
779
  } catch (e) {
778
780
  this.logger.error(`Error creating device ${nodeInfo.name} with type ${nodeInfo.type} and nodedef ${nodeInfo.nodeDefId}: ${e.message}`);
779
781
  continue;
@@ -808,7 +810,12 @@ export class ISY extends EventEmitter implements Disposable {
808
810
  // this.deviceList.push(newDevice);
809
811
  } else {
810
812
  }
811
- this.nodeMap.set(newDevice.address, newDevice);
813
+ this.nodeMap.set(newDevice.address, CompositeDevice.isComposite(newDevice) ? newDevice.root : newDevice);
814
+ if(CompositeDevice.isComposite(newDevice))
815
+ {
816
+ if(this.deviceList.set)
817
+ this.deviceList.set(newDevice.address, newDevice);
818
+ }
812
819
  } else {
813
820
  this.logger.info(`Ignoring disabled device: ${nodeInfo.name}`);
814
821
  }
@@ -816,7 +823,22 @@ export class ISY extends EventEmitter implements Disposable {
816
823
  this.logger.error(`Error loading device node: ${e.message}`);
817
824
  }
818
825
  }
819
- this.logger.info(`${this.nodeMap.size} devices added.`);
826
+ this.logger.info(`${this.nodeMap.size} nodes added.`);
827
+ for(const node of this.nodeMap.values()) {
828
+ if(node.parentAddress !== node.address) {
829
+ let parent = this.deviceList.get(node.parentAddress) as unknown as CompositeDevice<any,any>;
830
+ if(parent && CompositeDevice.isComposite(parent))
831
+ parent.addNode(node);
832
+
833
+ }
834
+ else
835
+ {
836
+ this.deviceList.set(node.address, node as unknown as ISYDevice<any, any, any, any>);
837
+ }
838
+
839
+
840
+ }
841
+ this.logger.info(`${this.deviceList.size} unique devices added.`);
820
842
  } catch (e) {
821
843
  throw new ISYInitializationError(e, 'readDevices');
822
844
  }
package/src/ISYDevice.ts CHANGED
@@ -5,14 +5,14 @@ import { ISYDeviceNode } from './Devices/ISYDeviceNode.js';
5
5
  import type { ISYNode } from './ISYNode.js';
6
6
  import type { ISYScene } from './ISYScene.js';
7
7
 
8
- export interface ISYDevice<T extends Family, D extends ISYNode.DriverSignatures, C extends ISYNode.CommandSignatures, E extends ISYNode.EventSignatures> extends ISYDeviceInfo {
8
+ export interface ISYDevice<T extends Family, D, C, E> extends ISYDeviceInfo {
9
9
  // #region Properties (22)
10
10
 
11
11
  address: string;
12
12
  category: Category;
13
- commands: Command.ForAll<C>;
13
+ commands: C;
14
14
  deviceClass: any;
15
- drivers: Driver.ForAll<D>;
15
+ drivers: D;
16
16
 
17
17
  events: E;
18
18
  enabled: boolean;
@@ -52,6 +52,7 @@ export function isDeviceClass<T extends Family, D extends ISYNode.DriverSignatur
52
52
  return device.prototype instanceof ISYDeviceNode;
53
53
  }
54
54
 
55
+
55
56
  export interface ISYDeviceInfo {
56
57
  type: string;
57
58
  deviceClass: any;
package/src/ISYNode.ts CHANGED
@@ -4,18 +4,22 @@ import { Family } from './Definitions/Global/Families.js';
4
4
  import { UnitOfMeasure } from './Definitions/Global/UOM.js';
5
5
  import { ISY } from './ISY.js';
6
6
 
7
+ import type { Merge, UnionToIntersection } from '@matter/general';
7
8
  import { CliConfigSetLevels } from 'winston/lib/winston/config/index.js';
8
9
  import { Converter } from './Converters.js';
9
10
  import type { Command } from './Definitions/Global/Commands.js';
10
11
  import { Event } from './Definitions/Global/Events.js';
12
+ import type { CompositeDevice } from './Devices/CompositeDevice.js';
11
13
  import type { Constructor } from './Devices/Constructor.js';
14
+
15
+
16
+ import { NodeType } from './ISYConstants.js';
17
+ import type { ISYScene } from './ISYScene.js';
12
18
  import type { DriverState } from './Model/DriverState.js';
13
19
  import { NodeInfo } from './Model/NodeInfo.js';
14
20
  import type { NodeNotes } from './Model/NodeNotes.js';
15
21
  import { type ObjectToUnion, type StringKeys } from './Utils.js';
16
- import { NodeType } from './ISYConstants.js';
17
- import type { ISYScene } from './ISYScene.js';
18
- import type { Merge, UnionToIntersection } from '@matter/general';
22
+ import type { ISYDevice } from './ISYDevice.js';
19
23
 
20
24
  //type DriverValues<DK extends string | number | symbol,V = any> = {[x in DK]?:V};
21
25
 
@@ -24,7 +28,7 @@ export class ISYNode<
24
28
  D extends ISYNode.DriverSignatures = {},
25
29
  C extends ISYNode.CommandSignatures = {},
26
30
  E extends ISYNode.EventSignatures = { [x in keyof D]: Event.DriverToEvent<D[x]> & { driver: x } } & { [x in keyof C]: Event.CommandToEvent<C[x]> & { command: x } }
27
- > {
31
+ > {
28
32
  // #region Properties (32)
29
33
 
30
34
  static #displayNameFunction: Function;
@@ -157,18 +161,17 @@ export class ISYNode<
157
161
 
158
162
  public applyStatus(prop: DriverState) {
159
163
  try {
160
- var d = this.drivers[prop.id];
164
+ var d = this.drivers[prop.id];
161
165
 
162
- if (d) {
163
- d.apply(prop);
166
+ if (d) {
167
+ d.apply(prop);
164
168
 
165
- this.logger(`Property ${d?.label ?? prop.id} (${prop.id}) refreshed to: ${d.value} (${prop.formatted}})`);
166
- //d.state.value = this.convertFrom(prop.value, prop.uom, prop.id);
167
- //d.state.formatted = prop.formatted;
168
- //d.state.uom = prop.uom;
169
- }
170
- }
171
- catch(e) {
169
+ this.logger(`Property ${d?.label ?? prop.id} (${prop.id}) refreshed to: ${d.value} (${prop.formatted}})`);
170
+ //d.state.value = this.convertFrom(prop.value, prop.uom, prop.id);
171
+ //d.state.formatted = prop.formatted;
172
+ //d.state.uom = prop.uom;
173
+ }
174
+ } catch (e) {
172
175
  this.logger(e?.message ?? e, 'error');
173
176
  }
174
177
  }
@@ -270,9 +273,9 @@ export class ISYNode<
270
273
  const e = event.control;
271
274
  const dispName = this.commands[e]?.name;
272
275
  if (dispName !== undefined && dispName !== null) {
273
- this.logger(`Command ${dispName} (${e}) event sent.`);
276
+ this.logger(`Command ${dispName} (${e}) event received.`);
274
277
  } else {
275
- this.logger(`Command ${e} event sent.`);
278
+ this.logger(`Command ${e} event received.`);
276
279
  }
277
280
  this.handleControlTrigger(e);
278
281
  return true;
@@ -282,11 +285,12 @@ export class ISYNode<
282
285
  public handlePropertyChange(propertyName: StringKeys<D>, value: any, uom: UnitOfMeasure, prec?: number, formattedValue?: string): boolean {
283
286
  this.lastChanged = new Date();
284
287
  let driver = this.drivers[propertyName];
285
- this.logger(`Driver ${propertyName} (${driver?.label} value update ${value} (${formattedValue}) uom: ${UnitOfMeasure[uom]} event received.`);
286
- const oldValue = driver?.value;
288
+ /*this.logger(`Driver ${propertyName} (${driver?.label} value update ${value} (${formattedValue}) uom: ${UnitOfMeasure[uom]} event received.`);*/
289
+ const oldValue = driver?.state.value;
290
+ const oldValueRaw = driver?.state.rawValue;
287
291
  if (driver?.patch(value, formattedValue, uom, prec)) {
288
- this.logger(`Driver ${driver.label} updated from ${oldValue} to ${value} (${formattedValue})`);
289
- this.emit('propertyChanged', propertyName, value, oldValue, formattedValue);
292
+ this.logger(`Driver ${driver.label} updated from ${oldValue} (${oldValueRaw}) to ${driver.state.value} (${driver.state.rawValue})`);
293
+ //this.emit('propertyChanged', propertyName, value, oldValue, formattedValue);
290
294
  this.scenes?.forEach((element) => {
291
295
  this.logger(`Recalulating ${element.deviceFriendlyName}`);
292
296
  element.recalculateState();
@@ -359,23 +363,24 @@ export class ISYNode<
359
363
  public async sendCommand(command: StringKeys<C>, value: string | number, parameters: Record<string | symbol, string | number | undefined>);
360
364
  public async sendCommand(command: StringKeys<C>, value: string | number): Promise<any>;
361
365
  public async sendCommand(command: StringKeys<C>, parameters: Record<string | symbol, string | number | undefined>): Promise<any>;
362
- async sendCommand(command: StringKeys<C>, valueOrParameters?: string | number | Record<string | symbol, string | number | undefined>, parameters?: Record<string | symbol, string | number | undefined>): Promise<any> {
366
+ async sendCommand(
367
+ command: StringKeys<C>,
368
+ valueOrParameters?: string | number | Record<string | symbol, string | number | undefined>,
369
+ parameters?: Record<string | symbol, string | number | undefined>
370
+ ): Promise<any> {
363
371
  if (valueOrParameters === null || valueOrParameters === undefined) {
364
372
  return this.isy.sendNodeCommand(this, command);
365
373
  }
366
374
 
367
- if(parameters === null || parameters === undefined) {
368
- return this.isy.sendNodeCommand(this, command, valueOrParameters);
369
- }
370
- if(typeof valueOrParameters === 'object') {
371
- return this.isy.sendNodeCommand(this, command, {...valueOrParameters,...parameters});
372
- }
373
- if(typeof valueOrParameters === 'string' || typeof valueOrParameters === 'number') {
374
- return this.isy.sendNodeCommand(this, command, { default: valueOrParameters, ...parameters });
375
- }
376
-
377
-
378
-
375
+ if (parameters === null || parameters === undefined) {
376
+ return this.isy.sendNodeCommand(this, command, valueOrParameters);
377
+ }
378
+ if (typeof valueOrParameters === 'object') {
379
+ return this.isy.sendNodeCommand(this, command, { ...valueOrParameters, ...parameters });
380
+ }
381
+ if (typeof valueOrParameters === 'string' || typeof valueOrParameters === 'number') {
382
+ return this.isy.sendNodeCommand(this, command, { default: valueOrParameters, ...parameters });
383
+ }
379
384
  }
380
385
 
381
386
  public async updateProperty(propertyName: string, value: any): Promise<any> {
@@ -539,12 +544,17 @@ export type EventsOf<T> = T extends ISYNode<any, any, any, infer E> ? E : never;
539
544
  export namespace ISYNode {
540
545
  export type FromSignatures<T> = T extends DriverSignatures ? Driver.ForAll<T> : never;
541
546
 
542
- export type DriversOf<T> = T extends ISYNode<any, infer D, any, any> ? D : never;
547
+ type InternalDriversOf<T> = T extends ISYNode<any, infer D, any, any> ? D : never;
548
+
549
+ export type DriversOf<T> =
550
+ T extends ISYNode<any, any, any, any> ? InternalDriversOf<T>
551
+ : T extends CompositeDevice<any, any> ? T['drivers']
552
+ : never;
543
553
  export type CommandsOf<T> = T extends ISYNode<any, any, infer C, any> ? C : never;
544
554
  export type EventsOf<T> = T extends ISYNode<any, any, any, infer E> ? E : never;
545
555
  export type FamilyOf<T> = T extends ISYNode<infer F, any, any, any> ? F : never;
546
556
 
547
- export type DriverTypesOf<T extends ISYNode> = ObjectToUnion<DriversOf<T>>;
557
+ export type DriverTypesOf<T> = ObjectToUnion<DriversOf<T>>;
548
558
 
549
559
  export type CommandTypesOf<T extends ISYNode> = ObjectToUnion<CommandsOf<T>>;
550
560
 
@@ -552,9 +562,16 @@ export namespace ISYNode {
552
562
 
553
563
  export type EventNamesOf<T extends ISYNode> = EventTypesOf<T> extends { name: infer U } ? U : never;
554
564
 
555
- export type DriverNamesOf<T extends ISYNode> = DriverTypesOf<T> extends { name: infer U } ? U : never;
565
+ export type DriverNamesOf<T> =
566
+ DriverTypesOf<T> extends { name: infer U } ? U
567
+ : DriversOf<T> extends { name: infer U } ? U
568
+ : never;
569
+
570
+ export type DriverKeysOf<T> = keyof DriversOf<T>;
571
+
572
+ export type CommandKeysOf<T> = keyof CommandsOf<T>;
556
573
 
557
- export type CommandNamesOf<T extends ISYNode> = CommandTypesOf<T> extends { name: infer U } ? U : never;
574
+ export type CommandNamesOf<T extends ISYNode> = CommandsOf<T> extends { name: infer U } ? U : never;
558
575
  export type List = NodeList;
559
576
 
560
577
  export type DriverMap<T extends NodeList> = Flatten<{
@@ -584,7 +601,7 @@ export namespace ISYNode {
584
601
 
585
602
  export const With = <K extends Family, D extends DriverSignatures, C extends CommandSignatures, T extends Constructor<ISYNode<K, any, any, any>>>(Base: T) => {
586
603
  return class extends Base implements Omit<ISYNode<K, D, C>, 'events'> {
587
- declare drivers: Driver.ForAll<any, false>;
604
+ declare drivers: Driver.ForAll<D, false>;
588
605
  declare commands: Command.ForAll<C>;
589
606
  };
590
607
  };
@@ -592,7 +609,7 @@ export namespace ISYNode {
592
609
  export type WithDrivers<D extends DriverSignatures> =
593
610
  D extends Driver.Signatures<infer U extends keyof D> ?
594
611
  {
595
- [K in D[U]['name']]: D[U] extends { name: K } ? D[U]['value'] : unknown;
612
+ [K in D[U] as K['name']]: K['value'];
596
613
  }
597
614
  : never;
598
615