Skip to content

Verify a fixed ambient sensor isn't picking up heat from the charger itself #3

Description

@zebraengine

Context

With a fixed LAN ambient sensor deployed (Ecowitt gateway ingest, zebraengine/tesla-wall-connector#36), its readings take the top tier — they outrank the car sensor and the handle proxy, and the thermal model trusts them completely. That promotes sensor placement from an installation detail to a correctness concern.

The model's premise is handle_temp = ambient + rise. If the ambient sensor is close enough to the connector to be warmed by it, then measured "ambient" climbs whenever charging heats the surrounding air — which cancels out part of the very rise the model exists to measure.

Impact

Two failure modes, both quiet:

  • Derate under-prediction, in the unsafe direction. An inflated ambient during a charge shrinks the apparent rise, so the forecast under-estimates how hot the handle will actually get and the suggested cap comes in too high.
  • Corrupted degradation baseline. The per-segment fits feed the drift watch. A placement-induced rise suppression looks exactly like an install that is not degrading, so a genuine trend could be masked indefinitely.

How to check

No new instrumentation needed — fit_sessions() already records ambient_drift_c (measured ambient at the end of a load window minus the start) on every session fit, exposed via /api/thermal.

A positive ambient_drift_c is not on its own evidence of contamination: an uninsulated garage genuinely does warm over an afternoon charge, and that is real ambient change the model should be tracking. The tell is the time constant:

  • Real garage warming — slow (tens of minutes to hours), does not reverse when current stops.
  • Sensor contamination — tracks the handle closely on a scale of minutes, and collapses quickly once charging ends.

The per-sample ambient history is retained, so both can be checked directly against the handle trace for the same window rather than inferred from the aggregate.

Possible outcomes

  • Clean — document the placement guidance in the README so the next install gets it right by default: beside or below the cable run rather than above it (a hot handle's convective plume rises), a few feet of horizontal offset, close enough to share the connector's air mass but not close enough to be heated by it, and mounted with an air gap on a low-mass surface rather than pressed against thermal mass.
  • Contaminated — relocate, and consider surfacing this as an explicit diagnostic (e.g. flag fits whose ambient_drift_c correlates with charge current) so the failure is loud instead of silent.

Notes

Worth resolving before leaning on measured-ambient fits for degradation conclusions, since the corruption mode is specifically one that hides a real problem rather than inventing a false one.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions