Last Code Revision Date: 03-Sep-2025
This project bridges Modbus TCP/IP devices and MQTT brokers, publishing Modbus register values as JSON payloads to main MQTT topics for each data type. It is built with the pymodbus
and paho-mqtt
libraries and is designed for flexible, custom use cases.
Package | Version | Description |
---|---|---|
pymodbus | 3.11.1 | Modbus protocol implementation |
paho-mqtt | 2.1.0 | MQTT client library for Python |
config.py
modbus-mqtt-publisher
├── src
│ ├── main.py # Main application logic
│ ├── modbus_client.py # Modbus TCP client wrapper
│ ├── mqtt_publisher.py # MQTT publisher with auto-reconnect
│ └── config.py # User configuration for Modbus/MQTT/topics/interval
├── requirements.txt # Python dependencies
├── README.md # Project documentation
└── .gitignore # Version control ignore file
git clone <repository-url>
cd modbus-mqtt-publisher
pip install -r requirements.txt
Edit src/config.py
to set:
Example:
MODBUS_READ_CONFIG = {
"holding_registers": {
"addresses": [0, 1, 2, 5, 6, 7],
"mqtt_topic": "modbus/holding_registers"
},
"coils": {
"addresses": [0, 2, 4],
"mqtt_topic": "modbus/coils"
}
}
UPDATE_INTERVAL = 5 # seconds
Start the publisher:
python src/main.py
Example MQTT payload for holding registers:
{
"type": "holding_registers",
"values": {
"0": 123,
"1": 456,
"2": 789,
"5": 101,
"6": 202,
"7": 303
}
}
modbus/holding_registers
, modbus/coils
) and verify published JSON payloads.MODBUS_READ_CONFIG
as needed).34.03$