isy-nodejs 1.0.1-alpha.2 → 1.0.1-alpha.20

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 (261) hide show
  1. package/dist/cjs/Converters.js +66 -30
  2. package/dist/cjs/Converters.js.map +1 -1
  3. package/dist/cjs/Definitions/Global/Drivers.js +10 -3
  4. package/dist/cjs/Definitions/Global/Drivers.js.map +1 -1
  5. package/dist/cjs/Definitions/Global/Events.js +1 -2
  6. package/dist/cjs/Definitions/Global/Events.js.map +1 -1
  7. package/dist/cjs/Devices/Elk/ElkAlarmPanelDevice.js +3 -3
  8. package/dist/cjs/Devices/Elk/ElkAlarmSensorDevice.js +9 -6
  9. package/dist/cjs/Devices/Elk/ElkAlarmSensorDevice.js.map +1 -1
  10. package/dist/cjs/Devices/Insteon/InsteonBaseDevice.js +5 -3
  11. package/dist/cjs/Devices/Insteon/InsteonBaseDevice.js.map +1 -1
  12. package/dist/cjs/Devices/Insteon/InsteonFanDevice.js +7 -3
  13. package/dist/cjs/Devices/Insteon/InsteonFanDevice.js.map +1 -1
  14. package/dist/cjs/Devices/Insteon/InsteonMotionSensorDevice.js +5 -5
  15. package/dist/cjs/Devices/Insteon/InsteonRelayDevice.js +3 -8
  16. package/dist/cjs/Devices/Insteon/InsteonRelayDevice.js.map +1 -1
  17. package/dist/cjs/Devices/Insteon/RelayLampSwitch.js +72 -0
  18. package/dist/cjs/Devices/Insteon/RelayLampSwitch.js.map +1 -0
  19. package/dist/cjs/ISY.js +58 -43
  20. package/dist/cjs/ISY.js.map +1 -1
  21. package/dist/cjs/ISYNode.js +15 -12
  22. package/dist/cjs/ISYNode.js.map +1 -1
  23. package/dist/cjs/ISYScene.js +3 -3
  24. package/dist/cjs/ISYScene.js.map +1 -1
  25. package/dist/cjs/Matter/Behaviors/ISYBridgedDeviceBehavior.js +11 -4
  26. package/dist/cjs/Matter/Behaviors/ISYBridgedDeviceBehavior.js.map +1 -1
  27. package/dist/cjs/Matter/Behaviors/ISYClusterBehavior.js +26 -7
  28. package/dist/cjs/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  29. package/dist/cjs/Matter/Behaviors/ISYOnOffBehavior.js +11 -8
  30. package/dist/cjs/Matter/Behaviors/ISYOnOffBehavior.js.map +1 -1
  31. package/dist/cjs/Matter/{Server → Bridge}/Server.js +88 -51
  32. package/dist/cjs/Matter/Bridge/Server.js.map +1 -0
  33. package/dist/cjs/Matter/Mappings/Insteon.js +19 -15
  34. package/dist/cjs/Matter/Mappings/Insteon.js.map +1 -1
  35. package/dist/cjs/Matter/Mappings/register.js +1 -0
  36. package/dist/cjs/Matter/Mappings/register.js.map +1 -0
  37. package/dist/cjs/Model/ClusterMap.js +12 -9
  38. package/dist/cjs/Model/ClusterMap.js.map +1 -1
  39. package/dist/cjs/Utils.js +60 -9
  40. package/dist/cjs/Utils.js.map +1 -1
  41. package/dist/cjs/types/CodeGeneration/EnumFactory.d.ts +1 -1
  42. package/dist/cjs/types/Converters.d.ts +28 -8
  43. package/dist/cjs/types/Converters.d.ts.map +1 -1
  44. package/dist/cjs/types/Definitions/Global/Drivers.d.ts +4 -3
  45. package/dist/cjs/types/Definitions/Global/Drivers.d.ts.map +1 -1
  46. package/dist/cjs/types/Definitions/Global/Events.d.ts.map +1 -1
  47. package/dist/cjs/types/Devices/Elk/ElkAlarmSensorDevice.d.ts.map +1 -1
  48. package/dist/cjs/types/Devices/EndpointFor.d.ts +2 -2
  49. package/dist/cjs/types/Devices/Insteon/InsteonBaseDevice.d.ts +3 -3
  50. package/dist/cjs/types/Devices/Insteon/InsteonBaseDevice.d.ts.map +1 -1
  51. package/dist/cjs/types/Devices/Insteon/InsteonDevice.d.ts +4 -4
  52. package/dist/cjs/types/Devices/Insteon/InsteonFanDevice.d.ts +5 -4
  53. package/dist/cjs/types/Devices/Insteon/InsteonFanDevice.d.ts.map +1 -1
  54. package/dist/cjs/types/Devices/Insteon/InsteonRelayDevice.d.ts +2 -4
  55. package/dist/cjs/types/Devices/Insteon/InsteonRelayDevice.d.ts.map +1 -1
  56. package/dist/cjs/types/Devices/Insteon/RelayLampSwitch.d.ts +93 -0
  57. package/dist/cjs/types/Devices/Insteon/RelayLampSwitch.d.ts.map +1 -0
  58. package/dist/cjs/types/ISY.d.ts +27 -21
  59. package/dist/cjs/types/ISY.d.ts.map +1 -1
  60. package/dist/cjs/types/ISYNode.d.ts +4 -4
  61. package/dist/cjs/types/ISYNode.d.ts.map +1 -1
  62. package/dist/cjs/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +16 -6
  63. package/dist/cjs/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
  64. package/dist/cjs/types/Matter/Behaviors/ISYClusterBehavior.d.ts +13 -11
  65. package/dist/cjs/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  66. package/dist/cjs/types/Matter/Behaviors/ISYOnOffBehavior.d.ts +4 -4
  67. package/dist/cjs/types/Matter/Behaviors/ISYOnOffBehavior.d.ts.map +1 -1
  68. package/dist/cjs/types/Matter/Bridge/Server.d.ts +27 -0
  69. package/dist/cjs/types/Matter/Bridge/Server.d.ts.map +1 -0
  70. package/dist/cjs/types/Matter/Mappings/register.d.ts +1 -0
  71. package/dist/cjs/types/Matter/Mappings/register.d.ts.map +1 -0
  72. package/dist/cjs/types/Model/ClusterMap.d.ts +19 -11
  73. package/dist/cjs/types/Model/ClusterMap.d.ts.map +1 -1
  74. package/dist/cjs/types/Utils.d.ts +3 -5
  75. package/dist/cjs/types/Utils.d.ts.map +1 -1
  76. package/dist/esm/Converters.js +63 -28
  77. package/dist/esm/Converters.js.map +1 -1
  78. package/dist/esm/Definitions/Global/Drivers.js +10 -3
  79. package/dist/esm/Definitions/Global/Drivers.js.map +1 -1
  80. package/dist/esm/Definitions/Global/Events.js +1 -2
  81. package/dist/esm/Definitions/Global/Events.js.map +1 -1
  82. package/dist/esm/Devices/Brultech/index.js +4 -0
  83. package/dist/esm/Devices/Brultech/index.js.map +1 -0
  84. package/dist/esm/Devices/Constructor.js +2 -0
  85. package/dist/esm/Devices/Constructor.js.map +1 -0
  86. package/dist/esm/Devices/DeviceFactory.js +13 -0
  87. package/dist/esm/Devices/DeviceFactory.js.map +1 -0
  88. package/dist/esm/Devices/DeviceMap.js +4 -0
  89. package/dist/esm/Devices/DeviceMap.js.map +1 -0
  90. package/dist/esm/Devices/Elk/ElkAlarmPanelDevice.js +181 -0
  91. package/dist/esm/Devices/Elk/ElkAlarmPanelDevice.js.map +1 -0
  92. package/dist/esm/Devices/Elk/ElkAlarmSensorDevice.js +110 -0
  93. package/dist/esm/Devices/Elk/ElkAlarmSensorDevice.js.map +1 -0
  94. package/dist/esm/Devices/EndpointFor.js +31 -0
  95. package/dist/esm/Devices/EndpointFor.js.map +1 -0
  96. package/dist/esm/Devices/ISYDevice.js +35 -0
  97. package/dist/esm/Devices/ISYDevice.js.map +1 -0
  98. package/dist/esm/Devices/ISYDeviceNode.js +62 -0
  99. package/dist/esm/Devices/ISYDeviceNode.js.map +1 -0
  100. package/dist/esm/Devices/ISYMultiNodeDevice.js +89 -0
  101. package/dist/esm/Devices/ISYMultiNodeDevice.js.map +1 -0
  102. package/dist/esm/Devices/Insteon/InsteonBallastDimmerDevice.js +8 -0
  103. package/dist/esm/Devices/Insteon/InsteonBallastDimmerDevice.js.map +1 -0
  104. package/dist/esm/Devices/Insteon/InsteonBaseDevice.js +49 -0
  105. package/dist/esm/Devices/Insteon/InsteonBaseDevice.js.map +1 -0
  106. package/dist/esm/Devices/Insteon/InsteonCOSensorDevice.js +14 -0
  107. package/dist/esm/Devices/Insteon/InsteonCOSensorDevice.js.map +1 -0
  108. package/dist/esm/Devices/Insteon/InsteonDevice.js +17 -0
  109. package/dist/esm/Devices/Insteon/InsteonDevice.js.map +1 -0
  110. package/dist/esm/Devices/Insteon/InsteonDeviceFactory.js +875 -0
  111. package/dist/esm/Devices/Insteon/InsteonDeviceFactory.js.map +1 -0
  112. package/dist/esm/Devices/Insteon/InsteonDimmableDevice.js +32 -0
  113. package/dist/esm/Devices/Insteon/InsteonDimmableDevice.js.map +1 -0
  114. package/dist/esm/Devices/Insteon/InsteonDimmerOutletDevice.js +7 -0
  115. package/dist/esm/Devices/Insteon/InsteonDimmerOutletDevice.js.map +1 -0
  116. package/dist/esm/Devices/Insteon/InsteonDimmerSwitchDevice.js +8 -0
  117. package/dist/esm/Devices/Insteon/InsteonDimmerSwitchDevice.js.map +1 -0
  118. package/dist/esm/Devices/Insteon/InsteonDoorWindowSensorDevice.js +11 -0
  119. package/dist/esm/Devices/Insteon/InsteonDoorWindowSensorDevice.js.map +1 -0
  120. package/dist/esm/Devices/Insteon/InsteonFanDevice.js +60 -0
  121. package/dist/esm/Devices/Insteon/InsteonFanDevice.js.map +1 -0
  122. package/dist/esm/Devices/Insteon/InsteonKeypadDevice.js +8 -0
  123. package/dist/esm/Devices/Insteon/InsteonKeypadDevice.js.map +1 -0
  124. package/dist/esm/Devices/Insteon/InsteonKeypadDimmerDevice.js +8 -0
  125. package/dist/esm/Devices/Insteon/InsteonKeypadDimmerDevice.js.map +1 -0
  126. package/dist/esm/Devices/Insteon/InsteonKeypadRelayDevice.js +8 -0
  127. package/dist/esm/Devices/Insteon/InsteonKeypadRelayDevice.js.map +1 -0
  128. package/dist/esm/Devices/Insteon/InsteonLeakSensorDevice.js +11 -0
  129. package/dist/esm/Devices/Insteon/InsteonLeakSensorDevice.js.map +1 -0
  130. package/dist/esm/Devices/Insteon/InsteonLockDevice.js +32 -0
  131. package/dist/esm/Devices/Insteon/InsteonLockDevice.js.map +1 -0
  132. package/dist/esm/Devices/Insteon/InsteonMotionSensorDevice.js +36 -0
  133. package/dist/esm/Devices/Insteon/InsteonMotionSensorDevice.js.map +1 -0
  134. package/dist/esm/Devices/Insteon/InsteonOnOffOutletDevice.js +19 -0
  135. package/dist/esm/Devices/Insteon/InsteonOnOffOutletDevice.js.map +1 -0
  136. package/dist/esm/Devices/Insteon/InsteonRelayDevice.js +41 -0
  137. package/dist/esm/Devices/Insteon/InsteonRelayDevice.js.map +1 -0
  138. package/dist/esm/Devices/Insteon/InsteonRelaySwitchDevice.js +8 -0
  139. package/dist/esm/Devices/Insteon/InsteonRelaySwitchDevice.js.map +1 -0
  140. package/dist/esm/Devices/Insteon/InsteonSmokeSensorDevice.js +11 -0
  141. package/dist/esm/Devices/Insteon/InsteonSmokeSensorDevice.js.map +1 -0
  142. package/dist/esm/Devices/Insteon/InsteonThermostatDevice.js +30 -0
  143. package/dist/esm/Devices/Insteon/InsteonThermostatDevice.js.map +1 -0
  144. package/dist/esm/Devices/Insteon/RelayLampSwitch.js +68 -0
  145. package/dist/esm/Devices/Insteon/RelayLampSwitch.js.map +1 -0
  146. package/dist/esm/Devices/Insteon/index.js +31 -0
  147. package/dist/esm/Devices/Insteon/index.js.map +1 -0
  148. package/dist/esm/Devices/Lutron/index.js +4 -0
  149. package/dist/esm/Devices/Lutron/index.js.map +1 -0
  150. package/dist/esm/Devices/MapsTo.js +2 -0
  151. package/dist/esm/Devices/MapsTo.js.map +1 -0
  152. package/dist/esm/Devices/NCD/index.js +4 -0
  153. package/dist/esm/Devices/NCD/index.js.map +1 -0
  154. package/dist/esm/Devices/NodeFactory.js +48 -0
  155. package/dist/esm/Devices/NodeFactory.js.map +1 -0
  156. package/dist/esm/Devices/Poly/index.js +4 -0
  157. package/dist/esm/Devices/Poly/index.js.map +1 -0
  158. package/dist/esm/Devices/Scene/index.js +4 -0
  159. package/dist/esm/Devices/Scene/index.js.map +1 -0
  160. package/dist/esm/Devices/UDI/index.js +4 -0
  161. package/dist/esm/Devices/UDI/index.js.map +1 -0
  162. package/dist/esm/Devices/ZWave/ZWaveBaseDevice.js +38 -0
  163. package/dist/esm/Devices/ZWave/ZWaveBaseDevice.js.map +1 -0
  164. package/dist/esm/Devices/ZWave/ZWaveDimmerSwitchDevice.js +8 -0
  165. package/dist/esm/Devices/ZWave/ZWaveDimmerSwitchDevice.js.map +1 -0
  166. package/dist/esm/Devices/ZWave/ZWaveLockDevice.js +35 -0
  167. package/dist/esm/Devices/ZWave/ZWaveLockDevice.js.map +1 -0
  168. package/dist/esm/Devices/ZWave/index.js +20 -0
  169. package/dist/esm/Devices/ZWave/index.js.map +1 -0
  170. package/dist/esm/Devices/index.js +9 -0
  171. package/dist/esm/Devices/index.js.map +1 -0
  172. package/dist/esm/ISY.js +56 -41
  173. package/dist/esm/ISY.js.map +1 -1
  174. package/dist/esm/ISYNode.js +16 -13
  175. package/dist/esm/ISYNode.js.map +1 -1
  176. package/dist/esm/ISYScene.js +3 -3
  177. package/dist/esm/ISYScene.js.map +1 -1
  178. package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js +11 -4
  179. package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js.map +1 -1
  180. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js +26 -7
  181. package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
  182. package/dist/esm/Matter/Behaviors/ISYOnOffBehavior.js +12 -9
  183. package/dist/esm/Matter/Behaviors/ISYOnOffBehavior.js.map +1 -1
  184. package/dist/esm/Matter/{Server → Bridge}/Server.js +60 -50
  185. package/dist/esm/Matter/Bridge/Server.js.map +1 -0
  186. package/dist/esm/Matter/Mappings/Insteon.js +22 -18
  187. package/dist/esm/Matter/Mappings/Insteon.js.map +1 -1
  188. package/dist/esm/Matter/Mappings/register.js +2 -0
  189. package/dist/esm/Matter/Mappings/register.js.map +1 -0
  190. package/dist/esm/Model/ClusterMap.js +12 -9
  191. package/dist/esm/Model/ClusterMap.js.map +1 -1
  192. package/dist/esm/Utils.js +55 -8
  193. package/dist/esm/Utils.js.map +1 -1
  194. package/dist/esm/types/CodeGeneration/EnumFactory.d.ts +1 -1
  195. package/dist/esm/types/Converters.d.ts +28 -8
  196. package/dist/esm/types/Converters.d.ts.map +1 -1
  197. package/dist/esm/types/Definitions/Global/Drivers.d.ts +4 -3
  198. package/dist/esm/types/Definitions/Global/Drivers.d.ts.map +1 -1
  199. package/dist/esm/types/Definitions/Global/Events.d.ts.map +1 -1
  200. package/dist/esm/types/Devices/Elk/ElkAlarmSensorDevice.d.ts.map +1 -1
  201. package/dist/esm/types/Devices/EndpointFor.d.ts +2 -2
  202. package/dist/esm/types/Devices/Insteon/InsteonBaseDevice.d.ts +3 -3
  203. package/dist/esm/types/Devices/Insteon/InsteonBaseDevice.d.ts.map +1 -1
  204. package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts +4 -4
  205. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts +5 -4
  206. package/dist/esm/types/Devices/Insteon/InsteonFanDevice.d.ts.map +1 -1
  207. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts +2 -4
  208. package/dist/esm/types/Devices/Insteon/InsteonRelayDevice.d.ts.map +1 -1
  209. package/dist/esm/types/Devices/Insteon/RelayLampSwitch.d.ts +93 -0
  210. package/dist/esm/types/Devices/Insteon/RelayLampSwitch.d.ts.map +1 -0
  211. package/dist/esm/types/ISY.d.ts +27 -21
  212. package/dist/esm/types/ISY.d.ts.map +1 -1
  213. package/dist/esm/types/ISYNode.d.ts +4 -4
  214. package/dist/esm/types/ISYNode.d.ts.map +1 -1
  215. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +16 -6
  216. package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
  217. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts +13 -11
  218. package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
  219. package/dist/esm/types/Matter/Behaviors/ISYOnOffBehavior.d.ts +4 -4
  220. package/dist/esm/types/Matter/Behaviors/ISYOnOffBehavior.d.ts.map +1 -1
  221. package/dist/esm/types/Matter/Bridge/Server.d.ts +27 -0
  222. package/dist/esm/types/Matter/Bridge/Server.d.ts.map +1 -0
  223. package/dist/esm/types/Matter/Mappings/register.d.ts +2 -0
  224. package/dist/esm/types/Matter/Mappings/register.d.ts.map +1 -0
  225. package/dist/esm/types/Model/ClusterMap.d.ts +19 -11
  226. package/dist/esm/types/Model/ClusterMap.d.ts.map +1 -1
  227. package/dist/esm/types/Utils.d.ts +3 -5
  228. package/dist/esm/types/Utils.d.ts.map +1 -1
  229. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  230. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  231. package/package.json +4 -6
  232. package/src/Converters.ts +137 -69
  233. package/src/Definitions/Global/Drivers.ts +16 -7
  234. package/src/Definitions/Global/Events.ts +4 -3
  235. package/src/Devices/Elk/ElkAlarmPanelDevice.ts +3 -3
  236. package/src/Devices/Elk/ElkAlarmSensorDevice.ts +15 -21
  237. package/src/Devices/Insteon/Generated/RelayLamp.ts +8 -7
  238. package/src/Devices/Insteon/InsteonBaseDevice.ts +10 -9
  239. package/src/Devices/Insteon/InsteonFanDevice.ts +16 -11
  240. package/src/Devices/Insteon/InsteonMotionSensorDevice.ts +5 -5
  241. package/src/Devices/Insteon/InsteonRelayDevice.ts +3 -5
  242. package/src/Devices/Insteon/RelayLampSwitch.ts +131 -0
  243. package/src/ISY.ts +87 -61
  244. package/src/ISYNode.ts +17 -14
  245. package/src/ISYScene.ts +3 -3
  246. package/src/Matter/Behaviors/ISYBridgedDeviceBehavior.ts +29 -11
  247. package/src/Matter/Behaviors/ISYClusterBehavior.ts +46 -28
  248. package/src/Matter/Behaviors/ISYOnOffBehavior.ts +50 -64
  249. package/src/Matter/{Server → Bridge}/Server.ts +87 -59
  250. package/src/Matter/Mappings/Insteon.ts +53 -60
  251. package/src/Matter/Mappings/register.ts +0 -0
  252. package/src/Model/ClassDefinition.ts +1 -1
  253. package/src/Model/ClusterMap.ts +31 -22
  254. package/src/Utils.ts +62 -19
  255. package/tsconfig.json +2 -2
  256. package/dist/cjs/Matter/Server/Server.js.map +0 -1
  257. package/dist/cjs/types/Matter/Server/Server.d.ts +0 -4
  258. package/dist/cjs/types/Matter/Server/Server.d.ts.map +0 -1
  259. package/dist/esm/Matter/Server/Server.js.map +0 -1
  260. package/dist/esm/types/Matter/Server/Server.d.ts +0 -4
  261. package/dist/esm/types/Matter/Server/Server.d.ts.map +0 -1
