@zwave-js/cc 15.27.0 → 15.28.0
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/build/cjs/cc/AssociationGroupInfoCC.js +1 -0
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BatteryCC.js +2 -1
- package/build/cjs/cc/BatteryCC.js.map +2 -2
- package/build/cjs/cc/BinarySensorCC.js +5 -1
- package/build/cjs/cc/BinarySensorCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.js +15 -4
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC.js +1 -1
- package/build/cjs/cc/DoorLockCC.js.map +1 -1
- package/build/cjs/cc/IndicatorCC.js +4 -3
- package/build/cjs/cc/IndicatorCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.d.ts +1 -0
- package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.js +13 -0
- package/build/cjs/cc/ManufacturerSpecificCC._validateArgs.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.d.ts +6 -4
- package/build/cjs/cc/ManufacturerSpecificCC.js +41 -7
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
- package/build/cjs/cc/MeterCC.js +10 -8
- package/build/cjs/cc/MeterCC.js.map +2 -2
- package/build/cjs/cc/ProtectionCC.js +2 -0
- package/build/cjs/cc/ProtectionCC.js.map +2 -2
- package/build/cjs/cc/SecurityCC.d.ts +1 -1
- package/build/cjs/cc/SecurityCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.js +2 -0
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/UserCredentialCC.js +4 -0
- package/build/cjs/cc/UserCredentialCC.js.map +2 -2
- package/build/cjs/cc/_CCValues.generated.d.ts +2 -2
- package/build/cjs/cc/_CCValues.generated.js +1 -1
- package/build/cjs/cc/_CCValues.generated.js.map +1 -1
- package/build/cjs/lib/CommandClass.d.ts +3 -1
- package/build/cjs/lib/CommandClass.js +11 -4
- package/build/cjs/lib/CommandClass.js.map +2 -2
- package/build/cjs/lib/_Types.d.ts +4 -0
- package/build/cjs/lib/_Types.js +7 -0
- package/build/cjs/lib/_Types.js.map +3 -3
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +1 -0
- package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +5 -2
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySensorCC.js +8 -2
- package/build/esm/cc/BinarySensorCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +17 -4
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC.js +1 -1
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +8 -4
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.d.ts +1 -0
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.js +10 -0
- package/build/esm/cc/ManufacturerSpecificCC._validateArgs.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts +6 -4
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +54 -14
- package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/esm/cc/MeterCC.d.ts.map +1 -1
- package/build/esm/cc/MeterCC.js +13 -9
- package/build/esm/cc/MeterCC.js.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +3 -0
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts +1 -1
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +3 -0
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/UserCredentialCC.d.ts.map +1 -1
- package/build/esm/cc/UserCredentialCC.js +7 -1
- package/build/esm/cc/UserCredentialCC.js.map +1 -1
- package/build/esm/cc/_CCValues.generated.d.ts +2 -2
- package/build/esm/cc/_CCValues.generated.js +1 -1
- package/build/esm/lib/CommandClass.d.ts +3 -1
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js +11 -4
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/_Types.d.ts +4 -0
- package/build/esm/lib/_Types.d.ts.map +1 -1
- package/build/esm/lib/_Types.js +5 -0
- package/build/esm/lib/_Types.js.map +1 -1
- package/package.json +7 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/IndicatorCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./IndicatorCC._validateArgs.js\";\nconst { validateArgs_IndicatorCCAPI_get, validateArgs_IndicatorCCAPI_set, validateArgs_IndicatorCCAPI_sendReport, validateArgs_IndicatorCCAPI_getSupported, validateArgs_IndicatorCCAPI_reportSupported, validateArgs_IndicatorCCAPI_reportDescription, validateArgs_IndicatorCCAPI_setTimeout, validateArgs_IndicatorCCAPI_getTimeout, validateArgs_IndicatorCCAPI_getDescription } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, Indicator, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type ValueID, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, getIndicatorProperty, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { clamp, roundTo } from \"alcalzone-shared/math\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IndicatorCommand, type IndicatorTimeout } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nfunction isManufacturerDefinedIndicator(indicatorId: number): boolean {\n return indicatorId >= 0x80 && indicatorId <= 0x9f;\n}\nconst timeoutStringRegex = /^(?:(?<hoursStr>\\d+)h)?(?:(?<minutesStr>\\d+)m)?(?:(?<secondsStr>\\d+(?:\\.\\d+)?)s)?$/i;\nconst MAX_INDICATOR_OBJECTS = 31;\nfunction parseIndicatorTimeoutString(text: string): IndicatorTimeout | undefined {\n if (!text.length)\n return undefined;\n // Try to parse the numeric parts from a timeout\n const match = timeoutStringRegex.exec(text);\n if (!match)\n return undefined;\n const { hoursStr, minutesStr, secondsStr } = match.groups!;\n if (!hoursStr && !minutesStr && !secondsStr)\n return undefined;\n const ret: IndicatorTimeout = {};\n if (hoursStr) {\n ret.hours = clamp(parseInt(hoursStr, 10), 0, 255);\n }\n if (minutesStr) {\n ret.minutes = clamp(parseInt(minutesStr, 10), 0, 255);\n }\n if (secondsStr) {\n ret.seconds = clamp(roundTo(parseFloat(secondsStr), 2), 0, 59.99);\n }\n return ret;\n}\nfunction groupByIndicatorId(values: IndicatorObject[]): Map<number, IndicatorObject[]> {\n const ret = new Map();\n for (const value of values) {\n if (!ret.has(value.indicatorId)) {\n ret.set(value.indicatorId, []);\n }\n ret.get(value.indicatorId)!.push(value);\n }\n return ret;\n}\nfunction indicatorObjectsToTimeout(values: IndicatorObject[]): IndicatorTimeout | undefined {\n const timeoutValues = values.filter((v) => [0x0a, 0x06, 0x07, 0x08].includes(v.propertyId));\n if (!timeoutValues.length)\n return undefined;\n const hours = (timeoutValues.find((v) => v.propertyId === 0x0a)?.value\n ?? 0) as number;\n const minutes = (timeoutValues.find((v) => v.propertyId === 0x06)?.value\n ?? 0) as number;\n const seconds = clamp((timeoutValues.find((v) => v.propertyId === 0x07)\n ?.value as number) ?? 0, 0, 59)\n + clamp((timeoutValues.find((v) => v.propertyId === 0x08)\n ?.value as number) ?? 0, 0, 99)\n / 100;\n return {\n hours,\n minutes,\n seconds,\n };\n}\nimport { IndicatorCCValues } from \"./_CCValues.generated.js\";\nexport { IndicatorCCValues };\n/**\n * Looks up the configured metadata for the given indicator and property\n */\nfunction getIndicatorMetadata(indicatorId: Indicator, propertyId: number, overrideIndicatorLabel?: string): ValueMetadata {\n const label = getIndicatorLabel(indicatorId, propertyId, overrideIndicatorLabel);\n const prop = getIndicatorProperty(propertyId);\n const baseMetadata = IndicatorCCValues.valueV2(indicatorId, propertyId).meta;\n if (!prop) {\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n };\n }\n else {\n if (prop.type === \"boolean\") {\n return {\n ...baseMetadata,\n ...ValueMetadata.Boolean,\n label,\n description: prop.description,\n readable: !prop.readonly,\n };\n }\n else {\n // UInt8\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n description: prop.description,\n min: prop.min,\n max: prop.max,\n readable: !prop.readonly,\n };\n }\n }\n}\nfunction getIndicatorName(indicatorId: number | undefined): string {\n if (indicatorId) {\n return getEnumMemberName(Indicator, indicatorId);\n }\n else {\n return \"Default\";\n }\n}\n/** Returns a user-friendly label for an indicator */\nfunction getIndicatorLabel(indicatorId: number, propertyId: number, overrideIndicatorLabel?: string, overridePropertyLabel?: string): string {\n const defaultName = overrideIndicatorLabel || getIndicatorName(indicatorId);\n // Without a defined property, we cannot suggest a better label\n const prop = getIndicatorProperty(propertyId);\n if (!prop)\n return defaultName;\n // For indicators that correspond to an LCD or buttons,\n // the indicator enum names are enough\n if (indicatorId >= Indicator[\"LCD backlight\"]\n && indicatorId <= Indicator[\"Button 12 indication\"]\n && (propertyId === 0x01 /* Multilevel */\n || propertyId === 0x02 /* Binary */\n || overridePropertyLabel) // custom property label\n ) {\n let ret: string = (Indicator as any)[indicatorId];\n // Append the overridden property label if it exists\n if (overridePropertyLabel) {\n ret += ` - ${overridePropertyLabel}`;\n }\n return ret;\n }\n // Default to the current behavior of <indicator name> - <property label>\n return `${defaultName} - ${overridePropertyLabel || prop.label}`;\n}\nexport function shouldExposeIndicatorValue(indicatorId: number, propertyId: number): boolean {\n // Many possible indicator values are not suitable to be exposed as CC values,\n // usually because they need to be set in groups.\n // Indicator properties that should be exposed are marked as such\n const prop = getIndicatorProperty(propertyId);\n if (prop && !prop.exposeAsValue) {\n return false;\n }\n // Unless we know better, expose anyways\n return true;\n}\n@API(CommandClasses.Indicator)\nexport class IndicatorCCAPI extends CCAPI {\n public supportsCommand(cmd: IndicatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case IndicatorCommand.Get:\n case IndicatorCommand.Report:\n return this.isSinglecast();\n case IndicatorCommand.Set:\n return true; // This is mandatory\n case IndicatorCommand.SupportedGet:\n case IndicatorCommand.SupportedReport:\n return this.version >= 2 && this.isSinglecast();\n case IndicatorCommand.DescriptionGet:\n case IndicatorCommand.DescriptionReport:\n return this.version >= 4 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: IndicatorCCAPI, { property, propertyKey }, value) {\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey,\n };\n if (property === \"value\") {\n // V1 value\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (IndicatorCCValues.valueV2.is(valueId)) {\n const indicatorId = property as number;\n const propertyId = propertyKey as number;\n const expectedType = getIndicatorMetadata(indicatorId, propertyId).type as \"number\" | \"boolean\";\n // V2+ value\n if (typeof value !== expectedType) {\n throwWrongValueType(this.ccId, property, expectedType, typeof value);\n }\n return this.set([\n {\n indicatorId,\n propertyId,\n value: value as any,\n },\n ]);\n }\n else if (IndicatorCCValues.timeout.is(valueId)) {\n const indicatorId = property as number;\n if (typeof value !== \"string\") {\n throwWrongValueType(this.ccId, property, \"string\", typeof value);\n }\n return this.setTimeout(indicatorId, value);\n }\n else if (IndicatorCCValues.identify.is(valueId)) {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n return this.identify();\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: IndicatorCCAPI, { property }) {\n if (property === \"value\")\n return this.get();\n if (typeof property === \"number\") {\n return this.get(property);\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n @validateArgs_IndicatorCCAPI_get()\n public async get(indicatorId?: number): Promise<MaybeNotKnown<number | IndicatorObject[]>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Get);\n const cc = new IndicatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n if (response.values)\n return response.values;\n return response.indicator0Value!;\n }\n @validateArgs_IndicatorCCAPI_set()\n public async set(value: number | IndicatorObject[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Set);\n if (this.version === 1 && typeof value !== \"number\") {\n throw new ZWaveError(`Node ${this.endpoint\n .nodeId as number} only supports IndicatorCC V1 which requires a single value to be set`, ZWaveErrorCodes.Argument_Invalid);\n }\n else if (this.version >= 2\n && isArray(value)\n && value.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n const cc = new IndicatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...(typeof value === \"number\" ? { value } : { values: value }),\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_sendReport()\n public async sendReport(options: IndicatorCCReportOptions): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Report);\n const cc = new IndicatorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_getSupported()\n public async getSupported(indicatorId: number): Promise<{\n indicatorId?: number;\n supportedProperties: readonly number[];\n nextIndicatorId: number;\n } | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedGet);\n const cc = new IndicatorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return {\n // Include the actual indicator ID if 0x00 was requested\n ...(indicatorId === 0x00\n ? { indicatorId: response.indicatorId }\n : undefined),\n supportedProperties: response.supportedProperties,\n nextIndicatorId: response.nextIndicatorId,\n };\n }\n }\n @validateArgs_IndicatorCCAPI_reportSupported()\n public async reportSupported(indicatorId: number, supportedProperties: readonly number[], nextIndicatorId: number): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedReport);\n const cc = new IndicatorCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n supportedProperties,\n nextIndicatorId,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_reportDescription()\n public async reportDescription(indicatorId: number, description: string): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionReport);\n const cc = new IndicatorCCDescriptionReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n description,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Instructs the node to identify itself. Available starting with V3 of this CC.\n */\n public async identify(): Promise<SupervisionResult | undefined> {\n if (this.version < 3) {\n throw new ZWaveError(`The identify command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n return this.set([\n {\n indicatorId: 0x50,\n propertyId: 0x03,\n value: 0x08,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x04,\n value: 0x03,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x05,\n value: 0x06,\n },\n ]);\n }\n /**\n * Set a timeout for a given indicator ID after which the indicator will be turned off.\n * @param timeout The timeout in one of the supported forms:\n * \t- a timeout string in the form `12h18m17.59s`. All parts (hours, minutes, seconds, hundredths) are optional, but must be specified in this order. An empty string will be treated like `undefined`.\n * \t- an object specifying the timeout parts. An empty object will be treated like `undefined`.\n * \t- `undefined` to disable the timeout.\n */\n @validateArgs_IndicatorCCAPI_setTimeout()\n public async setTimeout(indicatorId: number, timeout: IndicatorTimeout | string | undefined): Promise<SupervisionResult | undefined> {\n this.assertPhysicalEndpoint(this.endpoint);\n if (this.version < 3) {\n throw new ZWaveError(`The setTimeout command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n if (typeof timeout === \"string\") {\n if (timeout === \"\") {\n timeout = undefined;\n }\n else {\n const parsed = parseIndicatorTimeoutString(timeout);\n if (!parsed) {\n throw new ZWaveError(`The timeout string \"${timeout}\" is not valid`, ZWaveErrorCodes.Argument_Invalid);\n }\n timeout = parsed;\n }\n }\n const supportedPropertyIDs = IndicatorCC.getSupportedPropertyIDsCached(this.host, this.endpoint, indicatorId);\n const objects: IndicatorObject[] = [];\n if (timeout) {\n const hours = timeout.hours ?? 0;\n const minutes = timeout.minutes ?? 0;\n const seconds = Math.floor(timeout.seconds ?? 0);\n const hundredths = Math.round(((timeout.seconds ?? 0) % 1) * 100);\n if (hours) {\n if (!supportedPropertyIDs?.includes(0x0a)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in hours`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x0a,\n value: hours,\n });\n }\n if (minutes) {\n if (!supportedPropertyIDs?.includes(0x06)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in minutes`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x06,\n value: minutes,\n });\n }\n if (seconds) {\n if (!supportedPropertyIDs?.includes(0x07)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x07,\n value: seconds,\n });\n }\n if (hundredths) {\n if (!supportedPropertyIDs?.includes(0x08)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in 1/100 seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x08,\n value: hundredths,\n });\n }\n }\n if (!objects.length) {\n objects.push(...(supportedPropertyIDs ?? []).map((p) => ({\n indicatorId,\n propertyId: p,\n value: 0,\n })));\n }\n return this.set(objects);\n }\n /**\n * Returns the timeout after which the given indicator will be turned off.\n */\n @validateArgs_IndicatorCCAPI_getTimeout()\n public async getTimeout(indicatorId: number): Promise<MaybeNotKnown<IndicatorTimeout>> {\n const values = await this.get(indicatorId);\n if (!isArray(values))\n return;\n return indicatorObjectsToTimeout(values);\n }\n @validateArgs_IndicatorCCAPI_getDescription()\n public async getDescription(indicatorId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionGet);\n const cc = new IndicatorCCDescriptionGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCDescriptionReport>(cc, this.commandOptions);\n return response?.description;\n }\n}\n@commandClass(CommandClasses.Indicator)\n@implementedVersion(4)\n@ccValues(IndicatorCCValues)\nexport class IndicatorCC extends CommandClass {\n declare ccCommand: IndicatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version > 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"scanning supported indicator IDs...\",\n direction: \"outbound\",\n });\n // Query ID 0 to get the first supported ID\n let curId = 0x00;\n const supportedIndicatorIds: number[] = [];\n do {\n const supportedResponse = await api.getSupported(curId);\n if (!supportedResponse) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Time out while scanning supported indicator IDs, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n if (supportedResponse.supportedProperties.length > 0) {\n supportedIndicatorIds.push(supportedResponse.indicatorId ?? curId);\n }\n curId = supportedResponse.nextIndicatorId;\n } while (curId !== 0x00);\n // The IDs are not stored by the report CCs so store them here once we have all of them\n this.setValue(ctx, IndicatorCCValues.supportedIndicatorIds, supportedIndicatorIds);\n const logMessage = `supported indicator IDs: ${supportedIndicatorIds.join(\", \")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n if (api.version >= 4) {\n const manufacturerDefinedIndicatorIds = supportedIndicatorIds\n .filter((id) => isManufacturerDefinedIndicator(id));\n if (manufacturerDefinedIndicatorIds.length > 0) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving description for manufacturer-defined indicator IDs...\",\n direction: \"outbound\",\n });\n for (const [i, id] of manufacturerDefinedIndicatorIds\n .entries()) {\n await api.getDescription(id);\n node.reportInterviewProgress(i + 1, manufacturerDefinedIndicatorIds.length);\n }\n }\n }\n }\n // Query current values\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n if (api.version === 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current indicator value...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n else {\n const supportedIndicatorIds: number[] = this.getValue(ctx, IndicatorCCValues.supportedIndicatorIds) ?? [];\n for (const [i, indicatorId] of supportedIndicatorIds.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `requesting current indicator value (id = ${num2hex(indicatorId)})...`,\n direction: \"outbound\",\n });\n await api.get(indicatorId);\n options?.onProgress?.(i + 1, supportedIndicatorIds.length);\n }\n }\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"value\") {\n // CC version 1 only has a single value that doesn't need to be translated\n return undefined;\n }\n else if (typeof property === \"number\"\n && typeof propertyKey === \"number\") {\n // The indicator property is our property key\n const prop = getIndicatorProperty(propertyKey);\n if (prop)\n return prop.label;\n }\n else if (typeof property === \"number\"\n && propertyKey === \"timeout\") {\n return \"Timeout\";\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n public translateProperty(ctx: GetValueDB, property: string | number, propertyKey?: string | number): string {\n if (typeof property === \"number\") {\n if (typeof propertyKey === \"number\" || propertyKey === \"timeout\") {\n // The indicator corresponds to our property\n if (property in Indicator)\n return Indicator[property];\n }\n }\n return super.translateProperty(ctx, property, propertyKey);\n }\n protected supportsV2Indicators(ctx: GetValueDB): boolean {\n // First test if there are any indicator ids defined\n const supportedIndicatorIds = this.getValue<number[]>(ctx, IndicatorCCValues.supportedIndicatorIds);\n if (!supportedIndicatorIds?.length)\n return false;\n // Then test if there are any property ids defined\n return supportedIndicatorIds.some((indicatorId) => !!this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId))?.length);\n }\n protected getManufacturerDefinedIndicatorLabel(ctx: GetValueDB, indicatorId: number): string | undefined {\n if (isManufacturerDefinedIndicator(indicatorId)) {\n return this.getValue(ctx, IndicatorCCValues.indicatorDescription(indicatorId));\n }\n }\n public static getSupportedPropertyIDsCached(ctx: GetValueDB, endpoint: EndpointId, indicatorId: number): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface IndicatorObject {\n indicatorId: number;\n propertyId: number;\n value: number | boolean;\n}\n// @publicAPI\nexport type IndicatorCCSetOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Set)\n@useSupervision()\nexport class IndicatorCCSet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSetOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else {\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSet {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n }\n public indicator0Value: number | undefined;\n public values: IndicatorObject[] | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type IndicatorCCReportOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Report)\nexport class IndicatorCCReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCReportOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else if (\"values\" in options) {\n if (options.values.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCReport {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n // TODO: Think if we want this:\n // // If not all Property IDs are included in the command for the actual Indicator ID,\n // // a controlling node MUST assume non-specified Property IDs values to be 0x00.\n // const indicatorId = this.values[0].indicatorId;\n // const supportedIndicatorProperties =\n // \tvalueDB.getValue<number[]>(\n // \t\tgetSupportedPropertyIDsValueID(\n // \t\t\tthis.endpointIndex,\n // \t\t\tindicatorId,\n // \t\t),\n // \t) ?? [];\n // // Find out which ones are missing\n // const missingIndicatorProperties = supportedIndicatorProperties.filter(\n // \tprop =>\n // \t\t!this.values!.find(({ propertyId }) => prop === propertyId),\n // );\n // // And assume they are 0 (false)\n // for (const missing of missingIndicatorProperties) {\n // \tthis.setIndicatorValue({\n // \t\tindicatorId,\n // \t\tpropertyId: missing,\n // \t\tvalue: 0,\n // \t});\n // }\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicator0Value != undefined) {\n if (!this.supportsV2Indicators(ctx)) {\n // Publish the value\n const valueV1 = IndicatorCCValues.valueV1;\n this.setMetadata(ctx, valueV1);\n this.setValue(ctx, valueV1, this.indicator0Value);\n }\n else {\n if (this.isSinglecast()) {\n // Don't!\n ctx.logNode(this.nodeId, {\n message: `ignoring V1 indicator report because the node supports V2 indicators`,\n direction: \"none\",\n endpoint: this.endpointIndex,\n });\n }\n }\n }\n else if (this.values) {\n // Store the simple values first\n for (const value of this.values) {\n this.setIndicatorValue(ctx, value);\n }\n // Then group values into the convenience properties\n const groupedValues = groupByIndicatorId(this.values);\n for (const [indicatorId, values] of groupedValues) {\n // Some devices report all properties it supports in every report,\n // even if it does not support all properties for the given indicator ID.\n // To avoid confusion, we need to filter out the unsupported properties\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId)) ?? [];\n const filteredValues = values.filter((v) => supportedPropertyIDs.includes(v.propertyId));\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, indicatorId);\n // ... timeout\n const timeout = indicatorObjectsToTimeout(filteredValues);\n if (timeout) {\n let timeoutString = \"\";\n if (timeout?.hours)\n timeoutString += `${timeout.hours}h`;\n if (timeout?.minutes) {\n timeoutString += `${timeout.minutes}m`;\n }\n if (timeout?.seconds) {\n timeoutString += `${timeout.seconds}s`;\n }\n const timeoutValue = IndicatorCCValues.timeout(indicatorId);\n const metadata: ValueMetadata = {\n ...timeoutValue.meta,\n label: getIndicatorLabel(indicatorId, 0x06, // This is actually ignored, but pass a valid ID for clarity\n overrideIndicatorLabel, \"Timeout\"),\n };\n this.setMetadata(ctx, timeoutValue, metadata);\n this.setValue(ctx, timeoutValue, timeoutString);\n }\n }\n }\n return true;\n }\n public readonly indicator0Value: number | undefined;\n public readonly values: IndicatorObject[] | undefined;\n private setIndicatorValue(ctx: GetValueDB, value: IndicatorObject): void {\n // Manufacturer-defined indicators may need a custom label\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, value.indicatorId);\n const metadata = getIndicatorMetadata(value.indicatorId, value.propertyId, overrideIndicatorLabel);\n // Some values need to be converted\n if (metadata.type === \"boolean\") {\n value.value = !!value.value;\n }\n // Only expose the value if it should be user-facing\n if (value.indicatorId === Indicator[\"Node Identify\"]) {\n return;\n }\n const prop = getIndicatorProperty(value.propertyId);\n if (!prop?.exposeAsValue)\n return;\n // And only if it is actually supported and not just reported by accident\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(value.indicatorId)) ?? [];\n if (!supportedPropertyIDs.includes(value.propertyId))\n return;\n // Publish the value\n const valueV2 = IndicatorCCValues.valueV2(value.indicatorId, value.propertyId);\n this.setMetadata(ctx, valueV2, metadata);\n this.setValue(ctx, valueV2, value.value);\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCGetOptions {\n indicatorId?: number;\n}\n@CCCommand(IndicatorCommand.Get)\n@expectedCCResponse(IndicatorCCReport)\nexport class IndicatorCCGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCGet {\n let indicatorId: number | undefined;\n if (raw.payload.length > 0) {\n indicatorId = raw.payload[0];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.indicatorId != undefined) {\n this.payload = Bytes.from([this.indicatorId]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedReportOptions {\n indicatorId: number;\n nextIndicatorId: number;\n supportedProperties: readonly number[];\n}\n@CCCommand(IndicatorCommand.SupportedReport)\nexport class IndicatorCCSupportedReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.nextIndicatorId = options.nextIndicatorId;\n this.supportedProperties = options.supportedProperties;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedReport {\n validatePayload(raw.payload.length >= 3);\n const indicatorId = raw.payload[0];\n const nextIndicatorId = raw.payload[1];\n const bitMaskLength = raw.payload[2] & 0b11111;\n let supportedProperties: readonly number[];\n if (bitMaskLength === 0) {\n supportedProperties = [];\n }\n else {\n validatePayload(raw.payload.length >= 3 + bitMaskLength);\n // The bit mask starts at 0, but bit 0 is not used\n supportedProperties = parseBitMask(raw.payload.subarray(3, 3 + bitMaskLength), 0).filter((v) => v !== 0);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n nextIndicatorId,\n supportedProperties,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicatorId !== 0x00) {\n // Remember which property IDs are supported\n this.setValue(ctx, IndicatorCCValues.supportedPropertyIDs(this.indicatorId), this.supportedProperties);\n }\n return true;\n }\n public readonly indicatorId: number;\n public readonly nextIndicatorId: number;\n public readonly supportedProperties: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const bitmask = this.supportedProperties.length > 0\n ? encodeBitMask(this.supportedProperties, undefined, 0)\n : new Bytes();\n this.payload = Bytes.concat([\n [\n this.indicatorId,\n this.nextIndicatorId,\n bitmask.length,\n ],\n bitmask,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n \"supported properties\": this.supportedProperties\n .map((id) => getIndicatorProperty(id)?.label\n ?? `Unknown (${num2hex(id)})`)\n .join(\", \"),\n \"next indicator\": getIndicatorName(this.nextIndicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorSupportedGet(sent: IndicatorCCSupportedGet, received: IndicatorCCSupportedReport) {\n return sent.indicatorId === 0 || received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.SupportedGet)\n@expectedCCResponse(IndicatorCCSupportedReport, testResponseForIndicatorSupportedGet)\nexport class IndicatorCCSupportedGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionReportOptions {\n indicatorId: number;\n description: string;\n}\n@CCCommand(IndicatorCommand.DescriptionReport)\nexport class IndicatorCCDescriptionReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.description = options.description;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionReport {\n validatePayload(raw.payload.length >= 2);\n const indicatorId = raw.payload[0];\n const descrptionLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + descrptionLength);\n const description: string = raw.payload\n .subarray(2, 2 + descrptionLength)\n .toString(\"utf8\");\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n description,\n });\n }\n public indicatorId: number;\n public description: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.description) {\n this.setValue(ctx, IndicatorCCValues.indicatorDescription(this.indicatorId), this.description);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const description = Bytes.from(this.description, \"utf8\");\n this.payload = Bytes.concat([\n [this.indicatorId, description.length],\n description,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n description: this.description || \"(none)\",\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorDescriptionGet(sent: IndicatorCCDescriptionGet, received: IndicatorCCDescriptionReport) {\n return received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.DescriptionGet)\n@expectedCCResponse(IndicatorCCDescriptionReport, testResponseForIndicatorDescriptionGet)\nexport class IndicatorCCDescriptionGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n },\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./IndicatorCC._validateArgs.js\";\nconst { validateArgs_IndicatorCCAPI_get, validateArgs_IndicatorCCAPI_set, validateArgs_IndicatorCCAPI_sendReport, validateArgs_IndicatorCCAPI_getSupported, validateArgs_IndicatorCCAPI_reportSupported, validateArgs_IndicatorCCAPI_reportDescription, validateArgs_IndicatorCCAPI_setTimeout, validateArgs_IndicatorCCAPI_getTimeout, validateArgs_IndicatorCCAPI_getDescription } = __validateArgs;\nimport { CommandClasses, type EndpointId, type GetValueDB, Indicator, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, type ValueID, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, getIndicatorProperty, parseBitMask, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, num2hex } from \"@zwave-js/shared\";\nimport { clamp, roundTo } from \"alcalzone-shared/math\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation, throwUnsupportedProperty, throwWrongValueType, } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext, type RefreshValuesOptions, getEffectiveCCVersion, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { IndicatorCommand, type IndicatorTimeout } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nfunction isManufacturerDefinedIndicator(indicatorId: number): boolean {\n return indicatorId >= 0x80 && indicatorId <= 0x9f;\n}\nconst timeoutStringRegex = /^(?:(?<hoursStr>\\d+)h)?(?:(?<minutesStr>\\d+)m)?(?:(?<secondsStr>\\d+(?:\\.\\d+)?)s)?$/i;\nconst MAX_INDICATOR_OBJECTS = 31;\nfunction parseIndicatorTimeoutString(text: string): IndicatorTimeout | undefined {\n if (!text.length)\n return undefined;\n // Try to parse the numeric parts from a timeout\n const match = timeoutStringRegex.exec(text);\n if (!match)\n return undefined;\n const { hoursStr, minutesStr, secondsStr } = match.groups!;\n if (!hoursStr && !minutesStr && !secondsStr)\n return undefined;\n const ret: IndicatorTimeout = {};\n if (hoursStr) {\n ret.hours = clamp(parseInt(hoursStr, 10), 0, 255);\n }\n if (minutesStr) {\n ret.minutes = clamp(parseInt(minutesStr, 10), 0, 255);\n }\n if (secondsStr) {\n ret.seconds = clamp(roundTo(parseFloat(secondsStr), 2), 0, 59.99);\n }\n return ret;\n}\nfunction groupByIndicatorId(values: IndicatorObject[]): Map<number, IndicatorObject[]> {\n const ret = new Map();\n for (const value of values) {\n if (!ret.has(value.indicatorId)) {\n ret.set(value.indicatorId, []);\n }\n ret.get(value.indicatorId)!.push(value);\n }\n return ret;\n}\nfunction indicatorObjectsToTimeout(values: IndicatorObject[]): IndicatorTimeout | undefined {\n const timeoutValues = values.filter((v) => [0x0a, 0x06, 0x07, 0x08].includes(v.propertyId));\n if (!timeoutValues.length)\n return undefined;\n const hours = (timeoutValues.find((v) => v.propertyId === 0x0a)?.value\n ?? 0) as number;\n const minutes = (timeoutValues.find((v) => v.propertyId === 0x06)?.value\n ?? 0) as number;\n const seconds = clamp((timeoutValues.find((v) => v.propertyId === 0x07)\n ?.value as number) ?? 0, 0, 59)\n + clamp((timeoutValues.find((v) => v.propertyId === 0x08)\n ?.value as number) ?? 0, 0, 99)\n / 100;\n return {\n hours,\n minutes,\n seconds,\n };\n}\nimport { IndicatorCCValues } from \"./_CCValues.generated.js\";\nexport { IndicatorCCValues };\n/**\n * Looks up the configured metadata for the given indicator and property\n */\nfunction getIndicatorMetadata(indicatorId: Indicator, propertyId: number, overrideIndicatorLabel?: string): ValueMetadata {\n const label = getIndicatorLabel(indicatorId, propertyId, overrideIndicatorLabel);\n const prop = getIndicatorProperty(propertyId);\n const baseMetadata = IndicatorCCValues.valueV2(indicatorId, propertyId).meta;\n if (!prop) {\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n };\n }\n else {\n if (prop.type === \"boolean\") {\n return {\n ...baseMetadata,\n ...ValueMetadata.Boolean,\n label,\n description: prop.description,\n readable: !prop.readonly,\n };\n }\n else {\n // UInt8\n return {\n ...baseMetadata,\n ...ValueMetadata.UInt8,\n label,\n description: prop.description,\n min: prop.min,\n max: prop.max,\n readable: !prop.readonly,\n };\n }\n }\n}\nfunction getIndicatorName(indicatorId: number | undefined): string {\n if (indicatorId) {\n return getEnumMemberName(Indicator, indicatorId);\n }\n else {\n return \"Default\";\n }\n}\n/** Returns a user-friendly label for an indicator */\nfunction getIndicatorLabel(indicatorId: number, propertyId: number, overrideIndicatorLabel?: string, overridePropertyLabel?: string): string {\n const defaultName = overrideIndicatorLabel || getIndicatorName(indicatorId);\n // Without a defined property, we cannot suggest a better label\n const prop = getIndicatorProperty(propertyId);\n if (!prop)\n return defaultName;\n // For indicators that correspond to an LCD or buttons,\n // the indicator enum names are enough\n if (indicatorId >= Indicator[\"LCD backlight\"]\n && indicatorId <= Indicator[\"Button 12 indication\"]\n && (propertyId === 0x01 /* Multilevel */\n || propertyId === 0x02 /* Binary */\n || overridePropertyLabel) // custom property label\n ) {\n let ret: string = (Indicator as any)[indicatorId];\n // Append the overridden property label if it exists\n if (overridePropertyLabel) {\n ret += ` - ${overridePropertyLabel}`;\n }\n return ret;\n }\n // Default to the current behavior of <indicator name> - <property label>\n return `${defaultName} - ${overridePropertyLabel || prop.label}`;\n}\nexport function shouldExposeIndicatorValue(indicatorId: number, propertyId: number): boolean {\n // Many possible indicator values are not suitable to be exposed as CC values,\n // usually because they need to be set in groups.\n // Indicator properties that should be exposed are marked as such\n const prop = getIndicatorProperty(propertyId);\n if (prop && !prop.exposeAsValue) {\n return false;\n }\n // Unless we know better, expose anyways\n return true;\n}\n@API(CommandClasses.Indicator)\nexport class IndicatorCCAPI extends CCAPI {\n public supportsCommand(cmd: IndicatorCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case IndicatorCommand.Get:\n case IndicatorCommand.Report:\n return this.isSinglecast();\n case IndicatorCommand.Set:\n return true; // This is mandatory\n case IndicatorCommand.SupportedGet:\n case IndicatorCommand.SupportedReport:\n return this.version >= 2 && this.isSinglecast();\n case IndicatorCommand.DescriptionGet:\n case IndicatorCommand.DescriptionReport:\n return this.version >= 4 && this.isSinglecast();\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: IndicatorCCAPI, { property, propertyKey }, value) {\n const valueId: ValueID = {\n commandClass: this.ccId,\n endpoint: this.endpoint.index,\n property,\n propertyKey,\n };\n if (property === \"value\") {\n // V1 value\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n return this.set(value);\n }\n else if (IndicatorCCValues.valueV2.is(valueId)) {\n const indicatorId = property as number;\n const propertyId = propertyKey as number;\n const expectedType = getIndicatorMetadata(indicatorId, propertyId).type as \"number\" | \"boolean\";\n // V2+ value\n if (typeof value !== expectedType) {\n throwWrongValueType(this.ccId, property, expectedType, typeof value);\n }\n return this.set([\n {\n indicatorId,\n propertyId,\n value: value as any,\n },\n ]);\n }\n else if (IndicatorCCValues.timeout.is(valueId)) {\n const indicatorId = property as number;\n if (typeof value !== \"string\") {\n throwWrongValueType(this.ccId, property, \"string\", typeof value);\n }\n return this.setTimeout(indicatorId, value);\n }\n else if (IndicatorCCValues.identify.is(valueId)) {\n if (typeof value !== \"boolean\") {\n throwWrongValueType(this.ccId, property, \"boolean\", typeof value);\n }\n return this.identify();\n }\n else {\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: IndicatorCCAPI, { property }) {\n if (property === \"value\")\n return this.get();\n if (typeof property === \"number\") {\n return this.get(property);\n }\n throwUnsupportedProperty(this.ccId, property);\n };\n }\n @validateArgs_IndicatorCCAPI_get()\n public async get(indicatorId?: number): Promise<MaybeNotKnown<number | IndicatorObject[]>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Get);\n const cc = new IndicatorCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCReport>(cc, this.commandOptions);\n if (!response)\n return;\n if (response.values)\n return response.values;\n return response.indicator0Value!;\n }\n @validateArgs_IndicatorCCAPI_set()\n public async set(value: number | IndicatorObject[]): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Set);\n if (this.version === 1 && typeof value !== \"number\") {\n throw new ZWaveError(`Node ${this.endpoint\n .nodeId as number} only supports IndicatorCC V1 which requires a single value to be set`, ZWaveErrorCodes.Argument_Invalid);\n }\n else if (this.version >= 2\n && isArray(value)\n && value.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n const cc = new IndicatorCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...(typeof value === \"number\" ? { value } : { values: value }),\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_sendReport()\n public async sendReport(options: IndicatorCCReportOptions): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.Report);\n const cc = new IndicatorCCReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n ...options,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_getSupported()\n public async getSupported(indicatorId: number): Promise<{\n indicatorId?: number;\n supportedProperties: readonly number[];\n nextIndicatorId: number;\n } | undefined> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedGet);\n const cc = new IndicatorCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCSupportedReport>(cc, this.commandOptions);\n if (response) {\n return {\n // Include the actual indicator ID if 0x00 was requested\n ...(indicatorId === 0x00\n ? { indicatorId: response.indicatorId }\n : undefined),\n supportedProperties: response.supportedProperties,\n nextIndicatorId: response.nextIndicatorId,\n };\n }\n }\n @validateArgs_IndicatorCCAPI_reportSupported()\n public async reportSupported(indicatorId: number, supportedProperties: readonly number[], nextIndicatorId: number): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.SupportedReport);\n const cc = new IndicatorCCSupportedReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n supportedProperties,\n nextIndicatorId,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_IndicatorCCAPI_reportDescription()\n public async reportDescription(indicatorId: number, description: string): Promise<void> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionReport);\n const cc = new IndicatorCCDescriptionReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n description,\n });\n await this.host.sendCommand(cc, this.commandOptions);\n }\n /**\n * Instructs the node to identify itself. Available starting with V3 of this CC.\n */\n public async identify(): Promise<SupervisionResult | undefined> {\n if (this.version < 3) {\n throw new ZWaveError(`The identify command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n return this.set([\n {\n indicatorId: 0x50,\n propertyId: 0x03,\n value: 0x08,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x04,\n value: 0x03,\n },\n {\n indicatorId: 0x50,\n propertyId: 0x05,\n value: 0x06,\n },\n ]);\n }\n /**\n * Set a timeout for a given indicator ID after which the indicator will be turned off.\n * @param timeout The timeout in one of the supported forms:\n * \t- a timeout string in the form `12h18m17.59s`. All parts (hours, minutes, seconds, hundredths) are optional, but must be specified in this order. An empty string will be treated like `undefined`.\n * \t- an object specifying the timeout parts. An empty object will be treated like `undefined`.\n * \t- `undefined` to disable the timeout.\n */\n @validateArgs_IndicatorCCAPI_setTimeout()\n public async setTimeout(indicatorId: number, timeout: IndicatorTimeout | string | undefined): Promise<SupervisionResult | undefined> {\n this.assertPhysicalEndpoint(this.endpoint);\n if (this.version < 3) {\n throw new ZWaveError(`The setTimeout command is only supported in Indicator CC version 3 and above`, ZWaveErrorCodes.CC_NotSupported);\n }\n if (typeof timeout === \"string\") {\n if (timeout === \"\") {\n timeout = undefined;\n }\n else {\n const parsed = parseIndicatorTimeoutString(timeout);\n if (!parsed) {\n throw new ZWaveError(`The timeout string \"${timeout}\" is not valid`, ZWaveErrorCodes.Argument_Invalid);\n }\n timeout = parsed;\n }\n }\n const supportedPropertyIDs = IndicatorCC.getSupportedPropertyIDsCached(this.host, this.endpoint, indicatorId);\n const objects: IndicatorObject[] = [];\n if (timeout) {\n const hours = timeout.hours ?? 0;\n const minutes = timeout.minutes ?? 0;\n const seconds = Math.floor(timeout.seconds ?? 0);\n const hundredths = Math.round(((timeout.seconds ?? 0) % 1) * 100);\n if (hours) {\n if (!supportedPropertyIDs?.includes(0x0a)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in hours`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x0a,\n value: hours,\n });\n }\n if (minutes) {\n if (!supportedPropertyIDs?.includes(0x06)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in minutes`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x06,\n value: minutes,\n });\n }\n if (seconds) {\n if (!supportedPropertyIDs?.includes(0x07)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x07,\n value: seconds,\n });\n }\n if (hundredths) {\n if (!supportedPropertyIDs?.includes(0x08)) {\n throw new ZWaveError(`The indicator ${indicatorId} does not support setting the timeout in 1/100 seconds`, ZWaveErrorCodes.Argument_Invalid);\n }\n objects.push({\n indicatorId,\n propertyId: 0x08,\n value: hundredths,\n });\n }\n }\n if (!objects.length) {\n objects.push(...(supportedPropertyIDs ?? []).map((p) => ({\n indicatorId,\n propertyId: p,\n value: 0,\n })));\n }\n return this.set(objects);\n }\n /**\n * Returns the timeout after which the given indicator will be turned off.\n */\n @validateArgs_IndicatorCCAPI_getTimeout()\n public async getTimeout(indicatorId: number): Promise<MaybeNotKnown<IndicatorTimeout>> {\n const values = await this.get(indicatorId);\n if (!isArray(values))\n return;\n return indicatorObjectsToTimeout(values);\n }\n @validateArgs_IndicatorCCAPI_getDescription()\n public async getDescription(indicatorId: number): Promise<MaybeNotKnown<string>> {\n this.assertSupportsCommand(IndicatorCommand, IndicatorCommand.DescriptionGet);\n const cc = new IndicatorCCDescriptionGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n indicatorId,\n });\n const response = await this.host.sendCommand<IndicatorCCDescriptionReport>(cc, this.commandOptions);\n return response?.description;\n }\n}\n@commandClass(CommandClasses.Indicator)\n@implementedVersion(4)\n@ccValues(IndicatorCCValues)\nexport class IndicatorCC extends CommandClass {\n declare ccCommand: IndicatorCommand;\n public async interview(ctx: InterviewContext): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: MessagePriority.NodeQuery,\n tag: \"interview\",\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `Interviewing ${this.ccName}...`,\n direction: \"none\",\n });\n if (api.version > 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"scanning supported indicator IDs...\",\n direction: \"outbound\",\n });\n // Query ID 0 to get the first supported ID\n let curId = 0x00;\n const supportedIndicatorIds: number[] = [];\n do {\n const supportedResponse = await api.getSupported(curId);\n if (!supportedResponse) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Time out while scanning supported indicator IDs, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n if (supportedResponse.supportedProperties.length > 0) {\n supportedIndicatorIds.push(supportedResponse.indicatorId ?? curId);\n }\n curId = supportedResponse.nextIndicatorId;\n } while (curId !== 0x00);\n // The IDs are not stored by the report CCs so store them here once we have all of them\n this.setValue(ctx, IndicatorCCValues.supportedIndicatorIds, supportedIndicatorIds);\n const logMessage = `supported indicator IDs: ${supportedIndicatorIds.join(\", \")}`;\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n if (api.version >= 4) {\n const manufacturerDefinedIndicatorIds = supportedIndicatorIds\n .filter((id) => isManufacturerDefinedIndicator(id));\n if (manufacturerDefinedIndicatorIds.length > 0) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"retrieving description for manufacturer-defined indicator IDs...\",\n direction: \"outbound\",\n });\n for (const [i, id] of manufacturerDefinedIndicatorIds\n .entries()) {\n await api.getDescription(id);\n node.reportInterviewProgress(i + 1, manufacturerDefinedIndicatorIds.length);\n }\n }\n }\n }\n // Query current values\n await this.refreshValues(ctx, {\n tag: \"interview\",\n onProgress: (completed, total) => node.reportInterviewProgress(completed, total),\n });\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n public async refreshValues(ctx: RefreshValuesContext, options?: RefreshValuesOptions): Promise<void> {\n const node = this.getNode(ctx)!;\n const endpoint = this.getEndpoint(ctx)!;\n const api = CCAPI.create(CommandClasses.Indicator, ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n if (api.version === 1) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"requesting current indicator value...\",\n direction: \"outbound\",\n });\n await api.get();\n }\n else {\n const supportedIndicatorIds: number[] = this.getValue(ctx, IndicatorCCValues.supportedIndicatorIds) ?? [];\n for (const [i, indicatorId] of supportedIndicatorIds.entries()) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: `requesting current indicator value (id = ${num2hex(indicatorId)})...`,\n direction: \"outbound\",\n });\n await api.get(indicatorId);\n options?.onProgress?.(i + 1, supportedIndicatorIds.length);\n }\n }\n }\n public translatePropertyKey(ctx: GetValueDB, property: string | number, propertyKey: string | number): string | undefined {\n if (property === \"value\") {\n // CC version 1 only has a single value that doesn't need to be translated\n return undefined;\n }\n else if (typeof property === \"number\"\n && typeof propertyKey === \"number\") {\n // The indicator property is our property key\n const prop = getIndicatorProperty(propertyKey);\n if (prop)\n return prop.label;\n }\n else if (typeof property === \"number\"\n && propertyKey === \"timeout\") {\n return \"Timeout\";\n }\n return super.translatePropertyKey(ctx, property, propertyKey);\n }\n public translateProperty(ctx: GetValueDB, property: string | number, propertyKey?: string | number): string {\n if (typeof property === \"number\") {\n if (typeof propertyKey === \"number\" || propertyKey === \"timeout\") {\n // The indicator corresponds to our property\n if (property in Indicator)\n return Indicator[property];\n }\n }\n return super.translateProperty(ctx, property, propertyKey);\n }\n protected supportsV2Indicators(ctx: GetValueDB): boolean {\n // First test if there are any indicator ids defined\n const supportedIndicatorIds = this.getValue<number[]>(ctx, IndicatorCCValues.supportedIndicatorIds);\n if (!supportedIndicatorIds?.length)\n return false;\n // Then test if there are any property ids defined\n return supportedIndicatorIds.some((indicatorId) => !!this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId))?.length);\n }\n protected getManufacturerDefinedIndicatorLabel(ctx: GetValueDB, indicatorId: number): string | undefined {\n if (isManufacturerDefinedIndicator(indicatorId)) {\n return this.getValue(ctx, IndicatorCCValues.indicatorDescription(indicatorId));\n }\n }\n public static getSupportedPropertyIDsCached(ctx: GetValueDB, endpoint: EndpointId, indicatorId: number): MaybeNotKnown<number[]> {\n return ctx\n .getValueDB(endpoint.nodeId)\n .getValue(IndicatorCCValues.supportedPropertyIDs(indicatorId).endpoint(endpoint.index));\n }\n}\n// @publicAPI\nexport interface IndicatorObject {\n indicatorId: number;\n propertyId: number;\n value: number | boolean;\n}\n// @publicAPI\nexport type IndicatorCCSetOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Set)\n@useSupervision()\nexport class IndicatorCCSet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSetOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else {\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSet {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n }\n public indicator0Value: number | undefined;\n public values: IndicatorObject[] | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type IndicatorCCReportOptions = {\n value: number;\n} | {\n values: IndicatorObject[];\n};\n@CCCommand(IndicatorCommand.Report)\nexport class IndicatorCCReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCReportOptions>) {\n super(options);\n if (\"value\" in options) {\n this.indicator0Value = options.value;\n }\n else if (\"values\" in options) {\n if (options.values.length > MAX_INDICATOR_OBJECTS) {\n throw new ZWaveError(`Only ${MAX_INDICATOR_OBJECTS} indicator values can be set at a time!`, ZWaveErrorCodes.Argument_Invalid);\n }\n this.values = options.values;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCReport {\n validatePayload(raw.payload.length >= 1);\n const objCount = raw.payload.length >= 2\n ? raw.payload[1] & 0b11111\n : 0;\n if (objCount === 0) {\n const indicator0Value = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n value: indicator0Value,\n });\n }\n validatePayload(raw.payload.length >= 2 + 3 * objCount);\n const values: IndicatorObject[] = [];\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n const value: IndicatorObject = {\n indicatorId: raw.payload[offset],\n propertyId: raw.payload[offset + 1],\n value: raw.payload[offset + 2],\n };\n values.push(value);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n values,\n });\n // TODO: Think if we want this:\n // // If not all Property IDs are included in the command for the actual Indicator ID,\n // // a controlling node MUST assume non-specified Property IDs values to be 0x00.\n // const indicatorId = this.values[0].indicatorId;\n // const supportedIndicatorProperties =\n // \tvalueDB.getValue<number[]>(\n // \t\tgetSupportedPropertyIDsValueID(\n // \t\t\tthis.endpointIndex,\n // \t\t\tindicatorId,\n // \t\t),\n // \t) ?? [];\n // // Find out which ones are missing\n // const missingIndicatorProperties = supportedIndicatorProperties.filter(\n // \tprop =>\n // \t\t!this.values!.find(({ propertyId }) => prop === propertyId),\n // );\n // // And assume they are 0 (false)\n // for (const missing of missingIndicatorProperties) {\n // \tthis.setIndicatorValue({\n // \t\tindicatorId,\n // \t\tpropertyId: missing,\n // \t\tvalue: 0,\n // \t});\n // }\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Indicator objects only exist in V2+ reports, the timeout properties in V3+.\n // Ignore them if the device advertises a lower version.\n const ccVersion = getEffectiveCCVersion(ctx, this);\n if (this.indicator0Value != undefined) {\n if (!this.supportsV2Indicators(ctx)) {\n // Publish the value\n const valueV1 = IndicatorCCValues.valueV1;\n this.setMetadata(ctx, valueV1);\n this.setValue(ctx, valueV1, this.indicator0Value);\n }\n else {\n if (this.isSinglecast()) {\n // Don't!\n ctx.logNode(this.nodeId, {\n message: `ignoring V1 indicator report because the node supports V2 indicators`,\n direction: \"none\",\n endpoint: this.endpointIndex,\n });\n }\n }\n }\n else if (this.values && ccVersion >= 2) {\n // Store the simple values first\n for (const value of this.values) {\n this.setIndicatorValue(ctx, value);\n }\n // Then group values into the convenience properties\n const groupedValues = groupByIndicatorId(this.values);\n for (const [indicatorId, values] of groupedValues) {\n // Some devices report all properties it supports in every report,\n // even if it does not support all properties for the given indicator ID.\n // To avoid confusion, we need to filter out the unsupported properties\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(indicatorId)) ?? [];\n const filteredValues = values.filter((v) => supportedPropertyIDs.includes(v.propertyId));\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, indicatorId);\n // ... timeout\n const timeout = indicatorObjectsToTimeout(filteredValues);\n if (timeout && ccVersion >= 3) {\n let timeoutString = \"\";\n if (timeout?.hours)\n timeoutString += `${timeout.hours}h`;\n if (timeout?.minutes) {\n timeoutString += `${timeout.minutes}m`;\n }\n if (timeout?.seconds) {\n timeoutString += `${timeout.seconds}s`;\n }\n const timeoutValue = IndicatorCCValues.timeout(indicatorId);\n const metadata: ValueMetadata = {\n ...timeoutValue.meta,\n label: getIndicatorLabel(indicatorId, 0x06, // This is actually ignored, but pass a valid ID for clarity\n overrideIndicatorLabel, \"Timeout\"),\n };\n this.setMetadata(ctx, timeoutValue, metadata);\n this.setValue(ctx, timeoutValue, timeoutString);\n }\n }\n }\n return true;\n }\n public readonly indicator0Value: number | undefined;\n public readonly values: IndicatorObject[] | undefined;\n private setIndicatorValue(ctx: GetValueDB, value: IndicatorObject): void {\n // Manufacturer-defined indicators may need a custom label\n const overrideIndicatorLabel = this\n .getManufacturerDefinedIndicatorLabel(ctx, value.indicatorId);\n const metadata = getIndicatorMetadata(value.indicatorId, value.propertyId, overrideIndicatorLabel);\n // Some values need to be converted\n if (metadata.type === \"boolean\") {\n value.value = !!value.value;\n }\n // Only expose the value if it should be user-facing\n if (value.indicatorId === Indicator[\"Node Identify\"]) {\n return;\n }\n const prop = getIndicatorProperty(value.propertyId);\n if (!prop?.exposeAsValue)\n return;\n // And only if it is actually supported and not just reported by accident\n const supportedPropertyIDs = this.getValue<number[]>(ctx, IndicatorCCValues.supportedPropertyIDs(value.indicatorId)) ?? [];\n if (!supportedPropertyIDs.includes(value.propertyId))\n return;\n // Publish the value\n const valueV2 = IndicatorCCValues.valueV2(value.indicatorId, value.propertyId);\n this.setMetadata(ctx, valueV2, metadata);\n this.setValue(ctx, valueV2, value.value);\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.values != undefined) {\n // V2+\n this.payload = Bytes.alloc(2 + 3 * this.values.length, 0);\n // Byte 0 is the legacy value\n const objCount = this.values.length & MAX_INDICATOR_OBJECTS;\n this.payload[1] = objCount;\n for (let i = 0; i < objCount; i++) {\n const offset = 2 + 3 * i;\n this.payload[offset] = this.values[i].indicatorId;\n this.payload[offset + 1] = this.values[i].propertyId;\n const value = this.values[i].value;\n this.payload[offset + 2] = value === true\n ? 0xff\n : value === false\n ? 0x00\n : value;\n }\n }\n else {\n // V1\n this.payload = Bytes.from([this.indicator0Value ?? 0]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {};\n if (this.indicator0Value != undefined) {\n message[\"indicator 0 value\"] = this.indicator0Value;\n }\n if (this.values != undefined) {\n message.values = this.values\n .map((v) => `\n\u00B7 indicatorId: ${v.indicatorId}\n propertyId: ${v.propertyId}\n value: ${v.value}`)\n .join(\"\");\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCGetOptions {\n indicatorId?: number;\n}\n@CCCommand(IndicatorCommand.Get)\n@expectedCCResponse(IndicatorCCReport)\nexport class IndicatorCCGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCGet {\n let indicatorId: number | undefined;\n if (raw.payload.length > 0) {\n indicatorId = raw.payload[0];\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n if (this.indicatorId != undefined) {\n this.payload = Bytes.from([this.indicatorId]);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedReportOptions {\n indicatorId: number;\n nextIndicatorId: number;\n supportedProperties: readonly number[];\n}\n@CCCommand(IndicatorCommand.SupportedReport)\nexport class IndicatorCCSupportedReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.nextIndicatorId = options.nextIndicatorId;\n this.supportedProperties = options.supportedProperties;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedReport {\n validatePayload(raw.payload.length >= 3);\n const indicatorId = raw.payload[0];\n const nextIndicatorId = raw.payload[1];\n const bitMaskLength = raw.payload[2] & 0b11111;\n let supportedProperties: readonly number[];\n if (bitMaskLength === 0) {\n supportedProperties = [];\n }\n else {\n validatePayload(raw.payload.length >= 3 + bitMaskLength);\n // The bit mask starts at 0, but bit 0 is not used\n supportedProperties = parseBitMask(raw.payload.subarray(3, 3 + bitMaskLength), 0).filter((v) => v !== 0);\n }\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n nextIndicatorId,\n supportedProperties,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n if (this.indicatorId !== 0x00) {\n // Remember which property IDs are supported\n this.setValue(ctx, IndicatorCCValues.supportedPropertyIDs(this.indicatorId), this.supportedProperties);\n }\n return true;\n }\n public readonly indicatorId: number;\n public readonly nextIndicatorId: number;\n public readonly supportedProperties: readonly number[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const bitmask = this.supportedProperties.length > 0\n ? encodeBitMask(this.supportedProperties, undefined, 0)\n : new Bytes();\n this.payload = Bytes.concat([\n [\n this.indicatorId,\n this.nextIndicatorId,\n bitmask.length,\n ],\n bitmask,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n \"supported properties\": this.supportedProperties\n .map((id) => getIndicatorProperty(id)?.label\n ?? `Unknown (${num2hex(id)})`)\n .join(\", \"),\n \"next indicator\": getIndicatorName(this.nextIndicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCSupportedGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorSupportedGet(sent: IndicatorCCSupportedGet, received: IndicatorCCSupportedReport) {\n return sent.indicatorId === 0 || received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.SupportedGet)\n@expectedCCResponse(IndicatorCCSupportedReport, testResponseForIndicatorSupportedGet)\nexport class IndicatorCCSupportedGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCSupportedGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCSupportedGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n indicator: getIndicatorName(this.indicatorId),\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionReportOptions {\n indicatorId: number;\n description: string;\n}\n@CCCommand(IndicatorCommand.DescriptionReport)\nexport class IndicatorCCDescriptionReport extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionReportOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n this.description = options.description;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionReport {\n validatePayload(raw.payload.length >= 2);\n const indicatorId = raw.payload[0];\n const descrptionLength = raw.payload[1];\n validatePayload(raw.payload.length >= 2 + descrptionLength);\n const description: string = raw.payload\n .subarray(2, 2 + descrptionLength)\n .toString(\"utf8\");\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n description,\n });\n }\n public indicatorId: number;\n public description: string;\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // This command only exists in V4. Ignore it if the device advertises a lower version.\n if (this.description && getEffectiveCCVersion(ctx, this) >= 4) {\n this.setValue(ctx, IndicatorCCValues.indicatorDescription(this.indicatorId), this.description);\n }\n return true;\n }\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const description = Bytes.from(this.description, \"utf8\");\n this.payload = Bytes.concat([\n [this.indicatorId, description.length],\n description,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n description: this.description || \"(none)\",\n },\n };\n }\n}\n// @publicAPI\nexport interface IndicatorCCDescriptionGetOptions {\n indicatorId: number;\n}\nfunction testResponseForIndicatorDescriptionGet(sent: IndicatorCCDescriptionGet, received: IndicatorCCDescriptionReport) {\n return received.indicatorId === sent.indicatorId;\n}\n@CCCommand(IndicatorCommand.DescriptionGet)\n@expectedCCResponse(IndicatorCCDescriptionReport, testResponseForIndicatorDescriptionGet)\nexport class IndicatorCCDescriptionGet extends IndicatorCC {\n public constructor(options: WithAddress<IndicatorCCDescriptionGetOptions>) {\n super(options);\n this.indicatorId = options.indicatorId;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): IndicatorCCDescriptionGet {\n validatePayload(raw.payload.length >= 1);\n const indicatorId = raw.payload[0];\n return new this({\n nodeId: ctx.sourceNodeId,\n indicatorId,\n });\n }\n public indicatorId: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([this.indicatorId]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"indicator ID\": this.indicatorId,\n },\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare function validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet(): <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext) => T | void;
|
|
2
2
|
export declare function validateArgs_ManufacturerSpecificCCAPI_sendReport(): <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext) => T | void;
|
|
3
|
+
export declare function validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport(): <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext) => T | void;
|
|
3
4
|
//# sourceMappingURL=ManufacturerSpecificCC._validateArgs.d.ts.map
|
|
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
var ManufacturerSpecificCC_validateArgs_exports = {};
|
|
31
31
|
__export(ManufacturerSpecificCC_validateArgs_exports, {
|
|
32
32
|
validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet: () => validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet,
|
|
33
|
+
validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport: () => validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport,
|
|
33
34
|
validateArgs_ManufacturerSpecificCCAPI_sendReport: () => validateArgs_ManufacturerSpecificCCAPI_sendReport
|
|
34
35
|
});
|
|
35
36
|
module.exports = __toCommonJS(ManufacturerSpecificCC_validateArgs_exports);
|
|
@@ -56,9 +57,21 @@ function validateArgs_ManufacturerSpecificCCAPI_sendReport() {
|
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
59
|
__name(validateArgs_ManufacturerSpecificCCAPI_sendReport, "validateArgs_ManufacturerSpecificCCAPI_sendReport");
|
|
60
|
+
function validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport() {
|
|
61
|
+
return (__decoratedMethod, { kind }) => {
|
|
62
|
+
if (kind === "method") {
|
|
63
|
+
return /* @__PURE__ */ __name(function sendDeviceSpecificReport(options) {
|
|
64
|
+
v.assert(v.object({ kind: "parameter", name: "options" }, "ManufacturerSpecificCCDeviceSpecificReportOptions", { "type": v.enum({ kind: "property", name: "type" }, "DeviceIdType"), "deviceId": v.oneOf({ kind: "property", name: "deviceId" }, void 0, v.primitive({ kind: "property", name: "deviceId" }, "string"), v.uint8array({ kind: "property", name: "deviceId" })) })(options));
|
|
65
|
+
return __decoratedMethod.call(this, options);
|
|
66
|
+
}, "sendDeviceSpecificReport");
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
__name(validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport, "validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport");
|
|
59
71
|
// Annotate the CommonJS export names for ESM import in node:
|
|
60
72
|
0 && (module.exports = {
|
|
61
73
|
validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet,
|
|
74
|
+
validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport,
|
|
62
75
|
validateArgs_ManufacturerSpecificCCAPI_sendReport
|
|
63
76
|
});
|
|
64
77
|
//# sourceMappingURL=ManufacturerSpecificCC._validateArgs.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ManufacturerSpecificCC._validateArgs.ts"],
|
|
4
|
-
"sourcesContent": ["import * as v from \"@zwave-js/core/validation\";\n\nexport function validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function deviceSpecificGet(this: any, deviceIdType: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.enum({ kind: \"parameter\", name: \"deviceIdType\" }, \"DeviceIdType\")(deviceIdType),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, deviceIdType);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}\n\nexport function validateArgs_ManufacturerSpecificCCAPI_sendReport() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function sendReport(this: any, options: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.object({ kind: \"parameter\", name: \"options\" }, 'ManufacturerSpecificCCReportOptions', { \"manufacturerId\": v.primitive({ kind: \"property\", name: \"manufacturerId\" }, \"number\"), \"productType\": v.primitive({ kind: \"property\", name: \"productType\" }, \"number\"), \"productId\": v.primitive({ kind: \"property\", name: \"productId\" }, \"number\") })(options),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, options);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA
|
|
4
|
+
"sourcesContent": ["import * as v from \"@zwave-js/core/validation\";\n\nexport function validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function deviceSpecificGet(this: any, deviceIdType: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.enum({ kind: \"parameter\", name: \"deviceIdType\" }, \"DeviceIdType\")(deviceIdType),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, deviceIdType);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}\n\nexport function validateArgs_ManufacturerSpecificCCAPI_sendReport() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function sendReport(this: any, options: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.object({ kind: \"parameter\", name: \"options\" }, 'ManufacturerSpecificCCReportOptions', { \"manufacturerId\": v.primitive({ kind: \"property\", name: \"manufacturerId\" }, \"number\"), \"productType\": v.primitive({ kind: \"property\", name: \"productType\" }, \"number\"), \"productId\": v.primitive({ kind: \"property\", name: \"productId\" }, \"number\") })(options),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, options);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}\n\nexport function validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport() {\n\treturn <T extends Function>(__decoratedMethod: T, { kind }: ClassMethodDecoratorContext): T | void => {\n\t\tif (kind === \"method\") {\n\t\t\treturn function sendDeviceSpecificReport(this: any, options: unknown) {\n\t\t\t\tv.assert(\n\t\t\t\t\tv.object({ kind: \"parameter\", name: \"options\" }, 'ManufacturerSpecificCCDeviceSpecificReportOptions', { \"type\": v.enum({ kind: \"property\", name: \"type\" }, \"DeviceIdType\"), \"deviceId\": v.oneOf({ kind: \"property\", name: \"deviceId\" }, undefined, v.primitive({ kind: \"property\", name: \"deviceId\" }, \"string\"), v.uint8array({ kind: \"property\", name: \"deviceId\" })) })(options),\n\t\t\t\t);\n\t\t\t\treturn __decoratedMethod.call(this, options);\n\t\t\t} as unknown as T;\n\t\t}\n\t};\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAAA,QAAmB;AAEb,SAAU,2DAAwD;AACvE,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,kBAA6B,cAAqB;AACjE,UAAE,OACD,EAAE,KAAK,EAAE,MAAM,aAAa,MAAM,eAAc,GAAI,cAAc,EAAE,YAAY,CAAC;AAElF,eAAO,kBAAkB,KAAK,MAAM,YAAY;MACjD,GALO;IAMR;EACD;AACD;AAXgB;AAaV,SAAU,oDAAiD;AAChE,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,WAAsB,SAAgB;AACrD,UAAE,OACD,EAAE,OAAO,EAAE,MAAM,aAAa,MAAM,UAAS,GAAI,uCAAuC,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,MAAM,iBAAgB,GAAI,QAAQ,GAAG,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,MAAM,cAAa,GAAI,QAAQ,GAAG,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,MAAM,YAAW,GAAI,QAAQ,EAAC,CAAE,EAAE,OAAO,CAAC;AAE1V,eAAO,kBAAkB,KAAK,MAAM,OAAO;MAC5C,GALO;IAMR;EACD;AACD;AAXgB;AAaV,SAAU,kEAA+D;AAC9E,SAAO,CAAqB,mBAAsB,EAAE,KAAI,MAA6C;AACpG,QAAI,SAAS,UAAU;AACtB,aAAO,gCAAS,yBAAoC,SAAgB;AACnE,UAAE,OACD,EAAE,OAAO,EAAE,MAAM,aAAa,MAAM,UAAS,GAAI,qDAAqD,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,YAAY,MAAM,OAAM,GAAI,cAAc,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,MAAM,WAAU,GAAI,QAAW,EAAE,UAAU,EAAE,MAAM,YAAY,MAAM,WAAU,GAAI,QAAQ,GAAG,EAAE,WAAW,EAAE,MAAM,YAAY,MAAM,WAAU,CAAE,CAAC,EAAC,CAAE,EAAE,OAAO,CAAC;AAEpX,eAAO,kBAAkB,KAAK,MAAM,OAAO;MAC5C,GALO;IAMR;EACD;AACD;AAXgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -9,8 +9,9 @@ export { ManufacturerSpecificCCValues };
|
|
|
9
9
|
export declare class ManufacturerSpecificCCAPI extends PhysicalCCAPI {
|
|
10
10
|
supportsCommand(cmd: ManufacturerSpecificCommand): MaybeNotKnown<boolean>;
|
|
11
11
|
get(): Promise<Pick<ManufacturerSpecificCCReport, "manufacturerId" | "productId" | "productType"> | undefined>;
|
|
12
|
-
deviceSpecificGet(deviceIdType: DeviceIdType): Promise<MaybeNotKnown<string>>;
|
|
12
|
+
deviceSpecificGet(deviceIdType: DeviceIdType): Promise<MaybeNotKnown<string | Bytes>>;
|
|
13
13
|
sendReport(options: ManufacturerSpecificCCReportOptions): Promise<void>;
|
|
14
|
+
sendDeviceSpecificReport(options: ManufacturerSpecificCCDeviceSpecificReportOptions): Promise<void>;
|
|
14
15
|
}
|
|
15
16
|
export declare class ManufacturerSpecificCC extends CommandClass {
|
|
16
17
|
ccCommand: ManufacturerSpecificCommand;
|
|
@@ -35,13 +36,14 @@ export declare class ManufacturerSpecificCCGet extends ManufacturerSpecificCC {
|
|
|
35
36
|
}
|
|
36
37
|
export interface ManufacturerSpecificCCDeviceSpecificReportOptions {
|
|
37
38
|
type: DeviceIdType;
|
|
38
|
-
deviceId: string;
|
|
39
|
+
deviceId: string | Uint8Array;
|
|
39
40
|
}
|
|
40
41
|
export declare class ManufacturerSpecificCCDeviceSpecificReport extends ManufacturerSpecificCC {
|
|
41
42
|
constructor(options: WithAddress<ManufacturerSpecificCCDeviceSpecificReportOptions>);
|
|
42
43
|
static from(raw: CCRaw, ctx: CCParsingContext): ManufacturerSpecificCCDeviceSpecificReport;
|
|
43
44
|
readonly type: DeviceIdType;
|
|
44
|
-
readonly deviceId: string;
|
|
45
|
+
readonly deviceId: string | Bytes;
|
|
46
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
45
47
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
46
48
|
}
|
|
47
49
|
export interface ManufacturerSpecificCCDeviceSpecificGetOptions {
|
|
@@ -49,7 +51,7 @@ export interface ManufacturerSpecificCCDeviceSpecificGetOptions {
|
|
|
49
51
|
}
|
|
50
52
|
export declare class ManufacturerSpecificCCDeviceSpecificGet extends ManufacturerSpecificCC {
|
|
51
53
|
constructor(options: WithAddress<ManufacturerSpecificCCDeviceSpecificGetOptions>);
|
|
52
|
-
static from(
|
|
54
|
+
static from(raw: CCRaw, ctx: CCParsingContext): ManufacturerSpecificCCDeviceSpecificGet;
|
|
53
55
|
deviceIdType: DeviceIdType;
|
|
54
56
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
55
57
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
@@ -47,7 +47,7 @@ var import_CommandClass = require("../lib/CommandClass.js");
|
|
|
47
47
|
var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
|
|
48
48
|
var import_Types = require("../lib/_Types.js");
|
|
49
49
|
var import_CCValues_generated = require("./_CCValues.generated.js");
|
|
50
|
-
const { validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet, validateArgs_ManufacturerSpecificCCAPI_sendReport } = __validateArgs;
|
|
50
|
+
const { validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet, validateArgs_ManufacturerSpecificCCAPI_sendReport, validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport } = __validateArgs;
|
|
51
51
|
let ManufacturerSpecificCCAPI = (() => {
|
|
52
52
|
let _classDecorators = [(0, import_CommandClassDecorators.API)(import_core.CommandClasses["Manufacturer Specific"])];
|
|
53
53
|
let _classDescriptor;
|
|
@@ -57,6 +57,7 @@ let ManufacturerSpecificCCAPI = (() => {
|
|
|
57
57
|
let _instanceExtraInitializers = [];
|
|
58
58
|
let _deviceSpecificGet_decorators;
|
|
59
59
|
let _sendReport_decorators;
|
|
60
|
+
let _sendDeviceSpecificReport_decorators;
|
|
60
61
|
var ManufacturerSpecificCCAPI2 = class extends _classSuper {
|
|
61
62
|
static {
|
|
62
63
|
__name(this, "ManufacturerSpecificCCAPI");
|
|
@@ -68,8 +69,10 @@ let ManufacturerSpecificCCAPI = (() => {
|
|
|
68
69
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
69
70
|
_deviceSpecificGet_decorators = [validateArgs_ManufacturerSpecificCCAPI_deviceSpecificGet()];
|
|
70
71
|
_sendReport_decorators = [validateArgs_ManufacturerSpecificCCAPI_sendReport()];
|
|
72
|
+
_sendDeviceSpecificReport_decorators = [validateArgs_ManufacturerSpecificCCAPI_sendDeviceSpecificReport()];
|
|
71
73
|
(0, import_tslib.__esDecorate)(this, null, _deviceSpecificGet_decorators, { kind: "method", name: "deviceSpecificGet", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "deviceSpecificGet" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.deviceSpecificGet, "get") }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
72
74
|
(0, import_tslib.__esDecorate)(this, null, _sendReport_decorators, { kind: "method", name: "sendReport", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "sendReport" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.sendReport, "get") }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
75
|
+
(0, import_tslib.__esDecorate)(this, null, _sendDeviceSpecificReport_decorators, { kind: "method", name: "sendDeviceSpecificReport", static: false, private: false, access: { has: /* @__PURE__ */ __name((obj) => "sendDeviceSpecificReport" in obj, "has"), get: /* @__PURE__ */ __name((obj) => obj.sendDeviceSpecificReport, "get") }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
73
76
|
(0, import_tslib.__esDecorate)(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
74
77
|
ManufacturerSpecificCCAPI2 = _classThis = _classDescriptor.value;
|
|
75
78
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -122,6 +125,15 @@ let ManufacturerSpecificCCAPI = (() => {
|
|
|
122
125
|
});
|
|
123
126
|
await this.host.sendCommand(cc, this.commandOptions);
|
|
124
127
|
}
|
|
128
|
+
async sendDeviceSpecificReport(options) {
|
|
129
|
+
this.assertSupportsCommand(import_Types.ManufacturerSpecificCommand, import_Types.ManufacturerSpecificCommand.DeviceSpecificReport);
|
|
130
|
+
const cc = new ManufacturerSpecificCCDeviceSpecificReport({
|
|
131
|
+
nodeId: this.endpoint.nodeId,
|
|
132
|
+
endpointIndex: this.endpoint.index,
|
|
133
|
+
...options
|
|
134
|
+
});
|
|
135
|
+
await this.host.sendCommand(cc, this.commandOptions);
|
|
136
|
+
}
|
|
125
137
|
constructor() {
|
|
126
138
|
super(...arguments);
|
|
127
139
|
(0, import_tslib.__runInitializers)(this, _instanceExtraInitializers);
|
|
@@ -295,16 +307,20 @@ let ManufacturerSpecificCCDeviceSpecificReport = (() => {
|
|
|
295
307
|
constructor(options) {
|
|
296
308
|
super(options);
|
|
297
309
|
this.type = options.type;
|
|
298
|
-
|
|
310
|
+
if (typeof options.deviceId === "string") {
|
|
311
|
+
this.deviceId = options.deviceId;
|
|
312
|
+
} else {
|
|
313
|
+
this.deviceId = import_shared.Bytes.from(options.deviceId);
|
|
314
|
+
}
|
|
299
315
|
}
|
|
300
316
|
static from(raw, ctx) {
|
|
301
317
|
(0, import_core.validatePayload)(raw.payload.length >= 2);
|
|
302
318
|
const type = raw.payload[0] & 7;
|
|
303
319
|
const dataFormat = raw.payload[1] >>> 5;
|
|
304
320
|
const dataLength = raw.payload[1] & 31;
|
|
305
|
-
(0, import_core.validatePayload)(dataLength > 0, raw.payload.length >= 2 + dataLength);
|
|
321
|
+
(0, import_core.validatePayload)(type === import_Types.DeviceIdType.SerialNumber || type === import_Types.DeviceIdType.PseudoRandom, dataFormat === import_Types.DeviceIdDataFormat.UTF8 || dataFormat === import_Types.DeviceIdDataFormat.Binary, dataLength > 0, raw.payload.length >= 2 + dataLength);
|
|
306
322
|
const deviceIdData = raw.payload.subarray(2, 2 + dataLength);
|
|
307
|
-
const deviceId = dataFormat ===
|
|
323
|
+
const deviceId = dataFormat === import_Types.DeviceIdDataFormat.UTF8 ? deviceIdData.toString("utf8") : deviceIdData;
|
|
308
324
|
return new this({
|
|
309
325
|
nodeId: ctx.sourceNodeId,
|
|
310
326
|
type,
|
|
@@ -313,12 +329,25 @@ let ManufacturerSpecificCCDeviceSpecificReport = (() => {
|
|
|
313
329
|
}
|
|
314
330
|
type;
|
|
315
331
|
deviceId;
|
|
332
|
+
serialize(ctx) {
|
|
333
|
+
const deviceIdData = typeof this.deviceId === "string" ? import_shared.Bytes.from(this.deviceId, "utf8") : this.deviceId;
|
|
334
|
+
const format = typeof this.deviceId === "string" ? import_Types.DeviceIdDataFormat.UTF8 : import_Types.DeviceIdDataFormat.Binary;
|
|
335
|
+
const length = Math.min(deviceIdData.length, 31);
|
|
336
|
+
this.payload = import_shared.Bytes.concat([
|
|
337
|
+
[
|
|
338
|
+
this.type & 7,
|
|
339
|
+
format << 5 | length
|
|
340
|
+
],
|
|
341
|
+
deviceIdData.subarray(0, length)
|
|
342
|
+
]);
|
|
343
|
+
return super.serialize(ctx);
|
|
344
|
+
}
|
|
316
345
|
toLogEntry(ctx) {
|
|
317
346
|
return {
|
|
318
347
|
...super.toLogEntry(ctx),
|
|
319
348
|
message: {
|
|
320
349
|
"device id type": (0, import_shared.getEnumMemberName)(import_Types.DeviceIdType, this.type),
|
|
321
|
-
"device id": this.deviceId
|
|
350
|
+
"device id": typeof this.deviceId === "string" ? this.deviceId : (0, import_core.logBuffer)(this.deviceId)
|
|
322
351
|
}
|
|
323
352
|
};
|
|
324
353
|
}
|
|
@@ -349,8 +378,13 @@ let ManufacturerSpecificCCDeviceSpecificGet = (() => {
|
|
|
349
378
|
super(options);
|
|
350
379
|
this.deviceIdType = options.deviceIdType;
|
|
351
380
|
}
|
|
352
|
-
static from(
|
|
353
|
-
|
|
381
|
+
static from(raw, ctx) {
|
|
382
|
+
(0, import_core.validatePayload)(raw.payload.length >= 1);
|
|
383
|
+
const deviceIdType = raw.payload[0] & 7;
|
|
384
|
+
return new this({
|
|
385
|
+
nodeId: ctx.sourceNodeId,
|
|
386
|
+
deviceIdType
|
|
387
|
+
});
|
|
354
388
|
}
|
|
355
389
|
deviceIdType;
|
|
356
390
|
serialize(ctx) {
|