Documentation

HVAC Effort Table Architecture

The Effort Table (EffortTable.java) defines a fixed, 11-column grid representing vehicle HVAC effort from maximum cooling through off to maximum heating:

C5  C4  C3  C2  C1   0   W1  W2  W3  W4  W5

The scale is absolute — it measures the physical effort the vehicle is expending, rather than a relative delta from initial vehicle startup.

Drive Assist Comfort View - Comfort Ruler UI Figure 1: Live Comfort Ruler on the Geely EX2 IHU629G touchscreen. The driver interacts with the absolute effort scale (Warmer / Cooler buttons and center ruler), translating thermal comfort into fan, temperature setpoint, and AC compressor commands with dynamic ambient weather sliding.


1. Column Model & Levers

Each column in the table configures five distinct HVAC control levers:

Lever Field / Property Description
Power HVAC_POWER_ON Binary master power. Level 0 is strictly OFF. Levels C1..C5 and W1..W5 are ON.
Machine (AC) HVAC_AC_ON Engages compressor for cooling or heat pump for heating. False in free ambient columns.
Setpoint HVAC_TEMPERATURE_SET Target cabin temperature (°C). Active when machine = true, NaN when off.
Fan Speed HVAC_FAN_SPEED Blower intensity: [1, 2, 4, 6, 8] across levels 1 to 5.
Airflow Direction HVAC_FAN_DIRECTION Distribution mask: DIR_FACE (1), DIR_FEET (2), DIR_FACE_FEET (3), DIR_GLASS (4), or DIR_GLASS_FEET (6).
Recirculation HVAC_RECIRC_ON Cabin air recirculation. Used as an intensity lever on cooling; restricted on heating.

Pinned Extremes vs. Sliding Middle


2. Weather Sliding & Free Columns

When outside air can comfortably assist, lower effort columns use fresh air without running the compressor (machine = false):

freeColumns(outC, coldSide)

Cold Side (C1..C5)

Warm Side (W1..W5)


3. Airflow Direction & Recirculation Strategy

The airflow path and recirculation state are engineered to maximize passenger comfort and prevent glass fogging:

Airflow Direction

Recirculation Logic


4. State Fitting Algorithm (fit)

When physical OEM controls or third-party apps alter HVAC settings, EffortTable.fit() maps the vehicle state back to the nearest column:

\[\text{Effort} = \text{AllOut} - \max_{\text{levers}}(\text{steps to reach all-out value})\]

5. Automatic Re-sliding Guards

As ambient outside temperature changes, ComfortRuler re-slides the table to update recipes while keeping the driver’s selected effort level (level) steady.

To avoid erratic changes, an automatic re-slide only occurs when all of the following conditions are met:

  1. Drift Magnitude: Outside temperature drifts by $\ge 2.0^\circ\text{C}$ (DRIFT_C) from the table’s build temperature.
  2. Sustained Duration: The temperature shift persists continuously for $\ge 10\text{ minutes}$ (DRIFT_MS) to ignore tunnels, stoplights, or brief thermal pockets.
  3. Quiet Period: No UI taps have occurred within the last 60 seconds (QUIET_AFTER_TAP_MS).
  4. Exact Column Match: The vehicle must not be in an approximate state (approx == false). If a driver adjusted a lever manually, automatic re-sliding is suspended so it never overrides manual intent.

[!NOTE] User Taps Bypass Timers: When the driver taps Cool or Warm, the ruler immediately checks if ambient temperature has drifted by $\ge 2.0^\circ\text{C}$ and rebuilds the table instantly, ensuring immediate user actions always reflect current weather.