@@ -7,6 +7,7 @@ import { InsteonBaseDevice } from './InsteonBaseDevice.js';
7
7
 
8
8
  import type { OnOffBehavior } from '@project-chip/matter.js/behaviors/on-off';
9
9
  import 'winston';
10
+ import { RelayLampSwitch } from './RelayLampSwitch.js';
10
11
  import type { Command } from '../../Definitions/Global/Commands.js';
11
12
  import { Driver, DriverType } from '../../Definitions/Global/Drivers.js';
12
13
  import { UnitOfMeasure } from '../../Definitions/index.js';
@@ -14,14 +15,11 @@ import { Properties } from '../../ISYConstants.js';
14
15
 
15
16
  import type { DriverState } from '../../Model/DriverState.js';
16
17
 
17
- export class InsteonRelayDevice extends InsteonBaseDevice<Driver.Signatures<'ST' | 'OL' | 'RR'>, Command.Signatures<'DON' | 'DOF'>> {
18
+ export class InsteonRelayDevice extends RelayLampSwitch.Node /*InsteonBaseDevice<Driver.Signatures<'ST' | 'OL' | 'RR' | 'ERR'>, Command.Signatures<'DON' | 'DOF'>>*/ {
18
19
  // #region Constructors (1)
19
20
 
20
21
  constructor(isy: ISY, nodeInfo: NodeInfo) {
21
22
  super(isy, nodeInfo);
22
- this.drivers.ST = Driver.create('ST', this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: 'Status', name: 'status' });
23
- this.drivers.OL = Driver.create('OL', this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: 'On Level', name: 'onLevel' });
24
- this.drivers.RR = Driver.create('RR', this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: 'Ramp Rate', name: 'rampRate' });
25
23
  }
