Phase 2.1 - Models: - ows.iot.event Model für Event-Logging - event_uid (unique constraint) für Duplikat-Prävention - event_type (session_started/updated/stopped/timeout/heartbeat) - payload_json mit auto-extraction (power_w, state) - Auto-Linking zu mqtt.device und mqtt.session - Processing-Status tracking - mqtt.device erweitert mit device_id (External ID für API) - Existing mqtt.session bereits perfekt strukturiert Phase 2.2 - REST API Controller: - GET /ows/iot/config - Returns aktive Devices mit session_config als JSON - Public auth (später API-Key optional) - POST /ows/iot/event - JSON-RPC Format (Odoo type='json') - Schema-Validation (required: event_uid, event_type, device_id, timestamp) - Duplikat-Check: 409 Conflict für idempotency - Auto-Processing: Session create/update/complete - Response codes: 201/409/400/500 Phase 2.3 - Bridge OdooClient: - Echte REST API Implementation - get_config(): GET /ows/iot/config - send_event(): POST /ows/iot/event (JSON-RPC) - Duplicate handling (409 = success) - HTTP Session mit requests library - config.py: OdooConfig mit base_url, database, username, api_key - main.py: Conditional OdooClient/MockOdooClient based on use_mock Testing Guide: - PHASE2_TESTING.md mit kompletter Anleitung - Manuelle API Tests (curl examples) - Integration Test Steps (Odoo + Mosquitto + Bridge) - Success Criteria Checklist Bereit für Phase 2.4 Integration Testing! |
||
|---|---|---|
| .. | ||
| controllers | ||
| iot_bridge | ||
| models | ||
| python_prototype | ||
| security | ||
| services | ||
| tests | ||
| views | ||
| __init__.py | ||
| __manifest__.py | ||
| FEATURE_REQUEST_OPEN_WORKSHOP_MQTT_IoT.md | ||
| IMPLEMENTATION_PLAN.md | ||
| PHASE2_TESTING.md | ||
| README.md | ||
| run-tests.sh | ||
| test-direct.sh | ||
| test-output.txt | ||
| TODO.md | ||
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