UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

99 lines (88 loc) 2.45 kB
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; } }