ESP32 comes with integrated CAN Bus controller. ESPHome provides low-level support for it (sending / receiving messages from the bus), but it is not able (yet) to automatically expose entities to HomeAssistant over CAN.
This project tries to fill the gap and provides tools for easy exposing ESPHome entities to Home Assistant over CAN Bus:
can2mqtt
bridge exposing ESPHome CANopen entities onto MQTT topics. It follows MQTT Discovery protocol, so entities appear automatically in HomeAssistant.sensor
, binary_sensor
, switch
and cover
. Entity metadata is also published in Object Dictionary enabling autodiscovery.ESP32 board flashed with ESPHome firmware and configured esphome-canopen external component.
There is also esphome-canbus-proxy project turning ESP32 S3/C3 device into USB-CAN interface, with dedicated python-can driver (it is also possible to install esphome-canbus-proxy
component on one of existing ESP32 CANOpen nodes).
$ python3 -m venv venv
$ venv/bin/pip install git+https://github.com/mrk-its/can2mqtt
$ venv/bin/can2mqtt --help
usage: can2mqtt [-h] [-s MQTT_SERVER] [-i INTERFACE] [-c CHANNEL] [-b BITRATE] [-l LOG_LEVEL] [-t MQTT_TOPIC_PREFIX]
CAN to MQTT converter
options:
-h, --help show this help message and exit
-s MQTT_SERVER, --mqtt-server MQTT_SERVER
-i INTERFACE, --interface INTERFACE
-c CHANNEL, --channel CHANNEL
-b BITRATE, --bitrate BITRATE
-l LOG_LEVEL, --log-level LOG_LEVEL
-t MQTT_TOPIC_PREFIX, --mqtt-topic-prefix MQTT_TOPIC_PREFIX
and run it with proper MQTT server / CAN interface configuration. MQTT server can be provided as -s
argument or
included in python-can configuration file, like:
$ cat ~/can.conf
[default]
interface = seeedstudio
channel = /dev/ttyUSB1
bitrate = 500000
mqtt_server = 192.168.1.200
$ venv/bin/can2mqtt -l DEBUG
If CAN Bus communication is working properly you should see on stdout received CAN frames and data published to MQTT topics.
In HomeAssistant you should see new entities like switch.can_001_02