A bidirectional, configurable bridge between CAN-Bus and MQTT with flexible data conversion modes.
can2mqtt is a Rust-based bridge that connects CAN-Bus networks to MQTT brokers, enabling bidirectional communication between industrial/automotive CAN systems and IoT messaging protocols. It solves the problem of integrating legacy CAN devices into modern IoT ecosystems by mapping CAN IDs to MQTT topics with configurable data conversion.
Developers and engineers working with industrial automation, automotive systems, or IoT projects that need to interface CAN-Bus devices with MQTT-based messaging infrastructure.
Developers choose can2mqtt for its simplicity, configurability, and extensibility—it provides a lightweight, self-contained solution with flexible data conversion modes and the ability to add custom converters without complex dependencies.
CAN-Bus -- MQTT bridge: bidirectional, configurable and extendable
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Supports full two-way communication with optional unidirectional modes, allowing tailored integration for specific use cases as shown in the direction mode settings.
Uses a straightforward CSV file to map CAN IDs to MQTT topics, making setup quick and human-readable without complex programming.
Allows users to implement custom conversion modes in Rust by following the template in the README, providing adaptability for unique data formats.
Offers statically linked binaries with no dependencies, easy to deploy on embedded systems like Raspberry Pi, as demonstrated in the installation instructions.
Requires setting up socket-can interfaces, which can be challenging on non-Linux systems or with specific hardware, as admitted in the 'How do I get a socket-can interface?' section.
Only includes basic conversion modes; advanced data handling necessitates custom Rust development, adding overhead for non-standard use cases.
Relies on a static CSV file that must be edited and reloaded for changes, lacking dynamic or programmatic configuration options for real-time adjustments.