26
24
 
27
25
  // #endregion Constructors (1)
@@ -57,7 +55,7 @@ export class InsteonRelayDevice extends InsteonBaseDevice<Driver.Signatures<'ST'
57
55
 
58
56
  } */
59
57
  public override async sendBeep(level: number = 100): Promise<any> {
60
- return super.sendBeep(level);
58
+ return super.beep(level);
61
59
  }
62
60
 
63
61
  // #endregion Public Methods (2)
@@ -0,0 +1,131 @@
1
+ /* THIS FILE WAS AUTOMATICALLY GENERATED. DO NOT EDIT DIRECTLY. */
2
+
3
+ import { UnitOfMeasure } from "../../Definitions/Global/UOM.js";
4
+ import { Family } from "../../Definitions/Global/Families.js";
5
+ import type { NodeInfo } from "../../Model/NodeInfo.js";
6
+ import type { ISY } from "../../ISY.js";
7
+ import type { ISYNode } from "../../ISYNode.js";
8
+ import { InsteonBaseDevice } from "./InsteonBaseDevice.js";
9
+ import { ISYDeviceNode } from "../ISYDeviceNode.js";
10
+ import { Driver } from "../../Definitions/Global/Drivers.js";
11
+ import { Insteon } from "../../Definitions/index.js";
12
+ import type { DriverState } from "../../Model/DriverState.js";
13
+ import { NodeFactory } from "../NodeFactory.js";
14
+
15
+ export const nodeDefId = "RelayLampSwitch";
16
+
17
+ type Commands = RelayLampSwitch.Commands;
18
+ type Drivers = RelayLampSwitch.Drivers;
19
+
20
+ export class RelayLampSwitchNode extends InsteonBaseDevice<Drivers, Commands> implements RelayLampSwitch.Interface {
21
+ public override readonly commands = {
22
+ DON: this.on,
23
+ DOF: this.off,
24
+ DFOF: this.fastOff,
25
+ DFON: this.fastOn,
26
+ QUERY: this.query,
27
+ BEEP: this.beep,
28
+ BL: this.backlight,
29
+ WDU: this.writeChanges
30
+ };
31
+ static override nodeDefId = 'RelayLampSwitch';
32
+ declare readonly nodeDefId: 'RelayLampSwitch';
33
+ constructor(isy: ISY, nodeInfo: NodeInfo) {
34
+ super(isy, nodeInfo);
35
+ this.drivers.ST = Driver.create('ST', this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: 'Status', name: 'status' });
36
+ this.drivers.ERR = Driver.create('ERR', this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: 'Responding', name: 'responding' });
37
+ }
38
+ async on(value?: 0 | 100) {
39
+ return this.sendCommand('DON', { value: value });
40
+ }
41
+ async off() {
42
+ return this.sendCommand('DOF');
43
+ }
44
+ async fastOff() {
45
+ return this.sendCommand('DFOF');
46
+ }
47
+ async fastOn() {
48
+ return this.sendCommand('DFON');
49
+ }
50
+ async query() {
51
+ return this.sendCommand('QUERY');
52
+ }
53
+ async beep(value?: number) {
54
+ return this.sendCommand('BEEP', { value: value });
55
+ }
56
+ async backlight(value: number) {
57
+ return this.sendCommand('BL', { value: value });
58
+ }
59
+ async writeChanges() {
60
+ return this.sendCommand('WDU');
61
+ }
62
+ public get status(): Insteon.OnLevelRelay {
63
+ return this.drivers.ST?.value;
64
+ }
65
+ public get responding(): Insteon.Error {
66
+ return this.drivers.ERR?.value;
67
+ }
68
+ }
69
+
70
+ NodeFactory.register(RelayLampSwitchNode);
71
+
72
+ export namespace RelayLampSwitch {
73
+ export interface Interface extends Omit<InstanceType<typeof RelayLampSwitchNode>, keyof ISYDeviceNode<any, any, any, any>> {
74
+ nodeDefId: "RelayLampSwitch";
75
+ }
76
+ export function is(node: ISYNode<any, any, any, any>): node is RelayLampSwitchNode {
77
+ return node.nodeDefId === nodeDefId;
78
+ }
79
+ export function create(isy: ISY, nodeInfo: NodeInfo) {
80
+ return new RelayLampSwitchNode(isy, nodeInfo);
81
+ }
82
+ export const Node = RelayLampSwitchNode;
83
+ export type Commands = {
84
+ DON: ((value?: (0 | 100)) => Promise<boolean>) & {
85
+ label: "On";
86
+ name: "on";
87
+ };
88
+ DOF: (() => Promise<boolean>) & {
89
+ label: "Off";
90
+ name: "off";
91
+ };
92
+ DFOF: (() => Promise<boolean>) & {
93
+ label: "Fast Off";
94
+ name: "fastOff";
95
+ };
96
+ DFON: (() => Promise<boolean>) & {
97
+ label: "Fast On";
98
+ name: "fastOn";
99
+ };
100
+ QUERY: (() => Promise<boolean>) & {
101
+ label: "Query";
102
+ name: "query";
103
+ };
104
+ BEEP: ((value?: number) => Promise<boolean>) & {
105
+ label: "Beep";
106
+ name: "beep";
107
+ };
108
+ BL: ((value: number) => Promise<boolean>) & {
109
+ label: "Backlight";
110
+ name: "backlight";
111
+ };
112
+ WDU: (() => Promise<boolean>) & {
113
+ label: "Write Changes";
114
+ name: "writeChanges";
115
+ };
116
+ };
117
+ export type Drivers = {
118
+ ST: {
119
+ uom: UnitOfMeasure.Percent;
120
+ value: Insteon.OnLevelRelay;
121
+ label: "Status";
122
+ name: "status";
123
+ };
124
+ ERR: {
125
+ uom: UnitOfMeasure.Index;
126
+ value: Insteon.Error;
127
+ label: "Responding";
128
+ name: "responding";
129
+ };
130
+ };
131
+ }
package/src/ISY.ts CHANGED
@@ -3,14 +3,12 @@ import { writeFile } from 'fs';
3
3
 
