MELCloud & MELCloud Home API for Node.js - v60.5.0
    Preparing search index...

    Class HomeBaseDeviceFacade<TData>Abstract

    Shared scaffolding for every Home device facade. Holds the API client + registry-resident model, exposes the common identity getters (id, name, rssi) and the cross-type getSignal passthrough, and provides the protected setting() lookup used by both the ATA and ATW facade subclasses.

    TData narrows the wrapped device payload (e.g. HomeAtaDeviceData for HomeDeviceAtaFacade) so subclasses see the device-type specific shape on model.data without unsafe casts.

    The base carries everything the types share — identity, availability, capabilities, power/standby, the telemetry passthroughs and the update pipeline; only what genuinely diverges between ATA and ATW (operation modes, setpoint vocabulary, report merging) lives in the subclass, reached through hooks like clampValues.

    Type Parameters

    • TData extends HomeDeviceData

      Wire-format device payload variant exposed on model.data, narrowed to the device-type-specific shape by each subclass.

    Hierarchy (View Summary)

    Implements

    Index
    errorMessage: null

    Home's /context flags a faulted unit (isInError) but carries no text for it — the wording lives in the unit's error log, a separate read — so the contract's message is null on this dialect.

    Connection-type discriminator, captured at construction (a physical device never changes type) so it stays readable on a pruned id — the Home counterpart of the Classic facades' type.

    • get capabilities(): TData["capabilities"]

      Static capability flags and ranges advertised by this device, narrowed to the device-type shape by TData.

      Returns TData["capabilities"]

      The capability descriptor.

    • get exists(): boolean

      Whether the underlying device still exists in the registry. Non-throwing introspection mirroring the Classic facades' exists: a consumer holding a cached facade can detect staleness without a try/catch.

      Returns boolean

      true while the registry still resolves the id.

    • get isAvailable(): boolean

      Whether MELCloud can still deliver writes to the unit. false means the wifi adapter lost its link to the cloud: writes are accepted but never delivered, and readings go stale. The /context isConnected flag only counts once it has read false for a full day: its negative side is unproven, and the persistence window makes a Classic-Offline-style tight-threshold boolean harmless (such a flag never stays false through a report cycle).

      Returns boolean

      false after a day of continuous disconnection.

    • get isConnected(): boolean

      The RAW /context isConnected flag, as the wire read it on the latest sync — exposed for comparison with what the official app shows, never as availability. Its positive side is live-probed (12/12 true on healthy units); its negative side is unproven, and a flag that flapped would grey a tile on every flap, which is why isAvailable — the contract consumers must act on — only flips after a day of continuous false. Independent of the streak: a unit one minute into a disconnection reads isConnected: false and isAvailable: true at once.

      Returns boolean

      The wire flag, verbatim.

    • get isInError(): boolean

      Whether the unit itself reports a fault — the /context isInError flag, which MELCloud relays from the unit.

      Returns boolean

      true while the unit reports a fault of its own.

    • get isOwner(): boolean

      Whether the current account owns this device rather than being a guest of it. Reports the structural origin only: false does not by itself prove a guest is barred from control (the BFF accepts guest writes on shared units).

      Returns boolean

      true when owned, false when shared with this account.

    • get power(): boolean

      Whether the unit is powered on. Independent of standby: a unit in standby is powered but idle.

      Returns boolean

      true when on, false when off.

    • get supportsOverheat(): boolean

      Whether this device can hold an overheat protection — the feature is ATA-only (the official app never offers it on ATW units).

      Returns boolean

      true on ATA devices.

    • Fetches energy telemetry as the normalized series — the projection of getEnergy that owns the wire dialect so consumers never decode it: each sample's UTC wall-clock stamp anchored as an epoch-ms instant, each value in kilowatt-hours whatever the device type (ATW interval buckets are kWh on the wire; the ATA cumulative measure is watt-hours, scaled here), samples in wire order. A garbled sample degrades field-by-field to null — never NaN, never a throw — and keeps its entry. The wire-verbatim bundle stays available on getEnergy.

      Parameters

      Returns Promise<Result<HomeEnergySeriesPoint[]>>

      The normalized samples, or a typed failure.

    • Fetches the error-log entries for this device, projected onto the cross-dialect shape: errorCode maps to code, errorReason to message when present, clearedTimestamp to clearedAt when cleared — each wall-clock stamp paired with its UTC-anchored epoch instant. The raw wire entries stay available on the API client.

      Returns Promise<Result<ErrorLogEntry[]>>

      The neutral entries (possibly empty), or a typed failure.

    • Reads the current frost-protection settings — the cross-dialect async contract shared with the Classic facades; the answer comes from the synced /context model, no wire call.

      Returns Promise<Result<ProtectionState | null>>

      The protection state, or null when never configured.

    • Reads the current holiday-mode window — the cross-dialect async contract shared with the Classic facades; the answer comes from the synced /context model, no wire call, both bounds projected onto the caller's clock.

      Returns Promise<Result<HolidayModeState | null>>

      The holiday-mode state, or null when never configured.

    • Fetches RSSI telemetry for this device over the given time window.

      Parameters

      • params: { from: string; to: string }

        Query window.

        • from: string

          ISO start timestamp (inclusive).

        • to: string

          ISO end timestamp (exclusive).

      Returns Promise<Result<HomeEnergyData>>

      The telemetry bundle, or a typed failure.

    • Updates this device's frost protection — the cross-dialect write contract shared with the Classic facades, bounds clamped into range.

      Parameters

      Returns Promise<void>

    • Updates this device's holiday-mode window — the cross-dialect write contract shared with the Classic facades; an enabled window's bounds are projected from the caller's clock onto the wire's UTC.

      Parameters

      Returns Promise<void>

    • Updates this device's overheat protection. ATA-only on the wire: on an ATW unit the write resolves without any wire call (the same silent drop the batch write applies to ATW ids).

      Parameters

      Returns Promise<void>

    • Powers the unit on or off. This is the unit-level master power (the Power setting, shown as the system on/off toggle in the app), defined at the base like the Classic side's updatePower — the contracts differ: this one resolves void and throws the typed transport error. Convenience wrapper over updateValues.

      Parameters

      • isOn: boolean = true

        true to power on, false to power off.

      Returns Promise<void>

    • Pushes a partial update to the device; rejects when values carries no defined value (an explicitly-undefined key counts as absent), otherwise overlays the per-type clampValues hook's clamped setpoints and forwards. Each subclass narrows the payload to its device-type shape.

      Parameters

      Returns Promise<void>

      NoChangesError when values carries no defined value.