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
3.3 KiB
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:
- Neue Parser erfordern Odoo-Code-Änderungen
strategy_configiststore=Truecomputed → aktualisiert sich nicht live im Formular- 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[].defaultals Basis für Odoo-onchangecore/device_manager.py: liestparser_configdict stattstrategy_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ülltparser_config_compute_strategy_config: entfällt komplett- View: ein
ace-Widget fürparser_config, alle parser-spezifischen Gruppen weg
Workflow für neuen Parser (Zielzustand)
- Bridge:
parsers/my_parser.py+ Eintrag inregistry.py - Odoo: 1 Zeile in
_PARSER_SELECTION odoo -u open_workshop_mqtt(wegen Selection-Änderung, aber keine neuen DB-Felder)
3) Offene Punkte (nach Phase 3)
- Optional: Performance-/Batching-Themen (
iot_bridge/OPTIMIZATION_PLAN.mdPhase 5) - Optional: OWL-Widget das
parser_configals Formular rendert (Schema aus Bridge-Registry) - 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