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

3.3 KiB

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