The RV Link Architecture

An end-to-end bridge from your RV’s physical control network to a modern, web-based interface. Decode status messages, create entities automatically, and send commands back to the coach—all with reliable, spec-compliant flows.

RV Link hardware and wiring overview

End-to-End Data Path

  1. Physical Layer (RV-C): The RV-C CAN bus carries messages between all the smart devices in your coach, like light controllers, tank sensors, and HVAC systems.
  2. CAN to MQTT Bridge: The RV Link hardware taps into this bus. A lightweight Home Assistant add-on reads every message and publishes it as a raw data packet to a central MQTT message broker.
  3. Node-RED Processing: The heart of RV Link, a Node-RED project, subscribes to the raw CAN data. A series of decoder functions parse these messages according to the RV-C specification, identifying the device and its status.
  4. Home Assistant Integration: Once decoded, Node-RED publishes two types of messages: a "config" message to tell Home Assistant a new device exists (MQTT Discovery), and ongoing "state" messages to update its status (e.g., "On," "75%," "Locked").
  5. User Interface: Home Assistant automatically creates entities for each discovered device, which you can then add to your dashboard for control and monitoring. When you tap a button in the app, the process happens in reverse, with Node-RED encoding your command into an RV-C message and sending it back to the bus.
Placeholder: A detailed architecture diagram showing the flow of data from the CAN bus to the Home Assistant UI would be highly effective here.

Core Software Components

CAN to MQTT Bridge Add-on

This custom Home Assistant add-on is a simple but crucial utility. It runs in the background, listening for raw data on the CAN bus and forwarding it to MQTT. It also subscribes to a specific MQTT topic, and any message it receives is immediately written back to the CAN bus.

  • Publishes raw CAN frames to the can/raw MQTT topic
  • Listens on the can/send topic to transmit frames back to the RV
  • Configurable for any CAN interface and bitrate

Node-RED Project

This is where the magic happens. The project is a collection of flows that receive the raw CAN data and turn it into meaningful information. It's responsible for decoding status messages and encoding commands.

  • Parses RV-C Data Group Numbers (DGNs) to identify devices
  • Uses MQTT Discovery to automatically create Home Assistant entities
  • Translates simple Home Assistant commands (e.g., "ON") into valid RV-C frames

MQTT Topics & Message Flow

RV Link uses a standardized set of MQTT topics to communicate between the bridge, Node-RED, and Home Assistant. This ensures reliability and makes troubleshooting straightforward.

From CAN Bus to Home Assistant

  1. Bridge Publishes: can/raw19FEDA8C#3AFF00FDFF2100FF
  2. Node-RED Decodes & Publishes Discovery: homeassistant/light/switch_5/config{"name": "Ceiling Light", ...} (retained)
  3. Node-RED Publishes State: homeassistant/light/switch_5/stateON

From Home Assistant to CAN Bus

  1. Home Assistant Publishes Command: homeassistant/light/switch_5/setOFF
  2. Node-RED Encodes & Publishes to Bridge: can/send19FEDA8C#3A0000FDFF2100FF
  3. Bridge Transmits: The raw frame is sent onto the RV-C CAN bus.

The exact topic names are generated dynamically based on the device type and instance number discovered on the bus.

Node-RED Flows & Decoders

The Node-RED project is organized by function with clear tabs for Status, Entities, Commands, and Config. Each decoder is a self-contained function node that adheres to the RV-C specification, making the system easy to extend.

Placeholder: Add screenshots of the actual Node-RED flows here, showing the visual data path from MQTT input to the various decoders.

Compatibility & Reliability

Device Coverage

RV Link targets standard RV-C devices and has been validated against real-world CAN captures from multiple manufacturers.

  • Control: Lights, Shades, Locks, Water Pump, Autofill
  • Monitor: Tanks, Batteries, Chargers, Inverters, Generators, ATS, HVAC

System Reliability

The architecture is designed for robustness, with features to ensure stability even after restarts or network interruptions.

  • Retained MQTT Messages: Home Assistant automatically rediscovers all devices after a reboot.
  • RV-C Address Claiming: The system properly negotiates a unique address on the CAN bus to avoid conflicts.
  • Stateless Encoders: Command functions are simple and non-blocking, ensuring responsive control.

For more background on RV-C and similar projects, see the excellent resources at myervin.com.

Ready to Dive In?