first commit
This commit is contained in:
121
README.md
Normal file
121
README.md
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
# Modbus to MQTT Bridge Service
|
||||||
|
|
||||||
|
A Python service that reads temperature and humidity data from a Modbus TCP server and publishes the data to an MQTT broker.
|
||||||
|
|
||||||
|
## 📁 Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
POE/
|
||||||
|
├── config.py # Configuration constants
|
||||||
|
├── sensor_bridge.py # Core logic for Modbus and MQTT operations
|
||||||
|
├── main.py # Entry point
|
||||||
|
├── requirements.txt # Python dependencies
|
||||||
|
├── README.md # This file
|
||||||
|
├── poe.py # Original single file (backup)
|
||||||
|
└── memory-bank/ # Memory bank directory
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### 1. Install Dependencies
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Configure Settings
|
||||||
|
Edit `config.py` to match your environment:
|
||||||
|
```python
|
||||||
|
# Modbus configuration
|
||||||
|
MODBUS_HOST = "10.84.48.153"
|
||||||
|
MODBUS_PORT = 505
|
||||||
|
|
||||||
|
# MQTT configuration
|
||||||
|
MQTT_BROKER = "mqtt.service.mesh"
|
||||||
|
MQTT_TOPIC = "Temperature_Humidity"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Run the Service
|
||||||
|
```bash
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Features
|
||||||
|
|
||||||
|
- **Modbus TCP Client**: Reads data from Modbus holding registers
|
||||||
|
- **MQTT Publisher**: Publishes sensor data to MQTT broker
|
||||||
|
- **Data Processing**: Converts raw sensor values to calibrated readings
|
||||||
|
- **Error Handling**: Robust error handling and retry mechanisms
|
||||||
|
- **Logging**: Comprehensive logging for monitoring and debugging
|
||||||
|
|
||||||
|
## 📈 Data Format
|
||||||
|
|
||||||
|
The service publishes JSON data to the MQTT topic:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"time": "2024-01-15 10:30:25",
|
||||||
|
"location": "Office",
|
||||||
|
"temperature": 23.5,
|
||||||
|
"humidity": 65.2
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Configuration
|
||||||
|
|
||||||
|
All configuration is centralized in `config.py`:
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
|-----------|-------------|---------|
|
||||||
|
| `MODBUS_HOST` | Modbus TCP server IP | "10.84.48.153" |
|
||||||
|
| `MODBUS_PORT` | Modbus TCP port | 505 |
|
||||||
|
| `MQTT_BROKER` | MQTT broker address | "mqtt.service.mesh" |
|
||||||
|
| `MQTT_TOPIC` | MQTT publish topic | "Temperature_Humidity" |
|
||||||
|
| `PUBLISH_INTERVAL` | Data publish interval (seconds) | 10 |
|
||||||
|
| `LOCATION` | Sensor location identifier | "Office" |
|
||||||
|
|
||||||
|
## 📡 Sensor Mapping
|
||||||
|
|
||||||
|
- **Register 0**: Temperature (raw value × 0.1 - 40)
|
||||||
|
- **Register 1**: Humidity (raw value × 0.1)
|
||||||
|
|
||||||
|
## 🛠️ Maintenance
|
||||||
|
|
||||||
|
### Running as a Service
|
||||||
|
|
||||||
|
For production deployment, consider running as a system service:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Example systemd service file
|
||||||
|
[Unit]
|
||||||
|
Description=Modbus MQTT Bridge
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=pi
|
||||||
|
WorkingDirectory=/path/to/POE
|
||||||
|
ExecStart=/usr/bin/python3 main.py
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
### Monitoring
|
||||||
|
|
||||||
|
The service provides comprehensive logging. Monitor the logs for:
|
||||||
|
- Connection status
|
||||||
|
- Data reading success/failure
|
||||||
|
- MQTT publish status
|
||||||
|
- Error conditions
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create a feature branch
|
||||||
|
3. Make your changes
|
||||||
|
4. Test thoroughly
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
## 📝 License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License.
|
Reference in New Issue
Block a user