My house got a new HVAC system this summer. I noticed in the literature that it uses CAN bus for communication among the thermostat, controller, heat pump, and furnace.
There is a bit of information for installers to show wiring but nothing about the data on the bus itself.
Trane® Link UX360 Smart Thermostat Installation Guide page 8 gives some detail on the CAN bus wiring (wire colors)
CAN voltages are referenced to GND but none of the wires is labeled as GND.
Red measures as 27VAC relative to the body of the furnace which is presumably grounded. So: Red is power (but not good for microcontroller power!), while blue is GND. This is within the 18-30VAC range specified by the thermostat.
About 2.6VDC is measured from furnace body to DH/DL lines, within the 2-4V expected.
The connector
It appears to be a JST VHR-4N connector with 1.56mm pitch. The crimp contacts are SVH-21T-P1.1. Digikey has a MOQ of 100 for the latter.
I monitored the "DH" line with my scope. This seems a bit slow for canbus but it's what I measured:
- Bit time: 20µs
- Bit rate: 50kHz
I built a receiver from the MCP2351 featherwing, an ESP32-S3 Feather TFT, and the above-linked connectors. The DH/DL markings in the manual were accurate. And, I could sniff packets off my furnace's CANBUS.
I used the following simple program:
import time
import board, microcontroller, canio, digitalio, adafruit_mcp2515
mcp_can_spi = board.SPI()
mcp_can_cs = digitalio.DigitalInOut(board.D5)
mcp_can_int = digitalio.DigitalInOut(board.D6)
baudrate = 50_000
canbus = adafruit_mcp2515.MCP2515(mcp_can_spi, mcp_can_cs, baudrate=baudrate, silent=True)
listener = canbus.listen(timeout=30)
while True:
try:
msg = listener.receive()
if msg is not None:
data = " ".join("%02x" % b for b in msg.data)
print(f"Received message {msg.id=:8x} {data=}")
except Exception as e:
print(e)
Next, I need to actually log the messages and analyze them to find out what's going on.
Here are some manually transcribed messages I logged: (clearly I need to log them other than to the squintingly tiny TFT!)
msg.id = 420 data=00 00 00 00 28 00 msg_id = 4b0 data=00 00 01 04 00 msg.id = 318 data=00 60 22 3f ad 01 d0 01
This page (Trane furnace canbus) was last updated on November 12, 2025.