UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

69 lines (57 loc) 2.26 kB
import 'winston'; import { Converter } from '../../Converters.js'; import type { Command } from '../../Definitions/Global/Commands.js'; import { Driver, StandardDrivers } from '../../Definitions/Global/Drivers.js'; import { Family, Insteon } from '../../Definitions/Global/Families.js'; import { UnitOfMeasure as UOM, UnitOfMeasure } from '../../Definitions/Global/UOM.js'; import { ISY } from '../../ISY.js'; import { ISYNode } from '../../ISYNode.js'; import { NodeInfo } from '../../Model/NodeInfo.js'; import { byteToDegree, byteToPct, pctToByte, type StringKeys } from '../../Utils.js'; import { ISYDeviceNode } from '../ISYDeviceNode.js'; import type { Merge } from '@matter/general'; import type { DriverState } from '../../Model/DriverState.js'; // import { InsteonNLS } from './insteonfam.js' export class InsteonDeviceNode<D extends ISYNode.DriverSignatures = {}, C extends ISYNode.CommandSignatures = {}> extends ISYDeviceNode<Family.Insteon, D, C> { // #region Constructors (1) override readonly manufacturer: string = 'Insteon Technologies, Inc.'; static override family: Family.Insteon = Family.Insteon; constructor(isy: ISY, deviceNode: NodeInfo) { super(isy, deviceNode); this.family = Family.Insteon; //// this.productName = InsteonNLS.getDeviceDescription(String.fromCharCode(category,device,version)); //his.childDevices = {}; } // #endregion Constructors (1) // #region Public Methods (3) public override convertFrom(value: any, uom: UnitOfMeasure, driver: keyof D = null): any { switch (uom) { case UOM.DegreeX2: return byteToDegree(value); case UOM.LevelFrom0To255: return Converter.Standard.LevelFrom0To255.Percent.to(value); case UOM.Fahrenheit: return value / 10; default: return super.convertFrom(value, uom); } } public override convertTo(value: any, uom: UnitOfMeasure, propertyName: keyof D = null): any { const nuom = super.convertTo(value, uom); switch (uom) { case UOM.DegreeX2: return nuom * 2; case UOM.LevelFrom0To255: return pctToByte(nuom); case UOM.Fahrenheit: return Math.round(value * 10); default: return nuom; } } // #endregion Public Methods (3) } export namespace Base { export const Class = InsteonDeviceNode; }