- Created test_mqtt_mocked.py with unittest.mock (following OCA patterns) - Old tests with real MQTT broker hang in TransactionCase tearDown - Created run-tests.sh following OCA/oca-ci best practices - TODO: Find proper way to test MQTT with background threads in Odoo - TODO: Either fully mock or use different test approach (not TransactionCase) |
||
|---|---|---|
| .. | ||
| models | ||
| python_prototype | ||
| security | ||
| services | ||
| tests | ||
| views | ||
| __init__.py | ||
| __manifest__.py | ||
| FEATURE_REQUEST_OPEN_WORKSHOP_MQTT_IoT.md | ||
| README.md | ||
| run-tests.sh | ||
Open Workshop MQTT
MQTT IoT Device Integration for Odoo 18
Features
- ✅ MQTT Broker Connection - Connect to external MQTT brokers (Mosquitto, etc.)
- ✅ Device Management - Configure and monitor IoT devices
- ✅ Session Tracking - Automatic runtime session detection
- ✅ Flexible Parsers - Support for Shelly PM Mini G3, Tasmota, Generic JSON
- ✅ Session Strategies - Power threshold, Last Will Testament, Manual control
- ✅ Analytics - Pivot tables and graphs for runtime analysis
- ✅ Auto-Reconnect - Exponential backoff on connection loss
- ✅ Message Logging - Debug log for MQTT messages
Installation
-
Install Python dependencies:
pip install paho-mqtt -
Install the module in Odoo:
- Apps → Update Apps List
- Search for "Open Workshop MQTT"
- Click Install
Quick Start
-
Create MQTT Connection
- MQTT → Connections → Create
- Enter broker details (host, port, credentials)
- Click "Test Connection" then "Start"
-
Add Device
- MQTT → Devices → Create
- Select connection
- Configure device ID and topic pattern
- Choose parser type (Shelly, Tasmota, etc.)
- Set session detection strategy
-
Monitor Sessions
- MQTT → Sessions
- View runtime analytics in Pivot/Graph views
Session Detection Strategies
Power Threshold (Recommended)
- Dual threshold detection (standby/working)
- Configurable debounce timers
- Timeout detection
- Reference:
python_prototype/session_detector.py
Last Will Testament
- Uses MQTT LWT for offline detection
- Immediate session end on device disconnect
Manual
- Start/stop sessions via buttons or MQTT commands
Configuration Example
Shelly PM Mini G3:
{
"standby_threshold_w": 20,
"working_threshold_w": 100,
"start_debounce_s": 3,
"stop_debounce_s": 15,
"message_timeout_s": 20
}
Optional: Maintenance Integration
Install open_workshop_mqtt_maintenance (separate module) to link MQTT devices to maintenance.equipment.
Technical Reference
See python_prototype/ directory for:
- Implementation reference
- Test suite (pytest)
- Session detection logic
- MQTT client implementation
Support
- Documentation: See
python_prototype/README.md - Issues: GitHub Issues
- Tests:
pytest python_prototype/tests/ -v
License
LGPL-3