ESPHome Trane CAN bus

I’ve been reverse-engineering the CAN bus on my Trane system and built an ESPHome component.

  • Full climate entity (heat, cool, auto, fan-only) with Home/Away/Sleep/Boost presets
  • Real-time sensors: compressor demand, outdoor coil temp, supply air temp, room temp, humidity, run time, active alarms
  • Bidirectional — can send setpoint and mode changes back to the SC360
  • Entities are split into logical sub-devices in HA: Thermostat, SC360 Controller, Air Handler, Heat Pump
  • Confirmed working on UX360 thermostat / SC360 controller with a variable-speed heat pump + gas aux

Hardware: M5Stack AtomS3 + M5Stack CAN bus module, powered from the system’s 24VAC supply via a small converter. Taps the four ComfortLink II bus wires (24VAC, H, L, GND) at the furnace.

Repo: GitHub - dewbot6/esphome-trane: Esphome Trane Canbus · GitHub

A note on the code: This project was developed with significant help from Claude (AI assistant) — both for decoding the CAN bus traffic and writing the ESPHome component code. I’m not a C++ or Python developer by trade, so while the logic has been carefully reviewed, there are likely mistakes or non-idiomatic patterns in the code. Pull requests and corrections are very welcome, and I’d encourage anyone using this to treat it as a starting point rather than production-ready code.

This is early — field decoding is still ongoing and I’ve only tested it on one system. If you have a ComfortLink II system and want to try it or contribute observations from your own CAN traffic, I’d love the help. Especially interested in hearing from anyone with different thermostat models (XL850, XL1050) or non-SC360 zone controllers.

Heavily inspired by the excellent esphome-econet project.