UNPKG

@pmouli/isy-matter-server

Version:

Service to expose an ISY device as a Matter Border router

234 lines (225 loc) 5.91 kB
import { Type } from 'ts-morph'; import type { GetTagMetadata, Integer, IntRange, JsonPrimitive, MultidimensionalArray, Tagged } from 'type-fest'; import type { Numeric } from 'type-fest/source/numeric.js'; import { tag } from 'type-fest/source/tagged.js'; import type { NumberLiteralType } from 'typescript'; import type { types } from 'util'; export enum UnitOfMeasure { Unknown = 0, Ampere = 1, Boolean = 2, BtuPerHour = 3, Celsius = 4, Centimeter = 5, CubicFeet = 6, CubicFeetPerMinute = 7, CubicMeter = 8, Day = 9, Days = 10, DeadboltStatus = 11, Decibel = 12, DecibelA = 13, Degree = 14, DoorLockAlarm = 15, EuropeanMacroseismic = 16, Fahrenheit = 17, Feet = 18, Hour = 19, Hours = 20, AbsoluteHumidity = 21, RelativeHumidity = 22, InchesOfMercury = 23, InchesPerHour = 24, Index = 25, Kelvin = 26, Keyword = 27, Kilogram = 28, Kilovolt = 29, Kilowatt = 30, Kilopascal = 31, KilometersPerHour = 32, KilowattsPerHour = 33, Liedu = 34, Liter = 35, Lux = 36, Mercalli = 37, Meter = 38, CubicMetersPerHour = 39, MPS = 40, Milliamp = 41, Millisecond = 42, Millivolt = 43, Minute = 44, DurationInMinutes = 45, MillimetersPerHour = 46, Month = 47, MilesPerHour = 48, MetersPerSecond = 49, Ohm = 50, Percent = 51, Pound = 52, PowerFactor = 53, PartsPerMillion = 54, PulseCount = 55, RawValue = 56, Second = 57, DurationInSeconds = 58, SiemensPerMeter = 59, BodyWaveMagnitudeScale = 60, RichterScale = 61, MomentMagnitudeScale = 62, SurfaceWaveMagnitudeScale = 63, Shindo = 64, SML = 65, ThermostatHeatCoolState = 66, ThermostatMode = 67, ThermostatFanMode = 68, USGallon = 69, UserNumber = 70, UVIndex = 71, Volt = 72, Watt = 73, WattsPerSquareMeter = 74, Weekday = 75, WindDirectionInDegrees = 76, Year = 77, OffOn = 78, OpenClose = 79, ThermostatFanRunState = 80, ThermostatFanModeOverride = 81, Millimeter = 82, Kilometer = 83, SecureMode = 84, OhmMeter = 85, KiloOhm = 86, CubicMeterPerCubicMeter = 87, WaterActivity = 88, RotationsPerMinute = 89, Hertz = 90, AnglePositionDegreesNorthPole = 91, AnglePositionDegreesSouthPole = 92, PowerManagementAlarm = 93, ApplianceAlarm = 94, HomeHealthAlarm = 95, VOCLevel = 96, BarrierStatus = 97, InsteonThermostatMode = 98, InsteonThermostatFanMode = 99, LevelFrom0To255 = 100, DegreeX2 = 101, KilowattSecond = 102, Dollar = 103, Cent = 104, Inch = 105, MillimetersPerDay = 106, Raw1ByteUnsignedValue = 107, Raw2ByteUnsignedValue = 108, Raw3ByteUnsignedValue = 109, Raw4ByteUnsignedValue = 110, Raw1ByteSignedValue = 111, Raw2ByteSignedValue = 112, Raw3ByteSignedValue = 113, Raw4ByteSignedValue = 114, MostRecentOnStyleActionTakenForLampControl = 115, Mile = 116, Millibar = 117, Hectopascal = 118, WattHour = 119, InchesPerDay = 120, MolePerCubicMeter = 121, MicrogramPerCubicMeter = 122, BecquerelPerCubicMeter = 123, PicocuriesPerLiter = 124, Acidity = 125, BeatsPerMinute = 126, MillimetersOfMercury = 127, Joule = 128, BodyMassIndex = 129, LitersPerHour = 130, DecibelMilliwatts = 131, BreathsPerMinute = 132, Kilohertz = 133, MetersPerSquaredSeconds = 134, ApparentPower = 135, ReactivePower = 136, NTPDateTime = 137, PoundPerSquareInch = 138, Degrees0To360 = 139, MilligramPerLiter = 140, Newton = 141, USGallonsPerSecond = 142, USGallonsPerMinute = 143, USGallonsPerHour = 144, Text = 145, NotificationID = 146, XML = 147, NotificationIDFull = 148, DegreeOfHue0To360 = 149, URLForStreaming = 150, UnixTimestamp = 151, MiredColorTemp = 152, ColorXY = 153, StepsPerSecond = 154 } export function toString(this: UnitOfMeasure): keyof typeof UnitOfMeasure { return UnitOfMeasure[this] as keyof typeof UnitOfMeasure; } //import { Converters } from "../../Converters.js"; export namespace UnitOfMeasure { export type ToType<X extends UnitOfMeasure> = X extends keyof typeof UnitOfMeasure ? TypeMap[UnitOfMeasure[X]] : number; type Test = ToType<51>; export type Standard = keyof typeof UnitOfMeasure; export type Matter = 'LightingLevel' | 'RampRate'; export namespace Types { export type Percent = IntRange<0, 100>; export type Boolean = boolean; export type Degree = IntRange<0, 360>; export type DegreeX2 = IntRange<0, 720>; export type LevelFrom0To255 = Tagged<IntRange<0, 255>, UnitOfMeasure.LevelFrom0To255>; export type Text = string; export type URLForStreaming = string; export type UnixTimestamp = number; export type NTPDateTime = Date; export type Raw1ByteUnsignedValue = IntRange<0, 255>; export type Celsius = number; export type Fahrenheit = number; export type Unknown = unknown; } type TypeMap = { [UnitOfMeasure.Percent]: Types.Percent; [UnitOfMeasure.Boolean]: Types.Boolean; [UnitOfMeasure.Degree]: Types.Degree; [UnitOfMeasure.DegreeX2]: Types.DegreeX2; [UnitOfMeasure.LevelFrom0To255]: Types.LevelFrom0To255; [UnitOfMeasure.Text]: Types.Text; [UnitOfMeasure.URLForStreaming]: Types.URLForStreaming; [UnitOfMeasure.UnixTimestamp]: Types.UnixTimestamp; [UnitOfMeasure.NTPDateTime]: Types.NTPDateTime; [UnitOfMeasure.Raw1ByteUnsignedValue]: Types.Raw1ByteUnsignedValue; [UnitOfMeasure.Celsius]: Types.Celsius; [UnitOfMeasure.Fahrenheit]: Types.Fahrenheit; [UnitOfMeasure.Unknown]: unknown; }; /*export function convertTo<X extends UnitOfMeasure, Y extends UnitOfMeasure>( this: X, targetUOM: Y, value: ToType<Y> ): ToType<X> { const converter = Converters.Standard[this.toString()]?.[targetUOM]; if (converter) { return converter.to(value); } return value as unknown as ToType<X>; } export function convertFrom<X extends UnitOfMeasure, Y extends UnitOfMeasure>( this: X, sourceUOM: Y, value: ToType<Y> ): ToType<X> { const converter = Converters.Standard[this.toString()]?.[sourceUOM]; if (converter) { return converter.from(value); } return value as unknown as ToType<X>; }*/ }