odoo_mqtt/IMPLEMENTATION_PLAN.md
matthias.lotz d0ca48b3ef refactor(odoo): Registry-driven JSON Config (Phase 3)
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
2026-03-11 10:56:32 +01:00

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`