isy-nodejs 1.0.2-alpha.6 → 1.0.3-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.
- package/dist/esm/CodeGeneration/CodeFactory.js +17 -6
- package/dist/esm/CodeGeneration/CodeFactory.js.map +1 -1
- package/dist/esm/CodeGeneration/EnumFactory.js +1 -1
- package/dist/esm/CodeGeneration/EnumFactory.js.map +1 -1
- package/dist/esm/CodeGeneration/NodeClassFactory.js +8 -8
- package/dist/esm/CodeGeneration/NodeClassFactory.js.map +1 -1
- package/dist/esm/Converters.js +16 -6
- package/dist/esm/Converters.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/AlertModuleArmed.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/AlertModuleArmed.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/AlertModuleSiren.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/AlertModuleSiren.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/BallastRelayLampSwitch.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/BallastRelayLampSwitch.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/BinaryAlarm.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/BinaryAlarm.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/BinaryControl.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/BinaryControl.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerLamp.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerLamp.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitch.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitch.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitchLed.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerLampSwitchLed.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerMotorSwitch.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerMotorSwitch.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerSwitch.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/DimmerSwitch.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/DoorLock.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/DoorLock.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Ezio2x4Input.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/Ezio2x4Input.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Ezio2x4Output.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/Ezio2x4Output.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/EzrainInput.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/EzrainInput.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/EzrainOutput.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/EzrainOutput.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/FanLincMotor.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/FanLincMotor.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/I3KeypadFlags.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/I3KeypadFlags.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/I3PaddleFlags.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/I3PaddleFlags.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/ImeterSolo.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/ImeterSolo.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/IrLincTx.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/IrLincTx.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/KeypadButton.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/KeypadButton.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/KeypadDimmer.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/KeypadDimmer.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/KeypadRelay.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/KeypadRelay.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/OnOffControl.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/OnOffControl.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Pir2844.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/Pir2844.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Pir2844OnOff.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/Pir2844OnOff.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Pir2844c.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/Pir2844c.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/RelayLamp.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/RelayLamp.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/RelayLampSwitch.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/RelayLampSwitch.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/RelayLampSwitchLed.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/RelayLampSwitchLed.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/RelaySwitch.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/RelaySwitch.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.js +4 -2
- package/dist/esm/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/RemoteLinc2.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/RemoteLinc2.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Siren.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/Siren.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/SirenAlert.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/SirenAlert.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/TempLinc.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/TempLinc.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/Thermostat.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/Thermostat.js.map +1 -1
- package/dist/esm/Devices/Insteon/Generated/X10.js +3 -1
- package/dist/esm/Devices/Insteon/Generated/X10.js.map +1 -1
- package/dist/esm/Devices/Lutron/Generated/LoadShed.js +3 -1
- package/dist/esm/Devices/Lutron/Generated/LoadShed.js.map +1 -1
- package/dist/esm/Devices/UDI/Generated/Channel.js +3 -1
- package/dist/esm/Devices/UDI/Generated/Channel.js.map +1 -1
- package/dist/esm/Devices/UDI/Generated/Em3MainChannel.js +3 -1
- package/dist/esm/Devices/UDI/Generated/Em3MainChannel.js.map +1 -1
- package/dist/esm/Devices/UDI/Generated/Main.js +3 -1
- package/dist/esm/Devices/UDI/Generated/Main.js.map +1 -1
- package/dist/esm/Devices/UDI/Generated/PulseCounter.js +3 -1
- package/dist/esm/Devices/UDI/Generated/PulseCounter.js.map +1 -1
- package/dist/esm/Devices/UDI/Generated/Relay.js +3 -1
- package/dist/esm/Devices/UDI/Generated/Relay.js.map +1 -1
- package/dist/esm/Devices/UDI/Generated/TemperatureSensor.js +3 -1
- package/dist/esm/Devices/UDI/Generated/TemperatureSensor.js.map +1 -1
- package/dist/esm/Devices/ZWave/Generated/ColorSwitch.js +8 -2
- package/dist/esm/Devices/ZWave/Generated/ColorSwitch.js.map +1 -1
- package/dist/esm/Devices/ZWave/Generated/DimmerSwitch.js +3 -1
- package/dist/esm/Devices/ZWave/Generated/DimmerSwitch.js.map +1 -1
- package/dist/esm/ISY.js +58 -33
- package/dist/esm/ISY.js.map +1 -1
- package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js +1 -1
- package/dist/esm/Matter/Behaviors/ISYBridgedDeviceBehavior.js.map +1 -1
- package/dist/esm/Matter/Behaviors/ISYClusterBehavior.js.map +1 -1
- package/dist/esm/Matter/Behaviors/Insteon/ISYOnOffBehavior.js.map +1 -1
- package/dist/esm/Matter/Bridge/Server.js +6 -6
- package/dist/esm/Matter/Bridge/Server.js.map +1 -1
- package/dist/esm/Matter/Mappings/Insteon.js +36 -13
- package/dist/esm/Matter/Mappings/Insteon.js.map +1 -1
- package/dist/esm/{Model/ClusterMap.js → Matter/Mappings/MappingRegistry.js} +12 -7
- package/dist/esm/Matter/Mappings/MappingRegistry.js.map +1 -0
- package/dist/esm/Model/ClassDefinition.js +7 -5
- package/dist/esm/Model/ClassDefinition.js.map +1 -1
- package/dist/esm/types/CodeGeneration/CodeFactory.d.ts.map +1 -1
- package/dist/esm/types/CodeGeneration/EnumFactory.d.ts.map +1 -1
- package/dist/esm/types/CodeGeneration/NodeClassFactory.d.ts.map +1 -1
- package/dist/esm/types/Converters.d.ts +12 -6
- package/dist/esm/types/Converters.d.ts.map +1 -1
- package/dist/esm/types/Devices/EndpointFor.d.ts +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/AlertModuleArmed.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/AlertModuleSiren.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/BallastRelayLampSwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/BinaryAlarm.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/BinaryControl.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/DimmerLamp.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/DimmerLampSwitchLed.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/DimmerMotorSwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/DimmerSwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/DoorLock.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Input.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Ezio2x4Output.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/EzrainInput.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/EzrainOutput.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/FanLincMotor.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/I3KeypadFlags.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/I3PaddleFlags.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/ImeterSolo.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/IrLincTx.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/KeypadButton.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/KeypadDimmer.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts +6 -6
- package/dist/esm/types/Devices/Insteon/Generated/KeypadRelay.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts +3 -3
- package/dist/esm/types/Devices/Insteon/Generated/OnOffControl.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Pir2844.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Pir2844OnOff.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Pir2844c.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts +3 -3
- package/dist/esm/types/Devices/Insteon/Generated/RelayLamp.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts +3 -3
- package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts +6 -6
- package/dist/esm/types/Devices/Insteon/Generated/RelayLampSwitchLed.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/RelaySwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/RemoteLinc2.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Siren.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/SirenAlert.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/TempLinc.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/Thermostat.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/Generated/X10.d.ts.map +1 -1
- package/dist/esm/types/Devices/Insteon/InsteonDevice.d.ts +2 -2
- package/dist/esm/types/Devices/Lutron/Generated/LoadShed.d.ts.map +1 -1
- package/dist/esm/types/Devices/UDI/Generated/Channel.d.ts.map +1 -1
- package/dist/esm/types/Devices/UDI/Generated/Em3MainChannel.d.ts.map +1 -1
- package/dist/esm/types/Devices/UDI/Generated/Main.d.ts.map +1 -1
- package/dist/esm/types/Devices/UDI/Generated/PulseCounter.d.ts.map +1 -1
- package/dist/esm/types/Devices/UDI/Generated/Relay.d.ts.map +1 -1
- package/dist/esm/types/Devices/UDI/Generated/TemperatureSensor.d.ts.map +1 -1
- package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts +16 -9
- package/dist/esm/types/Devices/ZWave/Generated/ColorSwitch.d.ts.map +1 -1
- package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts +15 -15
- package/dist/esm/types/Devices/ZWave/Generated/DimmerSwitch.d.ts.map +1 -1
- package/dist/esm/types/ISY.d.ts +6 -2
- package/dist/esm/types/ISY.d.ts.map +1 -1
- package/dist/esm/types/ISYNode.d.ts +1 -1
- package/dist/esm/types/ISYNode.d.ts.map +1 -1
- package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts +1 -1
- package/dist/esm/types/Matter/Behaviors/ISYBridgedDeviceBehavior.d.ts.map +1 -1
- package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts +1 -1
- package/dist/esm/types/Matter/Behaviors/ISYClusterBehavior.d.ts.map +1 -1
- package/dist/esm/types/Matter/Behaviors/Insteon/ISYOnOffBehavior.d.ts.map +1 -1
- package/dist/esm/types/Matter/Bridge/Server.d.ts +0 -1
- package/dist/esm/types/Matter/Bridge/Server.d.ts.map +1 -1
- package/dist/esm/types/Matter/Mappings/Insteon.d.ts +3 -1
- package/dist/esm/types/Matter/Mappings/Insteon.d.ts.map +1 -1
- package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts +144 -0
- package/dist/esm/types/Matter/Mappings/MappingRegistry.d.ts.map +1 -0
- package/dist/esm/types/Model/ClassDefinition.d.ts +9 -623
- package/dist/esm/types/Model/ClassDefinition.d.ts.map +1 -1
- package/dist/esm/types/Model/EnumDefinition.d.ts +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/src/CodeGeneration/CodeFactory.ts +18 -2
- package/src/CodeGeneration/EnumFactory.ts +5 -4
- package/src/CodeGeneration/NodeClassFactory.ts +9 -8
- package/src/Converters.ts +16 -10
- package/src/Devices/Brultech/Generated/Channel.ts +3 -1
- package/src/Devices/Brultech/Generated/Main.ts +3 -1
- package/src/Devices/Insteon/Generated/AlertModuleArmed.ts +3 -1
- package/src/Devices/Insteon/Generated/AlertModuleSiren.ts +3 -1
- package/src/Devices/Insteon/Generated/BallastRelayLampSwitch.ts +3 -1
- package/src/Devices/Insteon/Generated/BinaryAlarm.ts +3 -1
- package/src/Devices/Insteon/Generated/BinaryControl.ts +3 -1
- package/src/Devices/Insteon/Generated/DimmerLamp.ts +3 -1
- package/src/Devices/Insteon/Generated/DimmerLampSwitch.ts +3 -1
- package/src/Devices/Insteon/Generated/DimmerLampSwitchLed.ts +3 -1
- package/src/Devices/Insteon/Generated/DimmerMotorSwitch.ts +3 -1
- package/src/Devices/Insteon/Generated/DimmerSwitch.ts +3 -1
- package/src/Devices/Insteon/Generated/DoorLock.ts +3 -1
- package/src/Devices/Insteon/Generated/Ezio2x4Input.ts +3 -1
- package/src/Devices/Insteon/Generated/Ezio2x4Output.ts +3 -1
- package/src/Devices/Insteon/Generated/EzrainInput.ts +3 -1
- package/src/Devices/Insteon/Generated/EzrainOutput.ts +3 -1
- package/src/Devices/Insteon/Generated/FanLincMotor.ts +3 -1
- package/src/Devices/Insteon/Generated/I3KeypadFlags.ts +3 -1
- package/src/Devices/Insteon/Generated/I3PaddleFlags.ts +3 -1
- package/src/Devices/Insteon/Generated/ImeterSolo.ts +3 -1
- package/src/Devices/Insteon/Generated/IrLincTx.ts +3 -1
- package/src/Devices/Insteon/Generated/KeypadButton.ts +3 -1
- package/src/Devices/Insteon/Generated/KeypadDimmer.ts +4 -2
- package/src/Devices/Insteon/Generated/KeypadRelay.ts +16 -14
- package/src/Devices/Insteon/Generated/OnOffControl.ts +7 -5
- package/src/Devices/Insteon/Generated/Pir2844.ts +4 -2
- package/src/Devices/Insteon/Generated/Pir2844OnOff.ts +3 -1
- package/src/Devices/Insteon/Generated/Pir2844c.ts +4 -2
- package/src/Devices/Insteon/Generated/RelayLamp.ts +7 -5
- package/src/Devices/Insteon/Generated/RelayLampSwitch.ts +7 -5
- package/src/Devices/Insteon/Generated/RelayLampSwitchLed.ts +9 -7
- package/src/Devices/Insteon/Generated/RelaySwitch.ts +4 -2
- package/src/Devices/Insteon/Generated/RelaySwitchOnlyPlusQuery.ts +4 -2
- package/src/Devices/Insteon/Generated/RemoteLinc2.ts +3 -1
- package/src/Devices/Insteon/Generated/Siren.ts +3 -1
- package/src/Devices/Insteon/Generated/SirenAlert.ts +3 -1
- package/src/Devices/Insteon/Generated/TempLinc.ts +3 -1
- package/src/Devices/Insteon/Generated/Thermostat.ts +3 -1
- package/src/Devices/Insteon/Generated/X10.ts +3 -1
- package/src/Devices/Lutron/Generated/LoadShed.ts +3 -1
- package/src/Devices/NCD/Generated/Relay.ts +3 -1
- package/src/Devices/Poly/Generated/MatterBridge.ts +3 -1
- package/src/Devices/Scene/Generated/Scene.ts +3 -1
- package/src/Devices/UDI/Generated/Channel.ts +3 -1
- package/src/Devices/UDI/Generated/Em3MainChannel.ts +3 -1
- package/src/Devices/UDI/Generated/Main.ts +3 -1
- package/src/Devices/UDI/Generated/PulseCounter.ts +3 -1
- package/src/Devices/UDI/Generated/Relay.ts +3 -1
- package/src/Devices/UDI/Generated/TemperatureSensor.ts +3 -1
- package/src/Devices/ZWave/Generated/ColorSwitch.ts +19 -7
- package/src/Devices/ZWave/Generated/DimmerSwitch.ts +13 -11
- package/src/Devices/ZigBeeLegacy/Generated/Relay.ts +3 -1
- package/src/Devices/ZigBeeLegacy/Generated/Thermostat.ts +3 -1
- package/src/ISY.ts +57 -24
- package/src/Matter/Behaviors/ISYBridgedDeviceBehavior.ts +1 -1
- package/src/Matter/Behaviors/ISYClusterBehavior.ts +2 -1
- package/src/Matter/Behaviors/Insteon/ISYOnOffBehavior.ts +2 -1
- package/src/Matter/Bridge/Server.ts +10 -6
- package/src/Matter/Mappings/Insteon.ts +38 -15
- package/src/{Model/ClusterMap.ts → Matter/Mappings/MappingRegistry.ts} +26 -14
- package/src/Model/ClassDefinition.ts +16 -10
- package/src/Utils.ts +1 -1
- package/dist/esm/CodeGeneration/NodeFactory.js +0 -245
- package/dist/esm/CodeGeneration/NodeFactory.js.map +0 -1
- package/dist/esm/Model/ClusterMap.js.map +0 -1
- package/dist/esm/types/CodeGeneration/NodeFactory.d.ts +0 -75
- package/dist/esm/types/CodeGeneration/NodeFactory.d.ts.map +0 -1
- package/dist/esm/types/Model/ClusterMap.d.ts +0 -101
- package/dist/esm/types/Model/ClusterMap.d.ts.map +0 -1
|
@@ -41,18 +41,18 @@ export class DimmerSwitchNode extends Base<Drivers, Commands> implements DimmerS
|
|
|
41
41
|
this.drivers.ST = Driver.create("ST", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Percent, label: "Status", name: "status" });
|
|
42
42
|
this.drivers.ERR = Driver.create("ERR", this, nodeInfo.property as DriverState, { uom: UnitOfMeasure.Index, label: "Responding", name: "responding" });
|
|
43
43
|
}
|
|
44
|
-
async on(value?: ZWave.PercentOpt
|
|
44
|
+
async on(value?: number | ZWave.PercentOpt, rampRate?: number) { return this.sendCommand("DON", value, { RR: rampRate }); }
|
|
45
45
|
async off() { return this.sendCommand("DOF"); }
|
|
46
46
|
async fastOn() { return this.sendCommand("DFON"); }
|
|
47
47
|
async fastOff() { return this.sendCommand("DFOF"); }
|
|
48
48
|
async brighten() { return this.sendCommand("BRT"); }
|
|
49
49
|
async dim() { return this.sendCommand("DIM"); }
|
|
50
|
-
async fadeUp(startLevel?: ZWave.PercentOpt
|
|
51
|
-
async fadeDown(startLevel?: ZWave.PercentOpt
|
|
52
|
-
async fade(direction: ZWave.FadeDirection, startLevel?: ZWave.PercentOpt
|
|
50
|
+
async fadeUp(startLevel?: number | ZWave.PercentOpt, rampRate?: number) { return this.sendCommand("FDUP", { STARTLEVEL: startLevel, RR: rampRate }); }
|
|
51
|
+
async fadeDown(startLevel?: number | ZWave.PercentOpt, rampRate?: number) { return this.sendCommand("FDDOWN", { STARTLEVEL: startLevel, RR: rampRate }); }
|
|
52
|
+
async fade(direction: ZWave.FadeDirection, startLevel?: number | ZWave.PercentOpt, rampRate?: number, direction2?: ZWave.FadeDirection, fadeRate2?: number) { return this.sendCommand("FADE", { DIR: direction, STARTLEVEL: startLevel, RR: rampRate, DIR2: direction2, STEP2: fadeRate2 }); }
|
|
53
53
|
async fadeStop() { return this.sendCommand("FDSTOP"); }
|
|
54
54
|
async query() { return this.sendCommand("QUERY"); }
|
|
55
|
-
async setConfiguration(parameterNumber: number, parameterValue: number
|
|
55
|
+
async setConfiguration(parameterNumber: number, parameterValue: number) { return this.sendCommand("CONFIG", { NUM: parameterNumber, VAL: parameterValue }); }
|
|
56
56
|
async writeChanges() { return this.sendCommand("WDU"); }
|
|
57
57
|
public get status(): number {
|
|
58
58
|
return this.drivers.ST?.value;
|
|
@@ -68,7 +68,9 @@ export namespace DimmerSwitch {
|
|
|
68
68
|
export interface Interface extends Omit<InstanceType<typeof DimmerSwitchNode>, keyof ISYDeviceNode<any, any, any, any>> {
|
|
69
69
|
nodeDefId: "119";
|
|
70
70
|
}
|
|
71
|
-
export function is(node: ISYNode<any, any, any, any>): node is DimmerSwitchNode {
|
|
71
|
+
export function is(node: ISYNode<any, any, any, any>): node is DimmerSwitchNode {
|
|
72
|
+
return ["119"].includes(node.nodeDefId);
|
|
73
|
+
}
|
|
72
74
|
export function isImplementedBy(node: ISYNode<any, any, any, any>): node is DimmerSwitchNode {
|
|
73
75
|
return ["119"].includes(node.nodeDefId);
|
|
74
76
|
}
|
|
@@ -77,7 +79,7 @@ export namespace DimmerSwitch {
|
|
|
77
79
|
}
|
|
78
80
|
export const Node = DimmerSwitchNode;
|
|
79
81
|
export type Commands = {
|
|
80
|
-
DON: ((value?: ZWave.PercentOpt
|
|
82
|
+
DON: ((value?: number | ZWave.PercentOpt, RR?: number) => Promise<boolean>) & {
|
|
81
83
|
label: "On";
|
|
82
84
|
name: "on";
|
|
83
85
|
};
|
|
@@ -101,15 +103,15 @@ export namespace DimmerSwitch {
|
|
|
101
103
|
label: "Dim";
|
|
102
104
|
name: "dim";
|
|
103
105
|
};
|
|
104
|
-
FDUP: ((STARTLEVEL?: ZWave.PercentOpt
|
|
106
|
+
FDUP: ((STARTLEVEL?: number | ZWave.PercentOpt, RR?: number) => Promise<boolean>) & {
|
|
105
107
|
label: "Fade Up";
|
|
106
108
|
name: "fadeUp";
|
|
107
109
|
};
|
|
108
|
-
FDDOWN: ((STARTLEVEL?: ZWave.PercentOpt
|
|
110
|
+
FDDOWN: ((STARTLEVEL?: number | ZWave.PercentOpt, RR?: number) => Promise<boolean>) & {
|
|
109
111
|
label: "Fade Down";
|
|
110
112
|
name: "fadeDown";
|
|
111
113
|
};
|
|
112
|
-
FADE: ((DIR: ZWave.FadeDirection, STARTLEVEL?: ZWave.PercentOpt
|
|
114
|
+
FADE: ((DIR: ZWave.FadeDirection, STARTLEVEL?: number | ZWave.PercentOpt, RR?: number, DIR2?: ZWave.FadeDirection, STEP2?: number) => Promise<boolean>) & {
|
|
113
115
|
label: "Fade";
|
|
114
116
|
name: "fade";
|
|
115
117
|
};
|
|
@@ -121,7 +123,7 @@ export namespace DimmerSwitch {
|
|
|
121
123
|
label: "Query";
|
|
122
124
|
name: "query";
|
|
123
125
|
};
|
|
124
|
-
CONFIG: ((NUM: number, VAL: number
|
|
126
|
+
CONFIG: ((NUM: number, VAL: number) => Promise<boolean>) & {
|
|
125
127
|
label: "Set Configuration";
|
|
126
128
|
name: "setConfiguration";
|
|
127
129
|
};
|
|
@@ -53,7 +53,9 @@ export namespace Relay {
|
|
|
53
53
|
export interface Interface extends Omit<InstanceType<typeof RelayNode>, keyof ISYDeviceNode<any, any, any, any>> {
|
|
54
54
|
nodeDefId: "RelayLoadControl";
|
|
55
55
|
}
|
|
56
|
-
export function is(node: ISYNode<any, any, any, any>): node is RelayNode {
|
|
56
|
+
export function is(node: ISYNode<any, any, any, any>): node is RelayNode {
|
|
57
|
+
return ["RelayLoadControl"].includes(node.nodeDefId);
|
|
58
|
+
}
|
|
57
59
|
export function isImplementedBy(node: ISYNode<any, any, any, any>): node is RelayNode {
|
|
58
60
|
return ["RelayLoadControl"].includes(node.nodeDefId);
|
|
59
61
|
}
|
|
@@ -105,7 +105,9 @@ export namespace Thermostat {
|
|
|
105
105
|
export interface Interface extends Omit<InstanceType<typeof ThermostatNode>, keyof ISYDeviceNode<any, any, any, any>> {
|
|
106
106
|
nodeDefId: "Thermostat";
|
|
107
107
|
}
|
|
108
|
-
export function is(node: ISYNode<any, any, any, any>): node is ThermostatNode {
|
|
108
|
+
export function is(node: ISYNode<any, any, any, any>): node is ThermostatNode {
|
|
109
|
+
return ["Thermostat"].includes(node.nodeDefId);
|
|
110
|
+
}
|
|
109
111
|
export function isImplementedBy(node: ISYNode<any, any, any, any>): node is ThermostatNode {
|
|
110
112
|
return ["Thermostat"].includes(node.nodeDefId);
|
|
111
113
|
}
|
package/src/ISY.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
2
|
import { writeFile } from 'fs';
|
|
3
3
|
|
|
4
4
|
import { Parser, type ParserOptions } from 'xml2js';
|
|
5
5
|
import { parseBooleans, parseNumbers } from 'xml2js/lib/processors.js';
|
|
6
|
-
|
|
6
|
+
import WebSocket from 'ws';
|
|
7
7
|
import axios, { type AxiosRequestConfig } from 'axios';
|
|
8
8
|
import { EventEmitter } from 'events';
|
|
9
9
|
import { format, Logger, loggers, type LeveledLogMethod } from 'winston';
|
|
@@ -27,6 +27,9 @@ import { NodeFactory } from './Devices/NodeFactory.js';
|
|
|
27
27
|
import { ISYError } from './ISYError.js';
|
|
28
28
|
import type { Config } from './Model/Config.js';
|
|
29
29
|
import { findPackageJson } from './Utils.js';
|
|
30
|
+
import { textChangeRangeIsUnchanged } from 'typescript';
|
|
31
|
+
import type { ClientRequestArgs } from 'http';
|
|
32
|
+
import { promisify } from 'util';
|
|
30
33
|
|
|
31
34
|
|
|
32
35
|
|
|
@@ -94,9 +97,9 @@ interface ISYConfig {
|
|
|
94
97
|
port: number;
|
|
95
98
|
protocol: 'http' | 'https';
|
|
96
99
|
username: string;
|
|
97
|
-
|
|
98
100
|
socketPath?: string;
|
|
99
|
-
|
|
101
|
+
axiosOptions?: AxiosRequestConfig;
|
|
102
|
+
webSocketOptions?: WebSocket.ClientOptions & ClientRequestArgs;
|
|
100
103
|
// #endregion Properties (8)
|
|
101
104
|
}
|
|
102
105
|
|
|
@@ -135,7 +138,7 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
135
138
|
public productName = 'eisy';
|
|
136
139
|
public firmwareVersion: any;
|
|
137
140
|
public vendorName = 'Universal Devices, Inc.';
|
|
138
|
-
public webSocket: WebSocket
|
|
141
|
+
public webSocket: WebSocket;
|
|
139
142
|
|
|
140
143
|
public apiVersion: string;
|
|
141
144
|
|
|
@@ -162,7 +165,7 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
162
165
|
};
|
|
163
166
|
this.protocol = config.protocol;
|
|
164
167
|
this.wsprotocol = config.protocol === 'https' ? 'wss' : 'ws';
|
|
165
|
-
|
|
168
|
+
this.socketPath = config.socketPath;
|
|
166
169
|
this.axiosOptions = {
|
|
167
170
|
baseURL: `${this.protocol}://${this.host}:${this.port}`,
|
|
168
171
|
validateStatus: (status) => status >= 200 && status < 300
|
|
@@ -174,6 +177,15 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
174
177
|
this.axiosOptions.auth = { username: this.credentials.username, password: this.credentials.password };
|
|
175
178
|
}
|
|
176
179
|
|
|
180
|
+
this.webSocketOptions = { origin: 'com.universal-devices.websockets.isy' };
|
|
181
|
+
|
|
182
|
+
if (this.socketPath) {
|
|
183
|
+
this.webSocketOptions.socketPath = this.socketPath;
|
|
184
|
+
} else {
|
|
185
|
+
this.webSocketOptions.auth = `${this.credentials.username}:${this.credentials.password}`;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
|
|
177
189
|
//this.elkEnabled = config.elkEnabled ?? false;
|
|
178
190
|
|
|
179
191
|
this.nodesLoaded = false;
|
|
@@ -355,29 +367,40 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
355
367
|
try {
|
|
356
368
|
await this.loadConfig();
|
|
357
369
|
await this.loadNodes();
|
|
370
|
+
await this.refreshStatuses();
|
|
358
371
|
await this.loadVariables(VariableType.Integer);
|
|
359
372
|
await this.loadVariables(VariableType.State);
|
|
360
|
-
await this.refreshStatuses();
|
|
361
373
|
await this.#finishInitialize(true);
|
|
362
374
|
return true;
|
|
363
375
|
} catch (e) {
|
|
364
376
|
if (e instanceof ISYInitializationError) {
|
|
377
|
+
if(e.step === 'variables')
|
|
378
|
+
{
|
|
379
|
+
this.logger.warn(`Error loading variables: ${e.message}`);
|
|
380
|
+
await this.#finishInitialize(true);
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
365
383
|
this.logger.error(`Error initializing ISY during (${e.step}): ${e.message}`);
|
|
384
|
+
return false;
|
|
366
385
|
} else {
|
|
367
386
|
this.logger.error(`Error initializing ISY: ${e.message}`);
|
|
387
|
+
return false;
|
|
368
388
|
}
|
|
369
389
|
throw e;
|
|
370
390
|
} finally {
|
|
371
391
|
if (this.nodesLoaded !== true) {
|
|
372
|
-
that.#finishInitialize(false);
|
|
392
|
+
await that.#finishInitialize(false);
|
|
373
393
|
}
|
|
374
394
|
}
|
|
375
395
|
}
|
|
376
396
|
|
|
397
|
+
webSocketOptions: WebSocket.ClientOptions & ClientRequestArgs;
|
|
398
|
+
|
|
377
399
|
public async initializeWebSocket() {
|
|
378
400
|
try {
|
|
379
401
|
const that = this;
|
|
380
|
-
|
|
402
|
+
|
|
403
|
+
//const auth = `Basic ${Buffer.from(`${this.credentials.username}:${this.credentials.password}`).toString('base64')}`;
|
|
381
404
|
this.logger.info(`Opening webSocket: ${this.wsprotocol}://${this.address}/rest/subscribe`);
|
|
382
405
|
if (this.webSocket) {
|
|
383
406
|
try {
|
|
@@ -386,27 +409,33 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
386
409
|
this.logger.warn(`Error closing existing websocket: ${e.message}`);
|
|
387
410
|
}
|
|
388
411
|
}
|
|
389
|
-
|
|
390
|
-
headers: {
|
|
412
|
+
|
|
413
|
+
/*headers: {
|
|
391
414
|
Origin: 'com.universal-devices.websockets.isy',
|
|
392
|
-
|
|
415
|
+
auth
|
|
393
416
|
},
|
|
394
|
-
ping: 10
|
|
395
|
-
});
|
|
396
417
|
|
|
397
|
-
|
|
418
|
+
ping: 10*/
|
|
419
|
+
let p = new Promise<void>((resolve, reject) => {
|
|
398
420
|
|
|
399
|
-
this.webSocket
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
421
|
+
this.webSocket = new WebSocket(`${this.wsprotocol}://${this.address}/rest/subscribe`, ['ISYSUB'], this.webSocketOptions);
|
|
422
|
+
this.lastActivity = new Date();
|
|
423
|
+
//this.webSocket.onmessage = (event) => {this.handleWebSocketMessage()
|
|
424
|
+
this.webSocket.on('open',() => {
|
|
425
|
+
this.logger.info('Websocket connection open');
|
|
426
|
+
resolve();
|
|
427
|
+
})
|
|
428
|
+
.on('message',(data,b)=> {
|
|
429
|
+
that.logger.silly(`Received message: ${Utils.logStringify(data, 1)}`);
|
|
430
|
+
that.handleWebSocketMessage({data: data});
|
|
403
431
|
})
|
|
404
432
|
.on('error', (err: any, response: any) => {
|
|
405
|
-
that.logger.warn(`Websocket subscription error: ${
|
|
433
|
+
that.logger.warn(`Websocket subscription error: ${err}`);
|
|
434
|
+
return reject(new ISYInitializationError('Websocket subscription error', 'websocket'));
|
|
406
435
|
})
|
|
407
436
|
.on('fail', (data: string, response: any) => {
|
|
408
437
|
that.logger.warn(`Websocket subscription failure: ${data}`);
|
|
409
|
-
|
|
438
|
+
return reject(new Error('Websocket subscription failure'));
|
|
410
439
|
})
|
|
411
440
|
.on('abort', () => {
|
|
412
441
|
that.logger.warn('Websocket subscription aborted.');
|
|
@@ -414,8 +443,11 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
414
443
|
})
|
|
415
444
|
.on('timeout', (ms: string) => {
|
|
416
445
|
that.logger.warn(`Websocket subscription timed out after ${ms} milliseconds.`);
|
|
417
|
-
|
|
446
|
+
return reject(new Error('Timeout contacting ISY'));
|
|
447
|
+
//throw new Error('Timeout contacting ISY');
|
|
418
448
|
});
|
|
449
|
+
});
|
|
450
|
+
return p;
|
|
419
451
|
} catch (e) {
|
|
420
452
|
throw new ISYInitializationError(e, 'websocket');
|
|
421
453
|
}
|
|
@@ -646,7 +678,7 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
646
678
|
}
|
|
647
679
|
}
|
|
648
680
|
|
|
649
|
-
#finishInitialize(success: boolean) {
|
|
681
|
+
async #finishInitialize(success: boolean) {
|
|
650
682
|
if (!this.nodesLoaded) {
|
|
651
683
|
this.nodesLoaded = true;
|
|
652
684
|
//initializeCompleted();
|
|
@@ -656,10 +688,11 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
656
688
|
// }
|
|
657
689
|
if (this.enableWebSocket) {
|
|
658
690
|
this.guardianTimer = setInterval(this.#guardian.bind(this), 60000);
|
|
659
|
-
this.initializeWebSocket();
|
|
691
|
+
return this.initializeWebSocket();
|
|
660
692
|
}
|
|
661
693
|
}
|
|
662
694
|
}
|
|
695
|
+
|
|
663
696
|
}
|
|
664
697
|
|
|
665
698
|
async #guardian() {
|
|
@@ -11,10 +11,10 @@ import internal from 'stream';
|
|
|
11
11
|
import type { Driver } from '../../Definitions/Global/Drivers.js';
|
|
12
12
|
import { ISY } from '../../ISY.js';
|
|
13
13
|
import type { ISYDevice } from '../../ISYDevice.js';
|
|
14
|
-
import { DeviceToClusterMap, MappingRegistry, type ClusterMapping, type BehaviorMapping } from '../../Model/ClusterMap.js';
|
|
15
14
|
import { server } from 'typescript';
|
|
16
15
|
import type { ISYNode } from '../../ISYNode.js';
|
|
17
16
|
import type { Family } from '../../Definitions/index.js';
|
|
17
|
+
import { MappingRegistry, type BehaviorMapping, type DeviceToClusterMap } from '../Mappings/MappingRegistry.js';
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
|
|
@@ -4,8 +4,9 @@ import '@project-chip/matter.js/device';
|
|
|
4
4
|
import { Converter } from '../../Converters.js';
|
|
5
5
|
import type { Constructor } from '../../Devices/Constructor.js';
|
|
6
6
|
import type { DriversOf, ISYNode } from '../../ISYNode.js';
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
import { ISYBridgedDeviceBehavior } from './ISYBridgedDeviceBehavior.js';
|
|
9
|
+
import type { BehaviorMapping } from '../Mappings/MappingRegistry.js';
|
|
9
10
|
|
|
10
11
|
// #region Type aliases (6)
|
|
11
12
|
|
|
@@ -8,7 +8,7 @@ import type { MaybePromise } from '@project-chip/matter.js/util';
|
|
|
8
8
|
import { DriverType } from '../../../Definitions/Global/Drivers.js';
|
|
9
9
|
import { InsteonDimmableDevice } from '../../../Devices/Insteon/InsteonDimmableDevice.js';
|
|
10
10
|
import { InsteonRelayDevice } from '../../../Devices/Insteon/InsteonRelayDevice.js';
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
import { ClusterForBehavior, ISYClusterBehavior, type PropertyChange } from '../ISYClusterBehavior.js';
|
|
13
13
|
|
|
14
14
|
import { Converter } from '../../../Converters.js';
|
|
@@ -53,6 +53,7 @@ export class ISYDimmableBehavior extends ISYClusterBehavior(DimmableLightRequire
|
|
|
53
53
|
|
|
54
54
|
override setLevel(level: number): MaybePromise<void> {
|
|
55
55
|
level = Converter.Matter.LevelFrom0To255.LightingLevel.from(level);
|
|
56
|
+
|
|
56
57
|
if (level > 0) {
|
|
57
58
|
return this.device.on(level);
|
|
58
59
|
} else {
|
|
@@ -17,14 +17,16 @@ import { ISYBridgedDeviceBehavior } from '../Behaviors/ISYBridgedDeviceBehavior.
|
|
|
17
17
|
import { ISYDimmableBehavior, ISYOnOffBehavior } from '../Behaviors/Insteon/ISYOnOffBehavior.js';
|
|
18
18
|
import '../Mappings/Insteon.js';
|
|
19
19
|
import type { ISYNode } from '../../ISYNode.js';
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
import { Options } from '../../Definitions/ZWave/index.js';
|
|
22
22
|
import { InsteonBaseDevice } from '../../Devices/Insteon/InsteonBaseDevice.js';
|
|
23
23
|
import { DimmerLamp } from '../../Devices/Insteon/Generated/DimmerLamp.js';
|
|
24
24
|
import { Family } from '../../Definitions/index.js';
|
|
25
25
|
import { RelayLamp } from '../../Devices/Insteon/index.js';
|
|
26
26
|
import type { DeviceTypeDefinition } from '@project-chip/matter.js/device';
|
|
27
|
+
import { MappingRegistry } from '../Mappings/MappingRegistry.js';
|
|
27
28
|
import type { BridgedISYNodeInformationServer } from '../../Devices/EndpointFor.js';
|
|
29
|
+
import { BasicInformation } from '@project-chip/matter.js/cluster';
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
// #region Interfaces (1)
|
|
@@ -226,7 +228,7 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
|
|
|
226
228
|
if (deviceOptions?.exclude) {
|
|
227
229
|
continue;
|
|
228
230
|
}
|
|
229
|
-
let
|
|
231
|
+
let uniqueId = `${device.address.replaceAll(' ', '_').replaceAll('.', '_')}`;
|
|
230
232
|
if (device.enabled) {
|
|
231
233
|
//const name = `OnOff ${isASocket ? "Socket" : "Light"} ${i}`;
|
|
232
234
|
|
|
@@ -257,7 +259,7 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
|
|
|
257
259
|
logger.info(`Device ${device.label} (${device.address}) with NodeDefId = ${device.nodeDefId} mapped to ${deviceType.name}`);
|
|
258
260
|
//@ts-ignore
|
|
259
261
|
const endpoint = new Endpoint(baseBehavior, {
|
|
260
|
-
id:
|
|
262
|
+
id: uniqueId,
|
|
261
263
|
isyNode: {
|
|
262
264
|
address: device.address
|
|
263
265
|
},
|
|
@@ -274,10 +276,12 @@ export async function createMatterServer(isy?: ISY, config?: Config): Promise<Se
|
|
|
274
276
|
softwareVersion: Number(device.version),
|
|
275
277
|
softwareVersionString: `v.${device.version}`,
|
|
276
278
|
|
|
277
|
-
serialNumber:
|
|
279
|
+
serialNumber: device.address,
|
|
278
280
|
reachable: true,
|
|
279
|
-
uniqueId:
|
|
280
|
-
|
|
281
|
+
uniqueId: uniqueId
|
|
282
|
+
|
|
283
|
+
},
|
|
284
|
+
|
|
281
285
|
});
|
|
282
286
|
|
|
283
287
|
await aggregator.add(endpoint);
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
|
|
2
2
|
import { Family } from '../../Definitions/Global/Families.js';
|
|
3
3
|
import * as Insteon from '../../Devices/Insteon/index.js';
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
|
|
6
6
|
//import InsteonMap from "./Insteon.json";
|
|
7
7
|
|
|
8
8
|
import { OnOffLightDevice, DimmableLightDevice } from '@matter/node/devices';
|
|
9
|
+
import { add, MappingRegistry, type EndpointMapping, type FamilyToClusterMap } from './MappingRegistry.js';
|
|
9
10
|
|
|
10
|
-
const map: FamilyToClusterMap<Family.Insteon> = {
|
|
11
|
+
export const map: FamilyToClusterMap<Family.Insteon> = {
|
|
11
12
|
Family: Family.Insteon,
|
|
12
13
|
|
|
13
14
|
RelayLamp: {
|
|
@@ -15,11 +16,10 @@ const map: FamilyToClusterMap<Family.Insteon> = {
|
|
|
15
16
|
mapping: {
|
|
16
17
|
OnOff: {
|
|
17
18
|
attributes: {
|
|
18
|
-
onOff: { driver: 'ST', converter: '
|
|
19
|
+
onOff: { driver: 'ST', converter: 'Percent.Boolean' }
|
|
19
20
|
},
|
|
20
21
|
commands: { on: 'DON' }
|
|
21
22
|
}
|
|
22
|
-
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
RelayLampSwitch: {
|
|
@@ -27,12 +27,12 @@ const map: FamilyToClusterMap<Family.Insteon> = {
|
|
|
27
27
|
mapping: {
|
|
28
28
|
OnOff: {
|
|
29
29
|
attributes: {
|
|
30
|
-
onOff: { driver: 'ST', converter: '
|
|
30
|
+
onOff: { driver: 'ST', converter: 'Percent.Boolean' }
|
|
31
31
|
},
|
|
32
32
|
commands: { on: 'DON' }
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
|
|
35
|
+
},
|
|
36
36
|
DimmerLamp: {
|
|
37
37
|
deviceType: DimmableLightDevice,
|
|
38
38
|
// @ts-ignore
|
|
@@ -40,16 +40,16 @@ const map: FamilyToClusterMap<Family.Insteon> = {
|
|
|
40
40
|
// @ts-ignore
|
|
41
41
|
OnOff: {
|
|
42
42
|
attributes: {
|
|
43
|
-
onOff: { driver: 'ST', converter: '
|
|
43
|
+
onOff: { driver: 'ST', converter: 'Percent.Boolean' }
|
|
44
44
|
},
|
|
45
45
|
commands: { on: 'DON' }
|
|
46
46
|
},
|
|
47
47
|
LevelControl: {
|
|
48
48
|
// @ts-ignore
|
|
49
49
|
attributes: {
|
|
50
|
-
currentLevel: { driver: 'ST', converter: '
|
|
51
|
-
startUpCurrentLevel: { driver: 'OL', converter: '
|
|
52
|
-
onLevel: { driver: 'OL', converter: '
|
|
50
|
+
currentLevel: { driver: 'ST', converter: 'Percent.LightingLevel' },
|
|
51
|
+
startUpCurrentLevel: { driver: 'OL', converter: 'Percent.LightingLevel' },
|
|
52
|
+
onLevel: { driver: 'OL', converter: 'Percent.LightingLevel' }
|
|
53
53
|
},
|
|
54
54
|
commands: { setLevel: { command: 'DON' } }
|
|
55
55
|
}
|
|
@@ -59,20 +59,19 @@ const map: FamilyToClusterMap<Family.Insteon> = {
|
|
|
59
59
|
deviceType: DimmableLightDevice,
|
|
60
60
|
// @ts-ignore
|
|
61
61
|
mapping: {
|
|
62
|
-
|
|
63
62
|
// @ts-ignore
|
|
64
63
|
OnOff: {
|
|
65
64
|
attributes: {
|
|
66
|
-
onOff: { driver: 'ST', converter: '
|
|
65
|
+
onOff: { driver: 'ST', converter: 'Percent.Boolean' }
|
|
67
66
|
},
|
|
68
67
|
commands: { on: 'DON' }
|
|
69
68
|
},
|
|
70
69
|
LevelControl: {
|
|
71
70
|
// @ts-ignore
|
|
72
71
|
attributes: {
|
|
73
|
-
currentLevel: { driver: 'ST', converter: '
|
|
74
|
-
startUpCurrentLevel: { driver: 'OL', converter: '
|
|
75
|
-
onLevel: { driver: 'OL', converter: '
|
|
72
|
+
currentLevel: { driver: 'ST', converter: 'Percent.LightingLevel' },
|
|
73
|
+
startUpCurrentLevel: { driver: 'OL', converter: 'Percent.LightingLevel' },
|
|
74
|
+
onLevel: { driver: 'OL', converter: 'Percent.LightingLevel' }
|
|
76
75
|
},
|
|
77
76
|
commands: { setLevel: { command: 'DON' } }
|
|
78
77
|
}
|
|
@@ -80,5 +79,29 @@ const map: FamilyToClusterMap<Family.Insteon> = {
|
|
|
80
79
|
}
|
|
81
80
|
};
|
|
82
81
|
|
|
82
|
+
/*let newMap = add(map, Insteon.DimmerLamp.Node, {
|
|
83
|
+
deviceType: DimmableLightDevice,
|
|
84
|
+
// @ts-ignore
|
|
85
|
+
mapping: {
|
|
86
|
+
// @ts-ignore
|
|
87
|
+
OnOff: {
|
|
88
|
+
attributes: {
|
|
89
|
+
onOff: { driver: 'ST', converter: 'Percent.Boolean' ,
|
|
90
|
+
},
|
|
91
|
+
commands: { on: 'DON' }
|
|
92
|
+
},
|
|
93
|
+
//@ts-ignore
|
|
94
|
+
LevelControl: {
|
|
95
|
+
// @ts-ignore
|
|
96
|
+
attributes: {
|
|
97
|
+
currentLevel: { driver: 'ST', converter: 'Percent.LightingLevel' },
|
|
98
|
+
startUpCurrentLevel: { driver: 'OL', converter: 'Percent.LightingLevel' },
|
|
99
|
+
onLevel: { driver: 'OL', converter: 'Percent.LightingLevel' }
|
|
100
|
+
},
|
|
101
|
+
commands: { setLevel: { command: 'DON' } }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}});*/
|
|
105
|
+
|
|
83
106
|
|
|
84
107
|
MappingRegistry.register(map);
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import * as Clusters from '@project-chip/matter.js/cluster';
|
|
2
2
|
|
|
3
|
-
import type { Converter } from '
|
|
4
|
-
import { DriverType } from '
|
|
5
|
-
import { Devices, Insteon } from '
|
|
3
|
+
import type { Converter } from '../../Converters.js';
|
|
4
|
+
import { DriverType } from '../../Definitions/Global/Drivers.js';
|
|
5
|
+
import { Devices, Insteon } from '../../Devices/index.js';
|
|
6
6
|
|
|
7
7
|
import { ClusterBehavior, MutableEndpoint, SupportedBehaviors } from '@matter/main';
|
|
8
8
|
import type { OnOffLightDevice } from '@matter/main/devices';
|
|
9
9
|
import { BridgedDeviceBasicInformationBehavior } from '@matter/node/behaviors';
|
|
10
10
|
import type { DeviceTypeDefinition } from '@project-chip/matter.js/device';
|
|
11
|
-
import { Family } from '
|
|
12
|
-
import { NodeFactory } from '
|
|
13
|
-
import { CommandsOf, DriversOf, ISYNode } from '
|
|
14
|
-
import { ISYBridgedDeviceBehavior } from '../
|
|
15
|
-
import { ISYOnOffBehavior } from '../
|
|
16
|
-
import type { PickOfType, Remove } from '
|
|
17
|
-
import { ClusterType } from '
|
|
11
|
+
import { Family } from '../../Definitions/index.js';
|
|
12
|
+
import { NodeFactory } from '../../Devices/NodeFactory.js';
|
|
13
|
+
import { CommandsOf, DriversOf, ISYNode } from '../../ISYNode.js';
|
|
14
|
+
import { ISYBridgedDeviceBehavior } from '../Behaviors/ISYBridgedDeviceBehavior.js';
|
|
15
|
+
import { ISYOnOffBehavior } from '../Behaviors/Insteon/ISYOnOffBehavior.js';
|
|
16
|
+
import type { PathsWithLimit, PickOfType, Remove } from '../../Utils.js';
|
|
17
|
+
import { ClusterType } from '../../Model/ClusterType.js';
|
|
18
|
+
import type { Constructor } from '../../Devices/Constructor.js';
|
|
18
19
|
|
|
19
20
|
// #region Type aliases (16)
|
|
20
21
|
|
|
@@ -117,9 +118,20 @@ export type EndpointMapping1<A extends MutableEndpoint, K> = {
|
|
|
117
118
|
commands?: SBCommandMapping<A['behaviors'], K>;
|
|
118
119
|
};
|
|
119
120
|
//@ts-ignore
|
|
120
|
-
|
|
121
|
+
|
|
122
|
+
type SupportedFamily = Family.Insteon | Family.ZWave | Family.ZigBee;
|
|
123
|
+
export type FamilyToClusterMap<T extends SupportedFamily> = { Family: T } & {
|
|
121
124
|
[Type in Extract<keyof Devices.Insteon, `${string}Node`> as Remove<Type, 'Node'>]?: DeviceToClusterMap<InstanceType<Devices.Insteon[Type]>, MutableEndpoint>;
|
|
122
125
|
};
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
export function add<const F extends SupportedFamily, const T extends ISYNode<F>, const D extends MutableEndpoint> (familyToClusterMap: FamilyToClusterMap<F>, deviceClass: Constructor<T>, mapping: DeviceToClusterMap<T, D> )
|
|
129
|
+
{
|
|
130
|
+
const map = {};
|
|
131
|
+
map[deviceClass.name] = mapping;
|
|
132
|
+
|
|
133
|
+
return {...map,...familyToClusterMap};
|
|
134
|
+
}
|
|
123
135
|
export type SBAttributeMapping<SB extends SupportedBehaviors, D> = {
|
|
124
136
|
[K in keyof SB]: Partial<Record<any, DriversOf<D> | { driver: DriversOf<D>; converter?: string }>>;
|
|
125
137
|
};
|
|
@@ -149,7 +161,7 @@ export class MappingRegistry {
|
|
|
149
161
|
|
|
150
162
|
// #region Public Static Methods (3)
|
|
151
163
|
|
|
152
|
-
public static getMapping<T extends ISYNode
|
|
164
|
+
public static getMapping<const T extends ISYNode>(device: T): DeviceToClusterMap<T, MutableEndpoint> {
|
|
153
165
|
let m = this.cache[device.address];
|
|
154
166
|
if (!m) {
|
|
155
167
|
if (MappingRegistry.map.has(device.family)) {
|
|
@@ -180,7 +192,7 @@ export class MappingRegistry {
|
|
|
180
192
|
return m;
|
|
181
193
|
}
|
|
182
194
|
|
|
183
|
-
public static getMappingForBehavior<T extends ISYNode<any, any, any, any>, B extends ClusterBehavior>(device: T, behavior: B): BehaviorMapping<B, T> {
|
|
195
|
+
public static getMappingForBehavior<T extends ISYNode<any, any, any, any>, const B extends ClusterBehavior>(device: T, behavior: B): BehaviorMapping<B, T> {
|
|
184
196
|
//var m = MappingRegistry.getMapping(device);
|
|
185
197
|
|
|
186
198
|
//return m[behavior.cluster.name];
|
|
@@ -189,7 +201,7 @@ export class MappingRegistry {
|
|
|
189
201
|
}
|
|
190
202
|
}
|
|
191
203
|
//@ts-ignore
|
|
192
|
-
public static register(map: Partial<FamilyToClusterMap<
|
|
204
|
+
public static register<const T extends Family.Insteon | Family.ZWave | Family.ZigBee>(map: Partial<FamilyToClusterMap<T>> | { [x in PathsWithLimit<typeof Devices,1>]: DeviceToClusterMap<any, any> }) {
|
|
193
205
|
if ('Family' in map) {
|
|
194
206
|
let regMap: Map<string, DeviceToClusterMap<any, any>>;
|
|
195
207
|
if (!MappingRegistry.map.has(map.Family)) {
|
|
@@ -136,6 +136,8 @@ function buildNodeClassDefinitions<T extends Family>(nodeDefs: NodeDef[], family
|
|
|
136
136
|
return map;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
export type NCD = NodeClassDefinition<Family>;
|
|
140
|
+
|
|
139
141
|
export class NodeClassDefinition<T extends Family> {
|
|
140
142
|
// #region Properties (11)
|
|
141
143
|
|
|
@@ -370,15 +372,17 @@ export class NodeClassDefinition<T extends Family> {
|
|
|
370
372
|
}
|
|
371
373
|
|
|
372
374
|
export type DataTypeDefinition =
|
|
373
|
-
|
|
375
|
+
{
|
|
374
376
|
uom: UnitOfMeasure;
|
|
375
377
|
serverUom?: UnitOfMeasure;
|
|
376
378
|
enum: false;
|
|
379
|
+
indexId?: string;
|
|
377
380
|
min: number;
|
|
378
381
|
max: number;
|
|
379
382
|
step?: number;
|
|
380
383
|
precision?: number;
|
|
381
|
-
|
|
384
|
+
returnType?: string;
|
|
385
|
+
}
|
|
382
386
|
| {
|
|
383
387
|
uom: UnitOfMeasure;
|
|
384
388
|
enum: true;
|
|
@@ -386,15 +390,15 @@ export type DataTypeDefinition =
|
|
|
386
390
|
values: {
|
|
387
391
|
[x: number]: string;
|
|
388
392
|
};
|
|
393
|
+
returnType?: string;
|
|
389
394
|
};
|
|
390
395
|
|
|
391
396
|
export abstract class NodeMemberDefinition<TId extends string> {
|
|
392
397
|
// #region Properties (7)
|
|
393
398
|
|
|
394
399
|
public classDef: NodeClassDefinition<any>;
|
|
395
|
-
public dataType:
|
|
396
|
-
|
|
397
|
-
};
|
|
400
|
+
public dataType: DataTypeDefinition[];
|
|
401
|
+
|
|
398
402
|
public editorId: string;
|
|
399
403
|
public hidden: boolean;
|
|
400
404
|
public id: TId;
|
|
@@ -409,7 +413,7 @@ export abstract class NodeMemberDefinition<TId extends string> {
|
|
|
409
413
|
this.classDef = classDef;
|
|
410
414
|
if (def) {
|
|
411
415
|
this.editorId = def.editor;
|
|
412
|
-
this.dataType =
|
|
416
|
+
this.dataType = [];
|
|
413
417
|
|
|
414
418
|
var r = this.parseEditorId(def.editor);
|
|
415
419
|
if (r) this.applyEditorDef({ id: def.editor, range: r });
|
|
@@ -430,12 +434,13 @@ export abstract class NodeMemberDefinition<TId extends string> {
|
|
|
430
434
|
|
|
431
435
|
public applyEditorDef(e: EditorDef) {
|
|
432
436
|
if (e.id === this.editorId) {
|
|
433
|
-
var d =
|
|
437
|
+
var d = [];
|
|
434
438
|
for (const rangeDef of toArray(e.range)) {
|
|
439
|
+
let dt = {} as DataTypeDefinition;
|
|
435
440
|
if ('subset' in rangeDef) {
|
|
436
|
-
|
|
441
|
+
dt = { uom: rangeDef.uom, indexId: rangeDef.nls, ...this.#parseSubset(e) };
|
|
437
442
|
} else {
|
|
438
|
-
|
|
443
|
+
dt = {
|
|
439
444
|
uom: rangeDef.uom,
|
|
440
445
|
enum: false,
|
|
441
446
|
min: rangeDef.min,
|
|
@@ -448,8 +453,9 @@ export abstract class NodeMemberDefinition<TId extends string> {
|
|
|
448
453
|
}
|
|
449
454
|
if(rangeDef.uom === UnitOfMeasure.Index)
|
|
450
455
|
{
|
|
451
|
-
|
|
456
|
+
dt.enum = true;
|
|
452
457
|
}
|
|
458
|
+
d.push(dt);
|
|
453
459
|
|
|
454
460
|
}
|
|
455
461
|
this.dataType = d;
|