4
4
  import { Parser, type ParserOptions } from 'xml2js';
5
5
  import { parseBooleans, parseNumbers } from 'xml2js/lib/processors.js';
6
- import { XmlDocument } from 'xmldoc';
7
6
 
8
7
  import axios from 'axios';
9
8
  import { EventEmitter } from 'events';
10
- import winston, { format, Logger, loggers, type LeveledLogMethod } from 'winston';
9
+ import { format, Logger, loggers } from 'winston';
11
10
  import { Category } from './Definitions/Global/Categories.js';
12
11
  import { Family } from './Definitions/Global/Families.js';
13
- import type { NodeInfo } from './Model/NodeInfo.js';
14
12
  import { DeviceFactory } from './Devices/DeviceFactory.js';
15
13
  import { ELKAlarmPanelDevice } from './Devices/Elk/ElkAlarmPanelDevice.js';
16
14
  import { ElkAlarmSensorDevice } from './Devices/Elk/ElkAlarmSensorDevice.js';
@@ -31,18 +29,22 @@ import { InsteonOnOffOutletDevice } from './Devices/Insteon/InsteonOnOffOutletDe
31
29
  import { InsteonRelayDevice } from './Devices/Insteon/InsteonRelayDevice.js';
32
30
  import { InsteonSmokeSensorDevice } from './Devices/Insteon/InsteonSmokeSensorDevice.js';
