@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
99 lines (88 loc) • 2.45 kB
text/typescript
import { DoorLock, FanControl } from '@matter/main/clusters';
import {Converter} from 'isy-nodejs';
import { Insteon } from 'isy-nodejs/ISY';
const MatterC = {
LevelFrom0To255: {
LightingLevel: {
from: (value: number) =>
value === 1 ? 0
: value === 254 ? 255
: value,
to: (value: number) =>
value === 0 ? 1
: value === 255 ? 254
: value
}
},
Percent: {
LightingLevel: {
from: (value: number) =>
value === 1 ? 0
: value === 254 ? 100
: Math.round((value / 254) * 100),
to: (value: number) =>
value === 0 ? 1
: value === 100 ? 254
: Math.round((value / 100) * 254)
}
},
InsteonLock: {
LockState: {
from: (value: DoorLock.LockState) => (value == DoorLock.LockState.Locked ? Insteon.Lock.Locked : Insteon.Lock.Unlocked),
to: (value: Insteon.Lock) => (value == Insteon.Lock.Locked ? DoorLock.LockState.Locked : DoorLock.LockState.Unlocked)
}
},
Boolean: {
LightingLevel: {
from: (value: number) => value > 0,
to: (value: boolean) => (value ? 254 : 0)
}
},
RampRate: {
Deciseconds: {
from: (value: number) => Insteon.RampRate.from.seconds(value / 10),
to: (value: Insteon.RampRate) => Insteon.RampRate.to.seconds(value) * 10
},
Seconds: {
from: (value: number) => Insteon.RampRate.from.seconds(value),
to: (value: Insteon.RampRate) => Insteon.RampRate.to.seconds(value)
}
},
FanLevel: {
FanMode: {
from: (value: FanControl.FanMode) => {
switch (value) {
case FanControl.FanMode.Low:
return Insteon.FanLevel.Low;
case FanControl.FanMode.Medium:
return Insteon.FanLevel.Medium;
case FanControl.FanMode.High:
return Insteon.FanLevel.High;
case FanControl.FanMode.Off:
return Insteon.FanLevel.Off;
default:
throw new Error('Invalid Fan Mode: ' + FanControl.FanMode[value]);
}
},
to: (value: Insteon.FanLevel) => {
switch (value) {
case Insteon.FanLevel.Low:
return FanControl.FanMode.Low;
case Insteon.FanLevel.Medium:
return FanControl.FanMode.Medium;
case Insteon.FanLevel.High:
return FanControl.FanMode.High;
case Insteon.FanLevel.Off:
return FanControl.FanMode.Off;
}
}
}
}
};
Converter.Matter1 = MatterC;
declare module 'isy-nodejs/Converters' {
namespace Converter
{
export let Matter1: typeof MatterC;
}
}