isy-nodejs 1.0.2-alpha.6 → 1.0.3-alpha.2
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 +64 -34
- 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 +65 -25
- 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,16 @@ 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
|
+
|
|
184
|
+
this.webSocketOptions.socketPath = this.socketPath;
|
|
185
|
+
} else {
|
|
186
|
+
this.webSocketOptions.auth = `${this.credentials.username}:${this.credentials.password}`;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
|
|
177
190
|
//this.elkEnabled = config.elkEnabled ?? false;
|
|
178
191
|
|
|
179
192
|
this.nodesLoaded = false;
|
|
@@ -355,30 +368,47 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
355
368
|
try {
|
|
356
369
|
await this.loadConfig();
|
|
357
370
|
await this.loadNodes();
|
|
371
|
+
await this.refreshStatuses();
|
|
358
372
|
await this.loadVariables(VariableType.Integer);
|
|
359
373
|
await this.loadVariables(VariableType.State);
|
|
360
|
-
await this.refreshStatuses();
|
|
361
374
|
await this.#finishInitialize(true);
|
|
362
375
|
return true;
|
|
363
376
|
} catch (e) {
|
|
364
377
|
if (e instanceof ISYInitializationError) {
|
|
378
|
+
if(e.step === 'variables')
|
|
379
|
+
{
|
|
380
|
+
this.logger.warn(`Error loading variables: ${e.message}`);
|
|
381
|
+
await this.#finishInitialize(true);
|
|
382
|
+
return true;
|
|
383
|
+
}
|
|
365
384
|
this.logger.error(`Error initializing ISY during (${e.step}): ${e.message}`);
|
|
385
|
+
return false;
|
|
366
386
|
} else {
|
|
367
387
|
this.logger.error(`Error initializing ISY: ${e.message}`);
|
|
388
|
+
return false;
|
|
368
389
|
}
|
|
369
390
|
throw e;
|
|
370
391
|
} finally {
|
|
371
392
|
if (this.nodesLoaded !== true) {
|
|
372
|
-
that.#finishInitialize(false);
|
|
393
|
+
await that.#finishInitialize(false);
|
|
373
394
|
}
|
|
374
395
|
}
|
|
375
396
|
}
|
|
376
397
|
|
|
398
|
+
webSocketOptions: WebSocket.ClientOptions & ClientRequestArgs;
|
|
399
|
+
|
|
377
400
|
public async initializeWebSocket() {
|
|
378
401
|
try {
|
|
379
402
|
const that = this;
|
|
380
|
-
|
|
381
|
-
|
|
403
|
+
|
|
404
|
+
//const auth = `Basic ${Buffer.from(`${this.credentials.username}:${this.credentials.password}`).toString('base64')}`;
|
|
405
|
+
let address = `${this.wsprotocol}://${this.address}/rest/subscribe`
|
|
406
|
+
if(this.socketPath)
|
|
407
|
+
{
|
|
408
|
+
address = `ws+unix://${this.socketPath}/rest/subscribe`;
|
|
409
|
+
}
|
|
410
|
+
this.logger.info(`Opening webSocket: ${address}`);
|
|
411
|
+
this.logger.info('Using the following websocket options: ' + JSON.stringify(this.webSocketOptions));
|
|
382
412
|
if (this.webSocket) {
|
|
383
413
|
try {
|
|
384
414
|
this.webSocket.close();
|
|
@@ -386,27 +416,33 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
386
416
|
this.logger.warn(`Error closing existing websocket: ${e.message}`);
|
|
387
417
|
}
|
|
388
418
|
}
|
|
389
|
-
|
|
390
|
-
headers: {
|
|
419
|
+
|
|
420
|
+
/*headers: {
|
|
391
421
|
Origin: 'com.universal-devices.websockets.isy',
|
|
392
|
-
|
|
422
|
+
auth
|
|
393
423
|
},
|
|
394
|
-
ping: 10
|
|
395
|
-
});
|
|
396
424
|
|
|
397
|
-
|
|
425
|
+
ping: 10*/
|
|
426
|
+
let p = new Promise<void>((resolve, reject) => {
|
|
398
427
|
|
|
399
|
-
this.webSocket
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
428
|
+
this.webSocket = new WebSocket(`${address}`, ['ISYSUB'], this.webSocketOptions);
|
|
429
|
+
this.lastActivity = new Date();
|
|
430
|
+
//this.webSocket.onmessage = (event) => {this.handleWebSocketMessage()
|
|
431
|
+
this.webSocket.on('open',() => {
|
|
432
|
+
this.logger.info('Websocket connection open');
|
|
433
|
+
resolve();
|
|
434
|
+
})
|
|
435
|
+
.on('message',(data,b)=> {
|
|
436
|
+
that.logger.silly(`Received message: ${Utils.logStringify(data, 1)}`);
|
|
437
|
+
that.handleWebSocketMessage({data: data});
|
|
403
438
|
})
|
|
404
439
|
.on('error', (err: any, response: any) => {
|
|
405
|
-
that.logger.warn(`Websocket subscription error: ${
|
|
440
|
+
that.logger.warn(`Websocket subscription error: ${err}`);
|
|
441
|
+
return reject(new ISYInitializationError('Websocket subscription error', 'websocket'));
|
|
406
442
|
})
|
|
407
443
|
.on('fail', (data: string, response: any) => {
|
|
408
444
|
that.logger.warn(`Websocket subscription failure: ${data}`);
|
|
409
|
-
|
|
445
|
+
return reject(new Error('Websocket subscription failure'));
|
|
410
446
|
})
|
|
411
447
|
.on('abort', () => {
|
|
412
448
|
that.logger.warn('Websocket subscription aborted.');
|
|
@@ -414,8 +450,11 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
414
450
|
})
|
|
415
451
|
.on('timeout', (ms: string) => {
|
|
416
452
|
that.logger.warn(`Websocket subscription timed out after ${ms} milliseconds.`);
|
|
417
|
-
|
|
453
|
+
return reject(new Error('Timeout contacting ISY'));
|
|
454
|
+
//throw new Error('Timeout contacting ISY');
|
|
418
455
|
});
|
|
456
|
+
});
|
|
457
|
+
return p;
|
|
419
458
|
} catch (e) {
|
|
420
459
|
throw new ISYInitializationError(e, 'websocket');
|
|
421
460
|
}
|
|
@@ -646,7 +685,7 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
646
685
|
}
|
|
647
686
|
}
|
|
648
687
|
|
|
649
|
-
#finishInitialize(success: boolean) {
|
|
688
|
+
async #finishInitialize(success: boolean) {
|
|
650
689
|
if (!this.nodesLoaded) {
|
|
651
690
|
this.nodesLoaded = true;
|
|
652
691
|
//initializeCompleted();
|
|
@@ -656,10 +695,11 @@ export class ISY extends EventEmitter implements Disposable {
|
|
|
656
695
|
// }
|
|
657
696
|
if (this.enableWebSocket) {
|
|
658
697
|
this.guardianTimer = setInterval(this.#guardian.bind(this), 60000);
|
|
659
|
-
this.initializeWebSocket();
|
|
698
|
+
return this.initializeWebSocket();
|
|
660
699
|
}
|
|
661
700
|
}
|
|
662
701
|
}
|
|
702
|
+
|
|
663
703
|
}
|
|
664
704
|
|
|
665
705
|
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)) {
|