@zwave-js/cc 15.29.0 → 15.31.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/AlarmSensorCC.d.ts +3 -1
- package/build/cjs/cc/AlarmSensorCC.js +22 -2
- package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.d.ts +6 -3
- package/build/cjs/cc/BarrierOperatorCC.js +40 -6
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/CentralSceneCC.d.ts +4 -1
- package/build/cjs/cc/CentralSceneCC.js +34 -2
- package/build/cjs/cc/CentralSceneCC.js.map +2 -2
- package/build/cjs/cc/ClimateControlScheduleCC.d.ts +6 -3
- package/build/cjs/cc/ClimateControlScheduleCC.js +54 -6
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.d.ts +2 -1
- package/build/cjs/cc/ClockCC.js +19 -2
- package/build/cjs/cc/ClockCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC.d.ts +3 -2
- package/build/cjs/cc/ConfigurationCC.js +61 -4
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DoorLockLoggingCC.d.ts +3 -1
- package/build/cjs/cc/DoorLockLoggingCC.js +35 -2
- package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.d.ts +5 -1
- package/build/cjs/cc/EntryControlCC.js +57 -2
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlModeCC.d.ts +3 -1
- package/build/cjs/cc/HumidityControlModeCC.js +14 -2
- package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +3 -1
- package/build/cjs/cc/HumidityControlOperatingStateCC.js +4 -0
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlSetpointCC.d.ts +8 -4
- package/build/cjs/cc/HumidityControlSetpointCC.js +51 -8
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.d.ts +15 -9
- package/build/cjs/cc/IrrigationCC.js +260 -24
- package/build/cjs/cc/IrrigationCC.js.map +2 -2
- package/build/cjs/cc/LanguageCC.d.ts +2 -1
- package/build/cjs/cc/LanguageCC.js +18 -2
- package/build/cjs/cc/LanguageCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.d.ts +2 -1
- package/build/cjs/cc/MultiChannelCC.js +14 -2
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +3 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.js +38 -5
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +3 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.js +25 -4
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanModeCC.d.ts +3 -1
- package/build/cjs/cc/ThermostatFanModeCC.js +17 -2
- package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanStateCC.d.ts +3 -1
- package/build/cjs/cc/ThermostatFanStateCC.js +4 -0
- package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatModeCC.js +2 -2
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/TimeCC.d.ts +1 -1
- package/build/cjs/cc/TimeCC.js +11 -2
- package/build/cjs/cc/TimeCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC.d.ts +2 -1
- package/build/cjs/cc/UserCodeCC.js +31 -2
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.d.ts +1 -0
- package/build/cjs/cc/VersionCC.js +32 -0
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WakeUpCC.d.ts +2 -0
- package/build/cjs/cc/WakeUpCC.js +14 -0
- package/build/cjs/cc/WakeUpCC.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +2 -1
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +30 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.d.ts +3 -1
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +25 -7
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.d.ts +6 -3
- package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.js +45 -18
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts +4 -1
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +35 -6
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.d.ts +6 -3
- package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.js +57 -16
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts +2 -1
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +20 -7
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts +3 -2
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +63 -12
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts +3 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.js +39 -5
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts +5 -1
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +64 -7
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts +3 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +15 -7
- package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +3 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js +5 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts +8 -4
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +52 -25
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts +15 -9
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +268 -61
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.d.ts +2 -1
- package/build/esm/cc/LanguageCC.d.ts.map +1 -1
- package/build/esm/cc/LanguageCC.js +18 -6
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts +2 -1
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +15 -7
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +3 -2
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js +39 -13
- package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts +3 -2
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +25 -12
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts +3 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +18 -7
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts +3 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js +5 -1
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +2 -2
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts +1 -1
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +12 -7
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts +2 -1
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +31 -6
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts +1 -0
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +34 -0
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.d.ts +2 -0
- package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
- package/build/esm/cc/WakeUpCC.js +14 -0
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +2 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +34 -4
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/ThermostatModeCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./ThermostatModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, getEnumMemberName, pick, } from \"@zwave-js/shared\";\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, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatMode, ThermostatModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatModeCCValues };\n@API(CommandClasses[\"Thermostat Mode\"])\nexport class ThermostatModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatModeCommand.Get:\n case ThermostatModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }, value) {\n if (property !== \"mode\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Get);\n const cc = new ThermostatModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"manufacturerData\"]);\n }\n }\n public async set(mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>): Promise<SupervisionResult | undefined>;\n public async set(mode: (typeof ThermostatMode)[\"Manufacturer specific\"], manufacturerData: BytesView | string): Promise<SupervisionResult | undefined>;\n @validateArgs_ThermostatModeCCAPI_set()\n public async set(mode: ThermostatMode, manufacturerData?: BytesView | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Set);\n if (typeof manufacturerData === \"string\") {\n // We accept the manufacturer data as a hex string. Make sure it's valid\n if (manufacturerData.length % 2 !== 0\n || !/^[0-9a-f]+$/i.test(manufacturerData)) {\n throw new ZWaveError(`Manufacturer data must be represented as hexadecimal when passed as a string!`, ZWaveErrorCodes.Argument_Invalid);\n }\n manufacturerData = Bytes.from(manufacturerData, \"hex\");\n }\n const cc = new ThermostatModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n manufacturerData: manufacturerData as any,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatMode[]>> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.SupportedGet);\n const cc = new ThermostatModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Mode\"])\n@implementedVersion(3)\n@ccValues(ThermostatModeCCValues)\nexport class ThermostatModeCC extends CommandClass {\n declare ccCommand: ThermostatModeCommand;\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[\"Thermostat Mode\"], 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 // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = logText(\"received supported thermostat modes:\", {\n nested: logList(supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat modes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\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[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat mode: \"\n + getEnumMemberName(ThermostatMode, currentStatus.mode),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport type ThermostatModeCCSetOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Set)\n@useSupervision()\nexport class ThermostatModeCCSet extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n if (\"manufacturerData\" in options) {\n this.manufacturerData = options.manufacturerData;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSet {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n const manufacturerDataLength = (raw.payload[0] >>> 5) & 0b111;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public mode: ThermostatMode;\n public manufacturerData?: BytesView;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerData = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? this.manufacturerData\n : new Uint8Array();\n const manufacturerDataLength = manufacturerData.length;\n this.payload = Bytes.concat([\n [((manufacturerDataLength & 0b111) << 5) + (this.mode & 0b11111)],\n manufacturerData,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type ThermostatModeCCReportOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n manufacturerData?: undefined;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData?: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatModeCCValues.thermostatMode)\n@ccValueProperty(\"manufacturerData\", ThermostatModeCCValues.manufacturerData)\nexport class ThermostatModeCCReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCReportOptions>) {\n super(options);\n this.mode = options.mode;\n this.manufacturerData = options.manufacturerData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n // V3+\n const manufacturerDataLength = raw.payload[0] >>> 5;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Update the supported modes if a mode is used that wasn't previously\n // reported to be supported. This shouldn't happen, but well... it does anyways\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n const supportedModesValue = ThermostatModeCCValues.supportedModes;\n const supportedModes = this.getValue<ThermostatMode[]>(ctx, supportedModesValue);\n if (supportedModes\n && this.mode in ThermostatMode\n && !supportedModes.includes(this.mode)) {\n supportedModes.push(this.mode);\n supportedModes.sort((a, b) => a - b);\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, supportedModes),\n });\n this.setValue(ctx, supportedModesValue, supportedModes);\n }\n return true;\n }\n public readonly mode: ThermostatMode;\n public readonly manufacturerData: BytesView | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerDataLength = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? Math.min(0b111, this.manufacturerData.length)\n : 0;\n this.payload = new Bytes(1 + manufacturerDataLength);\n this.payload[0] = (manufacturerDataLength << 5) + (this.mode & 0b11111);\n if (manufacturerDataLength && this.manufacturerData) {\n this.payload.set(this.manufacturerData.subarray(0, manufacturerDataLength), 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatModeCommand.Get)\n@expectedCCResponse(ThermostatModeCCReport)\nexport class ThermostatModeCCGet extends ThermostatModeCC {\n}\n// @publicAPI\nexport interface ThermostatModeCCSupportedReportOptions {\n supportedModes: ThermostatMode[];\n}\n@CCCommand(ThermostatModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatModeCCValues.supportedModes)\nexport class ThermostatModeCCSupportedReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSupportedReportOptions>) {\n super(options);\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSupportedReport {\n const supportedModes: ThermostatMode[] = parseBitMask(raw.payload, ThermostatMode.Off);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Use this information to create the metadata for the mode property\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatMode[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedModes, ThermostatMode[\"Manufacturer specific\"], ThermostatMode.Off);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": logList(this.supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n },\n };\n }\n}\n@CCCommand(ThermostatModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatModeCCSupportedReport)\nexport class ThermostatModeCCSupportedGet extends ThermostatModeCC {\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./ThermostatModeCC._validateArgs.js\";\nconst { validateArgs_ThermostatModeCCAPI_set } = __validateArgs;\nimport { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type MessageRecord, type SupervisionResult, ValueMetadata, type WithAddress, ZWaveError, ZWaveErrorCodes, encodeBitMask, enumValuesToMetadataStates, logList, logText, parseBitMask, supervisedCommandSucceeded, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, getEnumMemberName, pick, } from \"@zwave-js/shared\";\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, ccValueProperty, ccValues, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport { ThermostatMode, ThermostatModeCommand } from \"../lib/_Types.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\nimport { ThermostatModeCCValues } from \"./_CCValues.generated.js\";\nexport { ThermostatModeCCValues };\n@API(CommandClasses[\"Thermostat Mode\"])\nexport class ThermostatModeCCAPI extends CCAPI {\n public supportsCommand(cmd: ThermostatModeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case ThermostatModeCommand.Get:\n case ThermostatModeCommand.SupportedGet:\n return this.isSinglecast();\n case ThermostatModeCommand.Set:\n return true; // This is mandatory\n }\n return super.supportsCommand(cmd);\n }\n protected override get [SET_VALUE](): SetValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }, value) {\n if (property !== \"mode\") {\n throwUnsupportedProperty(this.ccId, property);\n }\n if (typeof value !== \"number\") {\n throwWrongValueType(this.ccId, property, \"number\", typeof value);\n }\n const result = await this.set(value);\n // Verify the current value after a delay, unless the command was supervised and successful\n if (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n // TODO: Ideally this would be a short delay, but some thermostats like Remotec ZXT-600\n // aren't able to handle the GET this quickly.\n this.schedulePoll({ property }, value);\n }\n return result;\n };\n }\n protected get [POLL_VALUE](): PollValueImplementation {\n return async function (this: ThermostatModeCCAPI, { property }) {\n switch (property) {\n case \"mode\":\n return (await this.get())?.[property];\n default:\n throwUnsupportedProperty(this.ccId, property);\n }\n };\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async get() {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Get);\n const cc = new ThermostatModeCCGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"mode\", \"manufacturerData\"]);\n }\n }\n public async set(mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>): Promise<SupervisionResult | undefined>;\n public async set(mode: (typeof ThermostatMode)[\"Manufacturer specific\"], manufacturerData: BytesView | string): Promise<SupervisionResult | undefined>;\n @validateArgs_ThermostatModeCCAPI_set()\n public async set(mode: ThermostatMode, manufacturerData?: BytesView | string): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.Set);\n if (typeof manufacturerData === \"string\") {\n // We accept the manufacturer data as a hex string. Make sure it's valid\n if (manufacturerData.length % 2 !== 0\n || !/^[0-9a-f]+$/i.test(manufacturerData)) {\n throw new ZWaveError(`Manufacturer data must be represented as hexadecimal when passed as a string!`, ZWaveErrorCodes.Argument_Invalid);\n }\n manufacturerData = Bytes.from(manufacturerData, \"hex\");\n }\n const cc = new ThermostatModeCCSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n mode,\n manufacturerData: manufacturerData as any,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getSupportedModes(): Promise<MaybeNotKnown<readonly ThermostatMode[]>> {\n this.assertSupportsCommand(ThermostatModeCommand, ThermostatModeCommand.SupportedGet);\n const cc = new ThermostatModeCCSupportedGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<ThermostatModeCCSupportedReport>(cc, this.commandOptions);\n return response?.supportedModes;\n }\n}\n@commandClass(CommandClasses[\"Thermostat Mode\"])\n@implementedVersion(3)\n@ccValues(ThermostatModeCCValues)\nexport class ThermostatModeCC extends CommandClass {\n declare ccCommand: ThermostatModeCommand;\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[\"Thermostat Mode\"], 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 // First query the possible modes to set the metadata\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying supported thermostat modes...\",\n direction: \"outbound\",\n });\n const supportedModes = await api.getSupportedModes();\n if (supportedModes) {\n const logMessage = logText(\"received supported thermostat modes:\", {\n nested: logList(supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n });\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: logMessage,\n direction: \"inbound\",\n });\n }\n else {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"Querying supported thermostat modes timed out, skipping interview...\",\n level: \"warn\",\n });\n return;\n }\n await this.refreshValues(ctx, { tag: \"interview\" });\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[\"Thermostat Mode\"], ctx, endpoint).withOptions({\n priority: options?.priority ?? MessagePriority.NodeQuery,\n tag: options?.tag,\n });\n // Query the current status\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"querying current thermostat mode...\",\n direction: \"outbound\",\n });\n const currentStatus = await api.get();\n if (currentStatus) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"received current thermostat mode: \"\n + getEnumMemberName(ThermostatMode, currentStatus.mode),\n direction: \"inbound\",\n });\n }\n }\n}\n// @publicAPI\nexport type ThermostatModeCCSetOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Set)\n@useSupervision()\nexport class ThermostatModeCCSet extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSetOptions>) {\n super(options);\n this.mode = options.mode;\n if (\"manufacturerData\" in options) {\n this.manufacturerData = options.manufacturerData;\n }\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSet {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n const manufacturerDataLength = (raw.payload[0] >>> 5) & 0b111;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public mode: ThermostatMode;\n public manufacturerData?: BytesView;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerData = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? this.manufacturerData.subarray(0, 0b111)\n : new Uint8Array();\n const manufacturerDataLength = manufacturerData.length;\n this.payload = Bytes.concat([\n [(manufacturerDataLength << 5) + (this.mode & 0b11111)],\n manufacturerData,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n// @publicAPI\nexport type ThermostatModeCCReportOptions = {\n mode: Exclude<ThermostatMode, (typeof ThermostatMode)[\"Manufacturer specific\"]>;\n manufacturerData?: undefined;\n} | {\n mode: (typeof ThermostatMode)[\"Manufacturer specific\"];\n manufacturerData?: BytesView;\n};\n@CCCommand(ThermostatModeCommand.Report)\n@ccValueProperty(\"mode\", ThermostatModeCCValues.thermostatMode)\n@ccValueProperty(\"manufacturerData\", ThermostatModeCCValues.manufacturerData)\nexport class ThermostatModeCCReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCReportOptions>) {\n super(options);\n this.mode = options.mode;\n this.manufacturerData = options.manufacturerData;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCReport {\n validatePayload(raw.payload.length >= 1);\n const mode: ThermostatMode = raw.payload[0] & 0b11111;\n if (mode !== ThermostatMode[\"Manufacturer specific\"]) {\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n });\n }\n // V3+\n const manufacturerDataLength = raw.payload[0] >>> 5;\n validatePayload(raw.payload.length >= 1 + manufacturerDataLength);\n const manufacturerData = raw.payload.subarray(1, 1 + manufacturerDataLength);\n return new this({\n nodeId: ctx.sourceNodeId,\n mode,\n manufacturerData,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Update the supported modes if a mode is used that wasn't previously\n // reported to be supported. This shouldn't happen, but well... it does anyways\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n const supportedModesValue = ThermostatModeCCValues.supportedModes;\n const supportedModes = this.getValue<ThermostatMode[]>(ctx, supportedModesValue);\n if (supportedModes\n && this.mode in ThermostatMode\n && !supportedModes.includes(this.mode)) {\n supportedModes.push(this.mode);\n supportedModes.sort((a, b) => a - b);\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, supportedModes),\n });\n this.setValue(ctx, supportedModesValue, supportedModes);\n }\n return true;\n }\n public readonly mode: ThermostatMode;\n public readonly manufacturerData: BytesView | undefined;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n const manufacturerDataLength = this.mode === ThermostatMode[\"Manufacturer specific\"]\n && this.manufacturerData\n ? Math.min(0b111, this.manufacturerData.length)\n : 0;\n this.payload = new Bytes(1 + manufacturerDataLength);\n this.payload[0] = (manufacturerDataLength << 5) + (this.mode & 0b11111);\n if (manufacturerDataLength && this.manufacturerData) {\n this.payload.set(this.manufacturerData.subarray(0, manufacturerDataLength), 1);\n }\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n const message: MessageRecord = {\n mode: getEnumMemberName(ThermostatMode, this.mode),\n };\n if (this.manufacturerData != undefined) {\n message[\"manufacturer data\"] = buffer2hex(this.manufacturerData);\n }\n return {\n ...super.toLogEntry(ctx),\n message,\n };\n }\n}\n@CCCommand(ThermostatModeCommand.Get)\n@expectedCCResponse(ThermostatModeCCReport)\nexport class ThermostatModeCCGet extends ThermostatModeCC {\n}\n// @publicAPI\nexport interface ThermostatModeCCSupportedReportOptions {\n supportedModes: ThermostatMode[];\n}\n@CCCommand(ThermostatModeCommand.SupportedReport)\n@ccValueProperty(\"supportedModes\", ThermostatModeCCValues.supportedModes)\nexport class ThermostatModeCCSupportedReport extends ThermostatModeCC {\n public constructor(options: WithAddress<ThermostatModeCCSupportedReportOptions>) {\n super(options);\n this.supportedModes = options.supportedModes;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): ThermostatModeCCSupportedReport {\n const supportedModes: ThermostatMode[] = parseBitMask(raw.payload, ThermostatMode.Off);\n return new this({\n nodeId: ctx.sourceNodeId,\n supportedModes,\n });\n }\n public persistValues(ctx: PersistValuesContext): boolean {\n if (!super.persistValues(ctx))\n return false;\n // Use this information to create the metadata for the mode property\n const thermostatModeValue = ThermostatModeCCValues.thermostatMode;\n this.setMetadata(ctx, thermostatModeValue, {\n ...thermostatModeValue.meta,\n states: enumValuesToMetadataStates(ThermostatMode, this.supportedModes),\n });\n return true;\n }\n public readonly supportedModes: ThermostatMode[];\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = encodeBitMask(this.supportedModes, ThermostatMode[\"Manufacturer specific\"], ThermostatMode.Off);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"supported modes\": logList(this.supportedModes.map((mode) => getEnumMemberName(ThermostatMode, mode))),\n },\n };\n }\n}\n@CCCommand(ThermostatModeCommand.SupportedGet)\n@expectedCCResponse(ThermostatModeCCSupportedReport)\nexport class ThermostatModeCCSupportedGet extends ThermostatModeCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/cjs/cc/TimeCC.d.ts
CHANGED
|
@@ -58,7 +58,7 @@ export interface TimeCCTimeOffsetSetOptions {
|
|
|
58
58
|
}
|
|
59
59
|
export declare class TimeCCTimeOffsetSet extends TimeCC {
|
|
60
60
|
constructor(options: WithAddress<TimeCCTimeOffsetSetOptions>);
|
|
61
|
-
static from(
|
|
61
|
+
static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeOffsetSet;
|
|
62
62
|
standardOffset: number;
|
|
63
63
|
dstOffset: number;
|
|
64
64
|
dstStartDate: Date;
|
package/build/cjs/cc/TimeCC.js
CHANGED
|
@@ -436,8 +436,17 @@ let TimeCCTimeOffsetSet = (() => {
|
|
|
436
436
|
this.dstStartDate = options.dstStart;
|
|
437
437
|
this.dstEndDate = options.dstEnd;
|
|
438
438
|
}
|
|
439
|
-
static from(
|
|
440
|
-
|
|
439
|
+
static from(raw, ctx) {
|
|
440
|
+
(0, import_core.validatePayload)(raw.payload.length >= 9);
|
|
441
|
+
const { standardOffset, dstOffset } = (0, import_serializers.parseTimezone)(raw.payload);
|
|
442
|
+
const currentYear = (/* @__PURE__ */ new Date()).getUTCFullYear();
|
|
443
|
+
return new this({
|
|
444
|
+
nodeId: ctx.sourceNodeId,
|
|
445
|
+
standardOffset,
|
|
446
|
+
dstOffset,
|
|
447
|
+
dstStart: new Date(Date.UTC(currentYear, raw.payload[3] - 1, raw.payload[4], raw.payload[5])),
|
|
448
|
+
dstEnd: new Date(Date.UTC(currentYear, raw.payload[6] - 1, raw.payload[7], raw.payload[8]))
|
|
449
|
+
});
|
|
441
450
|
}
|
|
442
451
|
standardOffset;
|
|
443
452
|
dstOffset;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src_gen/cc/TimeCC.ts"],
|
|
4
|
-
"sourcesContent": ["import * as __validateArgs from \"./TimeCC._validateArgs.js\";\nconst { validateArgs_TimeCCAPI_reportTime, validateArgs_TimeCCAPI_reportDate, validateArgs_TimeCCAPI_setTimezone, validateArgs_TimeCCAPI_reportTimezone } = __validateArgs;\nimport { CommandClasses, type DSTInfo, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, ZWaveError, ZWaveErrorCodes, formatDate, getDSTInfo, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { TimeCommand } from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// Only the timezone information can be set and that accepts a non-primitive value\n@API(CommandClasses.Time)\nexport class TimeCCAPI extends CCAPI {\n public supportsCommand(cmd: TimeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case TimeCommand.TimeGet:\n case TimeCommand.TimeReport:\n case TimeCommand.DateGet:\n case TimeCommand.DateReport:\n return this.isSinglecast(); // \"mandatory\"\n case TimeCommand.TimeOffsetGet:\n case TimeCommand.TimeOffsetReport:\n return this.version >= 2 && this.isSinglecast();\n case TimeCommand.TimeOffsetSet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getTime() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeGet);\n const cc = new TimeCCTimeGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"hour\", \"minute\", \"second\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportTime()\n public async reportTime(hour: number, minute: number, second: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeReport);\n const cc = new TimeCCTimeReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n hour,\n minute,\n second,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getDate() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateGet);\n const cc = new TimeCCDateGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCDateReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"day\", \"month\", \"year\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportDate()\n public async reportDate(year: number, month: number, day: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateReport);\n const cc = new TimeCCDateReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n year,\n month,\n day,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_TimeCCAPI_setTimezone()\n public async setTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetSet);\n const cc = new TimeCCTimeOffsetSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getTimezone(): Promise<MaybeNotKnown<DSTInfo>> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetGet);\n const cc = new TimeCCTimeOffsetGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeOffsetReport>(cc, this.commandOptions);\n if (response) {\n return {\n standardOffset: response.standardOffset,\n dstOffset: response.dstOffset,\n startDate: response.dstStartDate,\n endDate: response.dstEndDate,\n };\n }\n }\n @validateArgs_TimeCCAPI_reportTimezone()\n public async reportTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetReport);\n const cc = new TimeCCTimeOffsetReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Time)\n@implementedVersion(2)\nexport class TimeCC extends CommandClass {\n declare ccCommand: TimeCommand;\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.Time, 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 // Synchronize the slave's time\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"setting timezone information...\",\n direction: \"outbound\",\n });\n // Set the correct timezone on this node\n const timezone = getDSTInfo();\n await api.setTimezone(timezone);\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface TimeCCTimeReportOptions {\n hour: number;\n minute: number;\n second: number;\n}\n@CCCommand(TimeCommand.TimeReport)\nexport class TimeCCTimeReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeReportOptions>) {\n super(options);\n this.hour = options.hour;\n this.minute = options.minute;\n this.second = options.second;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeReport {\n validatePayload(raw.payload.length >= 3);\n const hour = raw.payload[0] & 0b11111;\n const minute = raw.payload[1];\n const second = raw.payload[2];\n validatePayload(hour >= 0, hour <= 23, minute >= 0, minute <= 59, second >= 0, second <= 59);\n return new this({\n nodeId: ctx.sourceNodeId,\n hour,\n minute,\n second,\n });\n }\n public hour: number;\n public minute: number;\n public second: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.hour & 0b11111,\n this.minute,\n this.second,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n time: `${this.hour.toString().padStart(2, \"0\")}:${this.minute\n .toString()\n .padStart(2, \"0\")}:${this.second.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeGet)\n@expectedCCResponse(TimeCCTimeReport)\nexport class TimeCCTimeGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCDateReportOptions {\n year: number;\n month: number;\n day: number;\n}\n@CCCommand(TimeCommand.DateReport)\nexport class TimeCCDateReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCDateReportOptions>) {\n super(options);\n this.year = options.year;\n this.month = options.month;\n this.day = options.day;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCDateReport {\n validatePayload(raw.payload.length >= 4);\n const year = raw.payload.readUInt16BE(0);\n const month = raw.payload[2];\n const day = raw.payload[3];\n validatePayload(month >= 1, month <= 12, day >= 1, day <= 31);\n return new this({\n nodeId: ctx.sourceNodeId,\n year,\n month,\n day,\n });\n }\n public year: number;\n public month: number;\n public day: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n // 2 bytes placeholder for year\n 0,\n 0,\n this.month,\n this.day,\n ]);\n this.payload.writeUInt16BE(this.year, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n date: `${this.year.toString().padStart(4, \"0\")}-${this.month\n .toString()\n .padStart(2, \"0\")}-${this.day.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.DateGet)\n@expectedCCResponse(TimeCCDateReport)\nexport class TimeCCDateGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetSetOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetSet)\n@useSupervision()\nexport class TimeCCTimeOffsetSet extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetSetOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(_raw: CCRaw, _ctx: CCParsingContext): TimeCCTimeOffsetSet {\n // TODO: Deserialize payload\n throw new ZWaveError(`${this.name}: deserialization not implemented`, ZWaveErrorCodes.Deserialization_NotImplemented);\n // return new TimeCCTimeOffsetSet({\n // \tnodeId: ctx.sourceNodeId,\n // });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetReportOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetReport)\nexport class TimeCCTimeOffsetReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetReportOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeOffsetReport {\n validatePayload(raw.payload.length >= 9);\n const { standardOffset, dstOffset } = parseTimezone(raw.payload);\n const currentYear = new Date().getUTCFullYear();\n const dstStartDate: Date = new Date(Date.UTC(currentYear, raw.payload[3] - 1, raw.payload[4], raw.payload[5]));\n const dstEndDate: Date = new Date(Date.UTC(currentYear, raw.payload[6] - 1, raw.payload[7], raw.payload[8]));\n return new this({\n nodeId: ctx.sourceNodeId,\n standardOffset,\n dstOffset,\n dstStart: dstStartDate,\n dstEnd: dstEndDate,\n });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeOffsetGet)\n@expectedCCResponse(TimeCCTimeOffsetReport)\nexport class TimeCCTimeOffsetGet extends TimeCC {\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qBAAgC;AAEhC,
|
|
4
|
+
"sourcesContent": ["import * as __validateArgs from \"./TimeCC._validateArgs.js\";\nconst { validateArgs_TimeCCAPI_reportTime, validateArgs_TimeCCAPI_reportDate, validateArgs_TimeCCAPI_setTimezone, validateArgs_TimeCCAPI_reportTimezone } = __validateArgs;\nimport { CommandClasses, type DSTInfo, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, MessagePriority, type SupervisionResult, type WithAddress, formatDate, getDSTInfo, validatePayload, } from \"@zwave-js/core\";\nimport { Bytes, pick } from \"@zwave-js/shared\";\nimport { CCAPI } from \"../lib/API.js\";\nimport { type CCRaw, CommandClass, type InterviewContext, } from \"../lib/CommandClass.js\";\nimport { API, CCCommand, commandClass, expectedCCResponse, implementedVersion, useSupervision, } from \"../lib/CommandClassDecorators.js\";\nimport { TimeCommand } from \"../lib/_Types.js\";\nimport { encodeTimezone, parseTimezone } from \"../lib/serializers.js\";\nimport type { CCEncodingContext, CCParsingContext } from \"../lib/traits.js\";\n// @noSetValueAPI\n// Only the timezone information can be set and that accepts a non-primitive value\n@API(CommandClasses.Time)\nexport class TimeCCAPI extends CCAPI {\n public supportsCommand(cmd: TimeCommand): MaybeNotKnown<boolean> {\n switch (cmd) {\n case TimeCommand.TimeGet:\n case TimeCommand.TimeReport:\n case TimeCommand.DateGet:\n case TimeCommand.DateReport:\n return this.isSinglecast(); // \"mandatory\"\n case TimeCommand.TimeOffsetGet:\n case TimeCommand.TimeOffsetReport:\n return this.version >= 2 && this.isSinglecast();\n case TimeCommand.TimeOffsetSet:\n return this.version >= 2;\n }\n return super.supportsCommand(cmd);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getTime() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeGet);\n const cc = new TimeCCTimeGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"hour\", \"minute\", \"second\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportTime()\n public async reportTime(hour: number, minute: number, second: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeReport);\n const cc = new TimeCCTimeReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n hour,\n minute,\n second,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n // oxlint-disable-next-line typescript/explicit-module-boundary-types\n public async getDate() {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateGet);\n const cc = new TimeCCDateGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCDateReport>(cc, this.commandOptions);\n if (response) {\n return pick(response, [\"day\", \"month\", \"year\"]);\n }\n }\n @validateArgs_TimeCCAPI_reportDate()\n public async reportDate(year: number, month: number, day: number): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.DateReport);\n const cc = new TimeCCDateReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n year,\n month,\n day,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n @validateArgs_TimeCCAPI_setTimezone()\n public async setTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetSet);\n const cc = new TimeCCTimeOffsetSet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n public async getTimezone(): Promise<MaybeNotKnown<DSTInfo>> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetGet);\n const cc = new TimeCCTimeOffsetGet({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n });\n const response = await this.host.sendCommand<TimeCCTimeOffsetReport>(cc, this.commandOptions);\n if (response) {\n return {\n standardOffset: response.standardOffset,\n dstOffset: response.dstOffset,\n startDate: response.dstStartDate,\n endDate: response.dstEndDate,\n };\n }\n }\n @validateArgs_TimeCCAPI_reportTimezone()\n public async reportTimezone(timezone: DSTInfo): Promise<SupervisionResult | undefined> {\n this.assertSupportsCommand(TimeCommand, TimeCommand.TimeOffsetReport);\n const cc = new TimeCCTimeOffsetReport({\n nodeId: this.endpoint.nodeId,\n endpointIndex: this.endpoint.index,\n standardOffset: timezone.standardOffset,\n dstOffset: timezone.dstOffset,\n dstStart: timezone.startDate,\n dstEnd: timezone.endDate,\n });\n return this.host.sendCommand(cc, this.commandOptions);\n }\n}\n@commandClass(CommandClasses.Time)\n@implementedVersion(2)\nexport class TimeCC extends CommandClass {\n declare ccCommand: TimeCommand;\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.Time, 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 // Synchronize the slave's time\n if (api.version >= 2) {\n ctx.logNode(node.id, {\n endpoint: this.endpointIndex,\n message: \"setting timezone information...\",\n direction: \"outbound\",\n });\n // Set the correct timezone on this node\n const timezone = getDSTInfo();\n await api.setTimezone(timezone);\n }\n // Remember that the interview is complete\n this.setInterviewComplete(ctx, true);\n }\n}\n// @publicAPI\nexport interface TimeCCTimeReportOptions {\n hour: number;\n minute: number;\n second: number;\n}\n@CCCommand(TimeCommand.TimeReport)\nexport class TimeCCTimeReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeReportOptions>) {\n super(options);\n this.hour = options.hour;\n this.minute = options.minute;\n this.second = options.second;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeReport {\n validatePayload(raw.payload.length >= 3);\n const hour = raw.payload[0] & 0b11111;\n const minute = raw.payload[1];\n const second = raw.payload[2];\n validatePayload(hour >= 0, hour <= 23, minute >= 0, minute <= 59, second >= 0, second <= 59);\n return new this({\n nodeId: ctx.sourceNodeId,\n hour,\n minute,\n second,\n });\n }\n public hour: number;\n public minute: number;\n public second: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n this.hour & 0b11111,\n this.minute,\n this.second,\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n time: `${this.hour.toString().padStart(2, \"0\")}:${this.minute\n .toString()\n .padStart(2, \"0\")}:${this.second.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeGet)\n@expectedCCResponse(TimeCCTimeReport)\nexport class TimeCCTimeGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCDateReportOptions {\n year: number;\n month: number;\n day: number;\n}\n@CCCommand(TimeCommand.DateReport)\nexport class TimeCCDateReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCDateReportOptions>) {\n super(options);\n this.year = options.year;\n this.month = options.month;\n this.day = options.day;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCDateReport {\n validatePayload(raw.payload.length >= 4);\n const year = raw.payload.readUInt16BE(0);\n const month = raw.payload[2];\n const day = raw.payload[3];\n validatePayload(month >= 1, month <= 12, day >= 1, day <= 31);\n return new this({\n nodeId: ctx.sourceNodeId,\n year,\n month,\n day,\n });\n }\n public year: number;\n public month: number;\n public day: number;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.from([\n // 2 bytes placeholder for year\n 0,\n 0,\n this.month,\n this.day,\n ]);\n this.payload.writeUInt16BE(this.year, 0);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n date: `${this.year.toString().padStart(4, \"0\")}-${this.month\n .toString()\n .padStart(2, \"0\")}-${this.day.toString().padStart(2, \"0\")}`,\n },\n };\n }\n}\n@CCCommand(TimeCommand.DateGet)\n@expectedCCResponse(TimeCCDateReport)\nexport class TimeCCDateGet extends TimeCC {\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetSetOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetSet)\n@useSupervision()\nexport class TimeCCTimeOffsetSet extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetSetOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeOffsetSet {\n validatePayload(raw.payload.length >= 9);\n const { standardOffset, dstOffset } = parseTimezone(raw.payload);\n const currentYear = new Date().getUTCFullYear();\n return new this({\n nodeId: ctx.sourceNodeId,\n standardOffset,\n dstOffset,\n dstStart: new Date(Date.UTC(currentYear, raw.payload[3] - 1, raw.payload[4], raw.payload[5])),\n dstEnd: new Date(Date.UTC(currentYear, raw.payload[6] - 1, raw.payload[7], raw.payload[8])),\n });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n// @publicAPI\nexport interface TimeCCTimeOffsetReportOptions {\n standardOffset: number;\n dstOffset: number;\n dstStart: Date;\n dstEnd: Date;\n}\n@CCCommand(TimeCommand.TimeOffsetReport)\nexport class TimeCCTimeOffsetReport extends TimeCC {\n public constructor(options: WithAddress<TimeCCTimeOffsetReportOptions>) {\n super(options);\n this.standardOffset = options.standardOffset;\n this.dstOffset = options.dstOffset;\n this.dstStartDate = options.dstStart;\n this.dstEndDate = options.dstEnd;\n }\n public static from(raw: CCRaw, ctx: CCParsingContext): TimeCCTimeOffsetReport {\n validatePayload(raw.payload.length >= 9);\n const { standardOffset, dstOffset } = parseTimezone(raw.payload);\n const currentYear = new Date().getUTCFullYear();\n const dstStartDate: Date = new Date(Date.UTC(currentYear, raw.payload[3] - 1, raw.payload[4], raw.payload[5]));\n const dstEndDate: Date = new Date(Date.UTC(currentYear, raw.payload[6] - 1, raw.payload[7], raw.payload[8]));\n return new this({\n nodeId: ctx.sourceNodeId,\n standardOffset,\n dstOffset,\n dstStart: dstStartDate,\n dstEnd: dstEndDate,\n });\n }\n public standardOffset: number;\n public dstOffset: number;\n public dstStartDate: Date;\n public dstEndDate: Date;\n public serialize(ctx: CCEncodingContext): Promise<Bytes> {\n this.payload = Bytes.concat([\n encodeTimezone({\n standardOffset: this.standardOffset,\n dstOffset: this.dstOffset,\n }),\n [\n this.dstStartDate.getUTCMonth() + 1,\n this.dstStartDate.getUTCDate(),\n this.dstStartDate.getUTCHours(),\n this.dstEndDate.getUTCMonth() + 1,\n this.dstEndDate.getUTCDate(),\n this.dstEndDate.getUTCHours(),\n ],\n ]);\n return super.serialize(ctx);\n }\n public toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n return {\n ...super.toLogEntry(ctx),\n message: {\n \"standard time offset\": `${this.standardOffset} minutes`,\n \"DST offset\": `${this.dstOffset} minutes`,\n \"DST start date\": formatDate(this.dstStartDate, \"YYYY-MM-DD\"),\n \"DST end date\": formatDate(this.dstEndDate, \"YYYY-MM-DD\"),\n },\n };\n }\n}\n@CCCommand(TimeCommand.TimeOffsetGet)\n@expectedCCResponse(TimeCCTimeOffsetReport)\nexport class TimeCCTimeOffsetGet extends TimeCC {\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -266,6 +266,7 @@ export declare class UserCodeCCExtendedUserCodeReport extends UserCodeCC {
|
|
|
266
266
|
persistValues(ctx: PersistValuesContext): boolean;
|
|
267
267
|
readonly userCodes: readonly UserCode[];
|
|
268
268
|
readonly nextUserId: number;
|
|
269
|
+
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
269
270
|
toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
|
|
270
271
|
}
|
|
271
272
|
export interface UserCodeCCExtendedUserCodeGetOptions {
|
|
@@ -274,7 +275,7 @@ export interface UserCodeCCExtendedUserCodeGetOptions {
|
|
|
274
275
|
}
|
|
275
276
|
export declare class UserCodeCCExtendedUserCodeGet extends UserCodeCC {
|
|
276
277
|
constructor(options: WithAddress<UserCodeCCExtendedUserCodeGetOptions>);
|
|
277
|
-
static from(
|
|
278
|
+
static from(raw: CCRaw, ctx: CCParsingContext): UserCodeCCExtendedUserCodeGet;
|
|
278
279
|
userId: number;
|
|
279
280
|
reportMore: boolean;
|
|
280
281
|
serialize(ctx: CCEncodingContext): Promise<Bytes>;
|
|
@@ -1692,6 +1692,30 @@ let UserCodeCCExtendedUserCodeReport = (() => {
|
|
|
1692
1692
|
}
|
|
1693
1693
|
userCodes;
|
|
1694
1694
|
nextUserId;
|
|
1695
|
+
serialize(ctx) {
|
|
1696
|
+
if (this.userCodes.length > 255) {
|
|
1697
|
+
throw new import_core.ZWaveError("An extended user code report can contain at most 255 codes", import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
1698
|
+
}
|
|
1699
|
+
const codes = this.userCodes.map((code) => {
|
|
1700
|
+
const userCode = import_shared.Bytes.from(code.userCode, "ascii");
|
|
1701
|
+
if (userCode.length > 15) {
|
|
1702
|
+
throw new import_core.ZWaveError("User codes must not be longer than 15 characters", import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
1703
|
+
}
|
|
1704
|
+
const buffer = import_shared.Bytes.concat([
|
|
1705
|
+
[0, 0, code.userIdStatus, userCode.length],
|
|
1706
|
+
userCode
|
|
1707
|
+
]);
|
|
1708
|
+
buffer.writeUInt16BE(code.userId, 0);
|
|
1709
|
+
return buffer;
|
|
1710
|
+
});
|
|
1711
|
+
this.payload = import_shared.Bytes.concat([
|
|
1712
|
+
[this.userCodes.length],
|
|
1713
|
+
...codes,
|
|
1714
|
+
[0, 0]
|
|
1715
|
+
]);
|
|
1716
|
+
this.payload.writeUInt16BE(this.nextUserId, this.payload.length - 2);
|
|
1717
|
+
return super.serialize(ctx);
|
|
1718
|
+
}
|
|
1695
1719
|
toLogEntry(ctx) {
|
|
1696
1720
|
const message = {};
|
|
1697
1721
|
for (const { userId, userIdStatus, userCode } of this.userCodes) {
|
|
@@ -1731,8 +1755,13 @@ let UserCodeCCExtendedUserCodeGet = (() => {
|
|
|
1731
1755
|
this.userId = options.userId;
|
|
1732
1756
|
this.reportMore = !!options.reportMore;
|
|
1733
1757
|
}
|
|
1734
|
-
static from(
|
|
1735
|
-
|
|
1758
|
+
static from(raw, ctx) {
|
|
1759
|
+
(0, import_core.validatePayload)(raw.payload.length >= 3);
|
|
1760
|
+
return new this({
|
|
1761
|
+
nodeId: ctx.sourceNodeId,
|
|
1762
|
+
userId: raw.payload.readUInt16BE(0),
|
|
1763
|
+
reportMore: !!(raw.payload[2] & 1)
|
|
1764
|
+
});
|
|
1736
1765
|
}
|
|
1737
1766
|
userId;
|
|
1738
1767
|
reportMore;
|