diff --git a/example/main.ts b/example/main.ts index 348fac0..4eb5d60 100644 --- a/example/main.ts +++ b/example/main.ts @@ -65,9 +65,10 @@ async function main() { client.emitter.on('statusChanged', (status) => { try { const device = devices.DevicesObj[status.deviceId]; - const watts = status.current !== undefined ? status.current * device.Voltage : undefined; + const watts = + status.current !== undefined && device.Voltage !== undefined ? status.current * device.Voltage : undefined; rootLogger.info( - `[${status.deviceId}] '${device.Name}' status changed: ${status.temperature}°C, ${status.humidity}%, ${watts ?? 'na'}W` + `[${status.deviceId}] '${device.Name ?? 'Unknown'}' status changed: ${status.temperature}°C, ${status.humidity}%, ${watts ?? 'na'}W` ); } catch (error) { rootLogger.error(error, `Error processing status update for device '${status.deviceId}'`); @@ -77,7 +78,9 @@ async function main() { client.emitter.on('setPointChanged', (change) => { try { const device = devices.DevicesObj[change.deviceId]; - rootLogger.info(`'${device.Name}' setpoint changed from ${change.previousSetPoint} to ${change.newSetPoint}`); + rootLogger.info( + `'${device.Name ?? 'Unknown'}' setpoint changed from ${change.previousSetPoint} to ${change.newSetPoint}` + ); } catch (error) { rootLogger.error(error, `Error processing setpoint update for device '${change.deviceId}'`); } @@ -86,7 +89,7 @@ async function main() { client.emitter.on('stateChanged', (change) => { try { const device = devices.DevicesObj[change.deviceId]; - rootLogger.info(change, `'${device.Name}' state changed.`); + rootLogger.info(change, `'${device.Name ?? 'Unknown'}' state changed.`); } catch (error) { rootLogger.error(error, `Error processing state update for device '${change.deviceId}'`); } @@ -96,7 +99,7 @@ async function main() { await Promise.all( Object.entries(devices.DevicesObj).map(async ([deviceId, device]) => { const serial = await client.getDeviceSerialNumber(deviceId); - rootLogger.info(`Serial number for device '${deviceId}' (${device.Name}): ${serial}`); + rootLogger.info(`Serial number for device '${deviceId}' (${device.Name ?? 'Unknown'}): ${serial}`); await client.startRealtimeUpdates(deviceId); }) diff --git a/src/types/rest/Devices.ts b/src/types/rest/Devices.ts index d189ff6..c89d972 100644 --- a/src/types/rest/Devices.ts +++ b/src/types/rest/Devices.ts @@ -10,9 +10,9 @@ export interface BrandInfo { /** Unique identifier for the brand */ Id: number; /** Remote control model number for the AC device */ - remoteModelNumber: string; + remoteModelNumber?: string; /** Original Equipment Manufacturer brand name */ - OEMBrand: string; + OEMBrand?: string; } /** @@ -56,55 +56,55 @@ export interface ModeObj { */ export interface DeviceBase { /** Button digital input configuration value */ - ButtonDI: number; + ButtonDI?: number; /** Maximum current rating as a string value */ - MaxCurrent: string; + MaxCurrent?: string; /** Device model identifier string */ Model: string; /** Button average value configuration */ - ButtonAVE: number; + ButtonAVE?: number; /** Operating voltage of the device */ - Voltage: number; + Voltage?: number; /** Button polling interval configuration */ - ButtonPolling: number; + ButtonPolling?: number; /** Minimum brightness level (0-100) */ - MinBrightness: number; + MinBrightness?: number; /** User-assigned device name */ - Name: string; + Name?: string; /** Button low power mode configuration */ - ButtonLowPower: number; + ButtonLowPower?: number; /** Type of heater controlled by the device */ - HeaterType: string; + HeaterType?: string; /** Button repeat delay configuration in milliseconds */ - ButtonRepeatDelay: number; + ButtonRepeatDelay?: number; /** Button repeat start delay configuration in milliseconds */ - ButtonRepeatStart: number; + ButtonRepeatStart?: number; /** Display animation style setting */ - Animation: string; + Animation?: string; /** Maximum brightness level (0-100) */ - MaxBrightness: number; + MaxBrightness?: number; /** Array of user IDs allowed to control this device */ - AllowedUsers: string[]; + AllowedUsers?: string[]; /** Current button state indicator */ - ButtonState: string; + ButtonState?: string; /** Home identifier that this device belongs to */ - Home: string; + Home?: string; /** Button sensitivity threshold configuration */ - ButtonThreshold: number; + ButtonThreshold?: number; /** Data format version used by the device */ - Format: string; + Format?: string; /** Time zone setting for the device */ - TimeZone: string; + TimeZone?: string; /** Unix timestamp of when device was last paired */ - LastPaired: number; + LastPaired?: number; /** Minimum temperature setpoint allowed */ - MinSetpoint: number; + MinSetpoint?: number; /** Current operating mode of the device */ - Mode: ModeObj; + Mode?: ModeObj; /** User ID of the device owner */ - Owner: string; + Owner?: string; /** Maximum temperature setpoint allowed */ - MaxSetpoint: number; + MaxSetpoint?: number; /** Unique device identifier */ Id: string; /** Optional zone assignment for the device */ diff --git a/src/types/rest/States.ts b/src/types/rest/States.ts index 1fad93e..a48c29b 100644 --- a/src/types/rest/States.ts +++ b/src/types/rest/States.ts @@ -13,43 +13,43 @@ export interface DeviceState { /** Overall timestamp for the device state */ Timestamp: number; /** Time the device has been on */ - OnTime: TimestampedValue; + OnTime?: TimestampedValue; /** Temperature set point */ - SetPoint: TimestampedValue; + SetPoint?: TimestampedValue; /** Display brightness level */ - Brightness: TimestampedValue; + Brightness?: TimestampedValue; /** Schedule mode setting */ - ScheduleMode: TimestampedValue; + ScheduleMode?: TimestampedValue; /** Hold time setting */ - HoldTime: TimestampedValue; + HoldTime?: TimestampedValue; /** Wi-Fi signal strength */ - Rssi: TimestampedValue; + Rssi?: TimestampedValue; /** Thermostat mode */ - TstatMode: TimestampedValue; + TstatMode?: TimestampedValue; /** Available heap memory */ - FreeHeap: TimestampedValue; + FreeHeap?: TimestampedValue; /** Sensor temperature reading */ - SensorTemp: TimestampedValue; + SensorTemp?: TimestampedValue; /** Current mode */ - Mode: TimestampedValue; + Mode?: TimestampedValue; /** Voltage measurement */ - Voltage: TimestampedValue; + Voltage?: TimestampedValue; /** Temperature corrected for calibration */ - CorrectedTemp: TimestampedValue; + CorrectedTemp?: TimestampedValue; /** Duty cycle percentage */ - Duty: TimestampedValue; + Duty?: TimestampedValue; /** Heat sink temperature */ - HeatSink: TimestampedValue; + HeatSink?: TimestampedValue; /** Time the device has been off */ - OffTime: TimestampedValue; + OffTime?: TimestampedValue; /** Connection status */ - Connected: TimestampedValue; + Connected?: TimestampedValue; /** Current consumption */ - Current: TimestampedValue; + Current?: TimestampedValue; /** Humidity reading */ - Humidity: TimestampedValue; + Humidity?: TimestampedValue; /** Lock status */ - Lock: TimestampedValue; + Lock?: TimestampedValue; /** Fan speed */ FanSpeed?: TimestampedValue; }