33
31
  import { InsteonThermostatDevice } from './Devices/Insteon/InsteonThermostatDevice.js';
32
+ import { ISYDeviceNode } from './Devices/ISYDeviceNode.js';
34
33
  import { EventType } from './Events/EventType.js';
35
34
  import { NodeType, Props, States, VariableType } from './ISYConstants.js';
36
- import { ISYNode } from './ISYNode.js';
37
- import { ISYDeviceNode } from './Devices/ISYDeviceNode.js';
38
35
  import { type ISYDevice } from './ISYDevice.js';
36
+ import { ISYNode } from './ISYNode.js';
39
37
  import { ISYScene } from './ISYScene.js';
40
38
  import { ISYVariable } from './ISYVariable.js';
39
+ import type { NodeInfo } from './Model/NodeInfo.js';
41
40
 
42
41
  import * as Utils from './Utils.js';
43
42
 
44
43
  import { X2jOptions, XMLParser } from 'fast-xml-parser';
45
44
  import { NodeFactory } from './Devices/NodeFactory.js';
45
+ import type { Config } from './Model/Config.js';
46
+ import { findPackageJson } from './Utils.js';
47
+ import path from 'path';
46
48
 
47
49
  export {
48
50
  Category as Categories,
@@ -118,6 +120,21 @@ const parser = new Parser(defaultParserOptions);
118
120
 
119
121
  export let Controls = {};
120
122
 
123
+ interface ISYConfig {
124
+ // #region Properties (8)
125
+
126
+ displayNameFormat?: string;
127
+ elkEnabled?: boolean;
128
+ enableWebSocket?: boolean;
129
+ host: string;
130
+ password: string;
131
+ port: number;
132
+ protocol: 'http' | 'https';
133
+ username: string;
134
+
135
+ // #endregion Properties (8)
136
+ }
137
+
121
138
  export class ISY extends EventEmitter implements Disposable {
122
139
  // #region Properties (30)
123
140
 
@@ -140,7 +157,7 @@ export class ISY extends EventEmitter implements Disposable {
140
157
 
141
158
  public static instance: ISY;
142
159
 
143
- public configInfo: any;
160
+ public configInfo: Config;
144
161
  public elkAlarmPanel: ELKAlarmPanelDevice;
145
162
  public guardianTimer: any;
146
163
  public id: string;
@@ -150,29 +167,19 @@ export class ISY extends EventEmitter implements Disposable {
150
167
  public nodesLoaded: boolean = false;
151
168
  public productId = 5226;
152
169
  public productName = 'eisy';
153
- public serverVersion: any;
170
+ public firmwareVersion: any;
154
171
  public vendorName = 'Universal Devices, Inc.';
155
172
  public webSocket: WebSocket.Client;
156
173
 
174
+ public apiVersion: string;
175
+
157
176
  // #endregion Properties (30)
158
177
 
159
178
  // #region Constructors (1)
160
179
 
161
- constructor(
162
- config: {
163
- host: string;
164
- port: number;
165
- protocol: 'http' | 'https';
166
- username: string;
167
- password: string;
168
- enableWebSocket?: boolean;
169
- displayNameFormat?: string;
170
- elkEnabled?: boolean;
171
- },
172
- logger: Logger = new Logger(),
173
- storagePath?: string
174
- ) {
180
+ constructor(config: ISYConfig, logger: Logger = new Logger(), storagePath?: string) {
175
181
  super();
182
+
176
183
  this.enableWebSocket = config.enableWebSocket ?? true;
177
184
  this.storagePath = storagePath ?? './';
178
185
  this.displayNameFormat = config.displayNameFormat ?? '${location ?? folder} ${spokenName ?? name}';
@@ -218,7 +225,11 @@ export class ISY extends EventEmitter implements Disposable {
218
225
 
219
226
  // #endregion Public Getters And Setters (2)
220
227
 
221
- // #region Public Methods (22)
228
+ // #region Public Methods (24)
229
+
230
+ [Symbol.dispose](): void {
231
+ this.close();
232
+ }
222
233
 
223
234
  public override emit(event: 'InitializeCompleted' | 'NodeAdded' | 'NodeRemoved' | 'NodeChanged', node?: ISYNode<any, any, any, any>): boolean {
224
235
  return super.emit(event, node);
@@ -239,6 +250,10 @@ export class ISY extends EventEmitter implements Disposable {
239
250
  return s as T;
240
251
  }
241
252
 
253
+ public getElkAlarmPanel() {
254
+ return this.elkAlarmPanel;
255
+ }
256
+
242
257
  public getNode<T extends ISYNode<any, any, any, any> = ISYNode<any, any, any, any>>(address: string, parentsOnly = false): T {
243
258
  let s = this.nodeMap.get(address);
244
259
  if (!parentsOnly) {
@@ -254,10 +269,6 @@ export class ISY extends EventEmitter implements Disposable {
254
269
  return s as T;
255
270
  }
256
271
 
257
- public getElkAlarmPanel() {
258
- return this.elkAlarmPanel;
259
- }
260
-
261
272
  public getScene(address: string) {
262
273
  return this.sceneList.get(address);
263
274
  }
@@ -275,7 +286,7 @@ export class ISY extends EventEmitter implements Disposable {
275
286
  }
276
287
 
277
288
  public async handleInitializeError(step: string, reason: any): Promise<any> {
278
- this.logger.error(`Error initializing ISY (${step}): ${JSON.stringify(reason)}`);
289
+ this.logger.error(`Error initializing ISY (${step}): ${Utils.logStringify(reason)}`);
279
290
  return Promise.reject(reason);
280
291
  }
281
292
 
@@ -323,7 +334,7 @@ export class ISY extends EventEmitter implements Disposable {
323
334
  }
324
335
  break;
325
336
  case EventType.Heartbeat:
326
- this.logger.debug(`Received ${EventType[Number(stringControl)]} Signal from ISY: ${JSON.stringify(evt)}`);
337
+ this.logger.debug(`Received ${EventType[Number(stringControl)]} Signal from ISY: ${Utils.logStringify(evt)}`);
327
338
  break;
328
339
 
329
340
  default:
@@ -331,15 +342,19 @@ export class ISY extends EventEmitter implements Disposable {
331
342
  //
332
343
  const impactedDevice = this.getNode(evt.node);
333
344
  if (impactedDevice !== undefined && impactedDevice !== null) {
334
- impactedDevice.handleEvent(evt);
345
+ try {
346
+ impactedDevice.handleEvent(evt);
347
+ } catch (e) {
348
+ this.logger.error(`Error handling event for ${impactedDevice.name}: ${e.message}`);
349
+ }
335
350
  } else {
336
- this.logger.warn(`${EventType[stringControl]} Event for Unidentified Device: ${JSON.stringify(evt)}`);
351
+ this.logger.debug(`${EventType[stringControl]} Event for Unidentified Device: ${JSON.stringify(evt)}`);
337
352
  }
338
353
  } else {
339
354
  if (stringControl === EventType.NodeChanged) {
340
- this.logger.info(`Received Node Change Event: ${JSON.stringify(evt)}. These are currently unsupported.`);
355
+ this.logger.debug(`Received Node Change Event: ${JSON.stringify(evt)}. These are currently unsupported.`);
341
356
  }
342
- this.logger.debug(`${EventType[Number(stringControl)]} Event: ${JSON.stringify(evt)}`);
357
+ this.logger.debug(`${EventType[Number(stringControl)]} Event: ${Utils.logStringify(evt)}`);
343
358
  }
344
359
 
345
360
  break;
@@ -350,6 +365,7 @@ export class ISY extends EventEmitter implements Disposable {
350
365
  public async initialize(): Promise<any> {
351
366
  const that = this;
352
367
  try {
368
+ this.apiVersion = (await findPackageJson()).version;
353
369
  await this.loadConfig();
354
370
  await this.loadNodes();
355
371
  await this.loadVariables(VariableType.Integer);
@@ -413,19 +429,18 @@ export class ISY extends EventEmitter implements Disposable {
413
429
  public async loadConfig(): Promise<any> {
414
430
  try {
415
431
  this.logger.info('Loading ISY Config');
416
- const configuration = (await this.sendRequest('config')).configuration;
432
+ const configuration = (await this.sendRequest('config')).configuration as Config;
417
433
  if (this.isDebugEnabled) {
418
- writeFile(this.storagePath + '/ISYConfigDump.json', JSON.stringify(configuration), this.logger.error);
434
+ writeFile(path.resolve(this.storagePath, 'ISYConfigDump.json'), JSON.stringify(configuration), this.logger.error);
419
435
  }
420
436
 
421
437
  const controls = configuration.controls;
422
438
  this.model = configuration.deviceSpecs.model;
423
- this.serverVersion = configuration.app_version;
439
+ this.firmwareVersion = configuration.app_full_version;
424
440
  this.vendorName = configuration.deviceSpecs.make;
425
441
  this.productId = configuration.product.id;
426
442
  this.productName = configuration.product.desc;
427
443
  this.id = configuration.root.id;
428
- // TODO: Check Installed Features
429
444
  // this.logger.info(result.configuration);
430
445
  if (controls !== undefined) {
431
446
  // this.logger.info(controls.control);
@@ -474,7 +489,9 @@ export class ISY extends EventEmitter implements Disposable {
474
489
  }
475
490
  }
476
491
 
477
- public override on(event: 'InitializeCompleted' | 'NodeAdded' | 'NodeRemoved' | 'NodeChanged', listener: (node?: ISYNode<any, any, any, any>) => void): this {
492
+ public override on(event: 'initializeCompleted', listener: () => void): this;
493
+ public override on(event: 'nodeAdded' | 'nodeRemoved' | 'nodeChanged', listener: (node?: ISYNode<any, any, any, any>) => void): this;
494
+ override on(event: 'initializeCompleted' | 'nodeAdded' | 'nodeRemoved' | 'nodeChanged', listener: (node?: ISYNode<any, any, any, any>) => void): this {
478
495
  return super.on(event, listener);
479
496
  }
480
497
 
@@ -565,12 +582,13 @@ export class ISY extends EventEmitter implements Disposable {
565
582
  trailingSlash: boolean;
566
583
  requestLogLevel?: any;
567
584
  responseLogLevel?: any;
585
+ errorLogLevel?: any;
568
586
  } = { trailingSlash: true }
569
587
  ): Promise<any> {
570
- const requestLogLevel = options.requestLogLevel ?? winston.config.cli.levels.debug;
571
- const responseLogLevel = options.responseLogLevel ?? winston.config.cli.levels.silly;
588
+ const requestLogLevel = options.requestLogLevel ?? 'debug';
589
+ const responseLogLevel = options.responseLogLevel ?? 'silly';
572
590
  url = `${this.protocol}://${this.address}/rest/${url}${options.trailingSlash ? '/' : ''}`;
573
- this.logger.log(`Sending request: ${url}`, requestLogLevel);
591
+ this.logger.log(requestLogLevel, `Sending request: ${url}`);
574
592
  try {
575
593
  const response = await axios.get(url, {
576
594
  auth: { username: this.credentials.username, password: this.credentials.password }
@@ -581,19 +599,22 @@ export class ISY extends EventEmitter implements Disposable {
581
599
  if (options.parserOptions) curParser = new Parser({ ...defaultParserOptions, ...options.parserOptions });
582
600
  var altParser = new XMLParser(defaultXMLParserOptions);
583
601
  var s = altParser.parse(response.data);
584
- this.logger.log(`Response: ${JSON.stringify(s)}`, requestLogLevel ?? 'debug');
602
+ this.logger.log(requestLogLevel ?? 'debug', `Response: ${JSON.stringify(s)}`);
585
603
  return s;
586
604
  } else if (response.headers['content-type'].toString().includes('json')) {
587
- this.logger.log(`Response: ${JSON.stringify(response.data)}`, requestLogLevel ?? 'debug');
605
+ this.logger.log(responseLogLevel ?? 'debug', `Response: ${JSON.stringify(response.data)}`);
588
606
  return JSON.parse(response.data);
589
607
  } else {
590
- this.logger.log(`Response Header: ${JSON.stringify(response.headers)} Response: ${JSON.stringify(response.data)}`, responseLogLevel ?? 'debug');
608
+ this.logger.log(responseLogLevel ?? 'debug', `Response Header: ${JSON.stringify(response.headers)} Response: ${JSON.stringify(response.data)}`);
591
609
  return response.data;
592
610
  }
593
611
  }
594
612
  } catch (error) {
595
- this.logger.error(`Error sending request to ISY: ${error?.message}`);
596
- throw new Error(`Error sending request to ISY: ${JSON.stringify(error)}`);
613
+ if (options.errorLogLevel) {
614
+ this.logger.log(options.errorLogLevel, `Error sending request to ISY: ${error?.message}`);
615
+ } else {
616
+ this.logger.error(`Error sending request to ISY: ${error?.message}`);
617
+ }
597
618
  }
598
619
  }
599
620
 
@@ -604,11 +625,19 @@ export class ISY extends EventEmitter implements Disposable {
604
625
  return this.sendRequest(uriToUse);
605
626
  }
606
627
 
607
- public variableChangedHandler(variable: { id: string; type: string }) {
628
+ #variableChangedHandler(variable: { id: string; type: string }) {
608
629
  this.logger.info(`Variable: ${variable.id} (${variable.type}) changed`);
609
630
  }
610
631
 
611
- // #endregion Public Methods (22)
632
+ public close() {
633
+ try {
634
+ this.webSocket?.close();
635
+ } catch (e) {
636
+ this.logger.error(`Error closing websocket: ${e.message}`);
637
+ }
638
+ }
639
+
640
+ // #endregion Public Methods (24)
612
641
 
613
642
  // #region Private Methods (11)
614
643
 
@@ -645,12 +674,13 @@ export class ISY extends EventEmitter implements Disposable {
645
674
  }
646
675
  }
647
676
 
648
- #guardian() {
677
+ async #guardian() {
649
678
  const timeNow = new Date();
650
679
 
651
680
  if (Number(timeNow) - Number(this.lastActivity) > 60000) {
652
681
  this.logger.info('Guardian: Detected no activity in more then 60 seconds. Reinitializing web sockets');
653
- this.initializeWebSocket();
682
+ await this.refreshStatuses();
683
+ await this.initializeWebSocket();
654
684
  }
655
685
  }
656
686
 
@@ -681,17 +711,17 @@ export class ISY extends EventEmitter implements Disposable {
681
711
  });
682
712
  }
683
713
 
684
- #loadElkNodes(result: any) {
714
+ /* #loadElkNodes(result: any) {
685
715
  const document = new XmlDocument(result);
686
716
  const nodes = document.childNamed('areas').childNamed('area').childrenNamed('zone');
687
717
  for (let index = 0; index < nodes.length; index++) {
688
718
  const id = nodes[index].attr.id;
689
719
  const name = nodes[index].attr.name;
690
720
  const alarmDef = nodes[index].attr.alarmDef;
691
- const newDevice = new ElkAlarmSensorDevice(this, name, 1, id /*TODO: Handle CO Sensor vs. Door/Window Sensor */);
721
+ const newDevice = new ElkAlarmSensorDevice(this, name, 1, id TODO: Handle CO Sensor vs. Door/Window Sensor );
692
722
  this.zoneMap[newDevice.zone] = newDevice;
693
723
  }
694
- }
724
+ } */
695
725
 
696
726
  async #readDeviceNodes(obj: { nodes: { node: NodeInfo[] } }) {
697
727
  this.logger.info('Loading Device Nodes');
@@ -762,7 +792,7 @@ export class ISY extends EventEmitter implements Disposable {
762
792
  this.logger.info('Loading Folder Nodes');
763
793
  if (result?.nodes?.folder) {
764
794
  for (const folder of result.nodes.folder) {
765
- this.logger.info(`Loading Folder Node: ${JSON.stringify(folder)}`);
795
+ this.logger.debug(`Loading Folder Node: ${JSON.stringify(folder)}`);
766
796
  this.folderMap.set(folder.address, folder.name);
767
797
  }
768
798
  }
@@ -798,13 +828,9 @@ export class ISY extends EventEmitter implements Disposable {
798
828
  }
799
829
  }
800
830
 
801
- [Symbol.dispose](): void {
802
- try {
803
- this.webSocket.close();
804
- } catch (e) {
805
- this.logger.error(`Error closing websocket: ${e.message}`);
806
- }
807
- }
808
-
809
831
  // #endregion Private Methods (11)
810
832
  }
833
+
834
+ export namespace ISY {
835
+ export interface Config extends ISYConfig {}
836
+ }
package/src/ISYNode.ts CHANGED
@@ -6,7 +6,7 @@ import { UnitOfMeasure } from './Definitions/Global/UOM.js';
6
6
  import { ISY, NodeType, type ISYScene } from './ISY.js';
7
7
 
8
8
  import { CliConfigSetLevels } from 'winston/lib/winston/config/index.js';
9
- import { Converters } from './Converters.js';
9
+ import { Converter } from './Converters.js';
10
10
  import type { Command } from './Definitions/Global/Commands.js';
11
11
  import { Event } from './Definitions/Global/Events.js';
12
12
  import type { Constructor } from './Devices/Constructor.js';
@@ -106,7 +106,7 @@ export class ISYNode<
106
106
  .trim();
107
107
  if (this.parentType === NodeType.Folder) {
108
108
  this.folder = isy.folderMap.get(this.parent._);
109
- isy.logger.info(`${this.name} this node is in folder ${this.folder}`);
109
+ isy.logger.debug(`${this.name} is in folder ${this.folder}`);
110
110
  this.logger = (msg: any, level: keyof CliConfigSetLevels = 'debug', ...meta: any[]) => {
111
111
  isy.logger[level](`${this.folder} ${this.name} (${this.address}): ${msg}`, meta);
112
112
  return isy.logger;
@@ -168,7 +168,7 @@ export class ISYNode<
168
168
  if (from === to) return value;
169
169
  else {
170
170
  try {
171
- return Converters.Standard[from][to].from(value);
171
+ return Converter.Standard[from][to].from(value);
172
172
  } catch {
173
173
  this.isy.logger.error(`Conversion from ${UnitOfMeasure[from]} to ${UnitOfMeasure[to]} not supported.`);
174
174
  } finally {
@@ -191,7 +191,7 @@ export class ISYNode<
191
191
  }
192
192
  }
193
193
 
194
- public emit(event: 'PropertyChanged' | 'ControlTriggered', propertyName?: string, newValue?: any, oldValue?: any, formattedValue?: string, controlName?: string) {
194
+ public emit(event: 'propertyChanged' | 'controlTriggered', propertyName?: string, newValue?: any, oldValue?: any, formattedValue?: string, controlName?: string) {
195
195
  //if ('PropertyChanged') return super.emit(event, propertyName, newValue, oldValue, formattedValue);
196
196
  //else if ('ControlTriggered') return super.emit(event, controlName);
197
197
  }
@@ -219,7 +219,7 @@ export class ISYNode<
219
219
 
220
220
  public async getNotes(): Promise<NodeNotes> {
221
221
  try {
222
- const result = await this.isy.sendRequest(`nodes/${this.address}/notes`);
222
+ const result = await this.isy.sendRequest(`nodes/${this.address}/notes`, { trailingSlash: false, errorLogLevel: 'debug' });
223
223
  if (result !== null && result !== undefined) {
224
224
  return result.NodeProperties;
225
225
  } else {
@@ -232,7 +232,7 @@ export class ISYNode<
232
232
 
233
233
  public handleControlTrigger(controlName: keyof E & keyof C): boolean {
234
234
  //this.lastChanged = new Date();
235
- this.events.emit('ControlTriggered', controlName);
235
+ this.events.emit('controlTriggered', controlName);
236
236
  return true;
237
237
  }
238
238
 
@@ -253,23 +253,26 @@ export class ISYNode<
253
253
  } else {
254
254
  // this.logger(event.control);
255
255
  const e = event.control;
256
- const dispName = this.commands[e].name;
256
+ const dispName = this.commands[e]?.name;
257
257
  if (dispName !== undefined && dispName !== null) {
258
- this.logger(`Command ${dispName} (${e}) triggered.`);
258
+ this.logger(`Command ${dispName} (${e}) event sent.`);
259
259
  } else {
260
- this.logger(`Command ${e} triggered.`);
260
+ this.logger(`Command ${e} event sent.`);
261
261
  }
262
262
  this.handleControlTrigger(e);
263
263
  return true;
264
264
  }
265
265
  }
266
266
 
267
- public handlePropertyChange(propertyName: StringKeys<D>, value: any, uom: UnitOfMeasure, formattedValue: string, prec?: number): boolean {
267
+ public handlePropertyChange(propertyName: StringKeys<D>, value: any, uom: UnitOfMeasure, prec?: number, formattedValue?: string): boolean {
268
268
  this.lastChanged = new Date();
269
- const oldValue = this.drivers[propertyName].value;
270
- if (this.drivers[propertyName].patch(value, formattedValue, uom, prec)) {
271
- this.emit('PropertyChanged', propertyName, value, oldValue, formattedValue);
272
- this.scenes.forEach((element) => {
269
+ let driver = this.drivers[propertyName];
270
+ this.logger(`Driver ${propertyName} (${driver?.label} value update ${value} (${formattedValue}) uom: ${UnitOfMeasure[uom]} event received.`);
271
+ const oldValue = driver?.value;
272
+ if (driver?.patch(value, formattedValue, uom, prec)) {
273
+ this.logger(`Driver ${driver.label} updated from ${oldValue} to ${value} (${formattedValue})`);
274
+ this.emit('propertyChanged', propertyName, value, oldValue, formattedValue);
275
+ this.scenes?.forEach((element) => {
273
276
  this.logger(`Recalulating ${element.deviceFriendlyName}`);
274
277
  element.recalculateState();
275
278
  });
package/src/ISYScene.ts CHANGED
@@ -77,7 +77,7 @@ export class ISYScene extends ISYNode<Family.Scene, Driver.Signatures<'ST'>,Comm
77
77
  get isOn() {
78
78
  for (const device of this.members) {
79
79
  if (device instanceof Insteon.Relay) {
80
- if (device.drivers.ST?.value === 1) {
80
+ if (device.drivers.ST?.value != 0) {
81
81
  return true;
82
82
  }
83
83
  }
@@ -110,10 +110,10 @@ export class ISYScene extends ISYNode<Family.Scene, Driver.Signatures<'ST'>,Comm
110
110
  }
111
111
  public markAsChanged() {
112
112
  this.lastChanged = new Date();
113
- this.emit('PropertyChanged', 'isOn', this.isOn, this.isOn, this.isOn ? 'on' : 'off');
113
+ this.emit('propertyChanged', 'isOn', this.isOn, this.isOn, this.isOn ? 'on' : 'off');
114
114
 
115
115
  if (this.isDimmable) {
116
- this.emit('PropertyChanged', 'brightnesslevel', this.brightnessLevel, this.brightnessLevel, this.brightnessLevel + '%');
116
+ this.emit('propertyChanged', 'brightnesslevel', this.brightnessLevel, this.brightnessLevel, this.brightnessLevel + '%');
117
117
 
118
118
  }
119
119
  }