Ersetzt alle parser-spezifischen Einzelfelder durch ein einziges parser_config (fields.Json / jsonb) – neuer Parser = Bridge + 1 Zeile. Entfernt (Odoo, DB): power_on_threshold_w, active_work_threshold_w startup_delay_s, shutdown_delay_s, message_timeout_s dummy_pulse_count, dummy_pulse_debounce_ms, dummy_reset_interval_min strategy_config (computed Text) session_strategy Neu (Odoo, DB): parser_config (fields.Json / jsonb) Geändert: _onchange_parser_type holt Defaults via GET /parsers aus Bridge-Registry, kein parser-spezifischer if/elif mehr _compute_strategy_config entfällt komplett _build_bridge_config liest parser_config direkt View: alle parser-spezifischen Gruppen weg, ein ace-Widget iot_api.py: strategy_config -> parser_config IMPLEMENTATION_PLAN.md: Phase 3 dokumentiert Bridge: unverändert (session_config API bleibt, 63/63 Tests grün) DB: parser_config jsonb-Spalte, alle alten Spalten entfernt
89 lines
3.3 KiB
Markdown
89 lines
3.3 KiB
Markdown
# Implementation Plan (Konsolidiert)
|
|
|
|
**Stand:** 2026-03-11
|
|
**Status:** In Betrieb, laufende Optimierung
|
|
|
|
## 1) Erreichte Ergebnisse
|
|
|
|
### Architektur
|
|
- IoT-Bridge als eigenständiger Service (`iot_bridge/`)
|
|
- Odoo-Addon als fachliche Integrationsschicht (`open_workshop_mqtt`)
|
|
- Push-Config Odoo → Bridge über `POST /config`
|
|
- Event-Flow Bridge → Odoo über `POST /ows/iot/event` (JSON-RPC)
|
|
- Dynamische Parser-Registry in der Bridge (`parsers/registry.py`)
|
|
- E2E-Pipeline vollständig getestet (device_online → session → billing → device_offline)
|
|
|
|
### Qualität & Stabilität
|
|
- Type-Safety und Logging-Harmonisierung umgesetzt
|
|
- Retry-/Fehlerbehandlung für Odoo-Delivery ausgebaut
|
|
- Unit- und Integration-Tests erweitert (63/63 grün)
|
|
- Bridge-Dokumentation konsolidiert
|
|
|
|
---
|
|
|
|
## 2) Nächste Phase: Registry-driven JSON Config (Phase 3)
|
|
|
|
### Motivation
|
|
|
|
Die bisherige Implementierung hat pro Parser je **5 Änderungsstellen**:
|
|
Bridge `registry.py` → Odoo `mqtt_device.py` (Felder) → `_compute_strategy_config` (Branch) →
|
|
`_onchange_parser_type` (Defaults) → View (neue Gruppe) → `odoo -u` (DB-Migration).
|
|
|
|
Das skaliert nicht. Drei Probleme:
|
|
1. Neue Parser erfordern Odoo-Code-Änderungen
|
|
2. `strategy_config` ist `store=True` computed → aktualisiert sich nicht live im Formular
|
|
3. Parser-spezifische DB-Spalten (Flat Wide Table) erfordern Migrationen
|
|
|
|
### Zielarchitektur
|
|
|
|
```
|
|
Bridge registry.py <-- Source of Truth für Schema + Defaults
|
|
|
|
|
v
|
|
GET /parsers/<type> <-- Odoo fragt Defaults beim onchange
|
|
|
|
|
v
|
|
parser_config (fields.Json) <-- ein JSON-Feld in Odoo, für alle Parser
|
|
|
|
|
v
|
|
POST /config <-- Bridge bekommt parser_config direkt
|
|
```
|
|
|
|
### Was sich ändert
|
|
|
|
**Bridge (`iot_bridge`):**
|
|
- `registry.py`: bleibt SoT, `parameters[].default` als Basis für Odoo-onchange
|
|
- `core/device_manager.py`: liest `parser_config` dict statt `strategy_config`-Text
|
|
- Kein weiterer Bridge-Umbau nötig
|
|
|
|
**Odoo (`open_workshop_mqtt`):**
|
|
- **Entfernt:** alle parser-spezifischen Felder:
|
|
`power_on_threshold_w`, `active_work_threshold_w`, `startup_delay_s`,
|
|
`shutdown_delay_s`, `message_timeout_s`, `dummy_pulse_count`,
|
|
`dummy_pulse_debounce_ms`, `dummy_reset_interval_min`, `strategy_config`
|
|
- **Neu:** `parser_config = fields.Json(default=dict)`
|
|
- **Bleibt:** `parser_type`, `topic_pattern`, `device_id`, `billing_interval_min`
|
|
- `_onchange_parser_type`: holt Defaults aus Bridge-Registry, befüllt `parser_config`
|
|
- `_compute_strategy_config`: entfällt komplett
|
|
- View: ein `ace`-Widget für `parser_config`, alle parser-spezifischen Gruppen weg
|
|
|
|
### Workflow für neuen Parser (Zielzustand)
|
|
|
|
1. **Bridge:** `parsers/my_parser.py` + Eintrag in `registry.py`
|
|
2. **Odoo:** 1 Zeile in `_PARSER_SELECTION`
|
|
3. `odoo -u open_workshop_mqtt` (wegen Selection-Änderung, aber **keine neuen DB-Felder**)
|
|
|
|
---
|
|
|
|
## 3) Offene Punkte (nach Phase 3)
|
|
|
|
1. Optional: Performance-/Batching-Themen (`iot_bridge/OPTIMIZATION_PLAN.md` Phase 5)
|
|
2. Optional: OWL-Widget das `parser_config` als Formular rendert (Schema aus Bridge-Registry)
|
|
3. Kontinuierliche Doku-Pflege nach "Source-of-Truth"-Prinzip
|
|
|
|
## 4) Referenzen
|
|
|
|
- Bridge-Architektur: `iot_bridge/ARCHITECTURE.md`
|
|
- Bridge-Entwicklung: `iot_bridge/DEVELOPMENT.md`
|
|
- Odoo-Addon API: `extra-addons/open_workshop/open_workshop_mqtt/API.md`
|