From 7858996d0f6bd13530d0af3b2091a4d3ec485ae8 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Fri, 5 Dec 2025 15:42:41 +0100 Subject: [PATCH] car outlet adjusted 5 --- apps/abstraction/transformation.py | 57 ++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 18 deletions(-) diff --git a/apps/abstraction/transformation.py b/apps/abstraction/transformation.py index 740080e..3537c26 100644 --- a/apps/abstraction/transformation.py +++ b/apps/abstraction/transformation.py @@ -431,27 +431,48 @@ def _transform_three_phase_powermeter_hottis_pv_modbus_to_abstract(payload: str) """Transform hottis_pv_modbus three_phase_powermeter payload to abstract format. Transformations: - - Direct mapping of all power meter fields - - Example: - - hottis_pv_modbus: {'energy': 123.45, 'total_power': 1500.0, 'phase1_power': 500.0, ...} - - Abstract: {'energy': 123.45, 'total_power': 1500.0, 'phase1_power': 500.0, ...} + - Map vendor field names to abstract field names + - totalImportEnergy -> energy + - powerL1/powerL2/powerL3 -> phase1_power/phase2_power/phase3_power + - voltageL1/voltageL2/voltageL3 -> phase1_voltage/phase2_voltage/phase3_voltage + - currentL1/currentL2/currentL3 -> phase1_current/phase2_current/phase3_current + - Sum of powerL1..3 -> total_power """ - payload = json.loads(payload) + data = json.loads(payload) + + # Helper to read numeric values uniformly as float + def _get_float(key: str, default: float = 0.0) -> float: + return float(data.get(key, default)) + + # Read all numeric values via helper for consistent error handling + phase1_power = _get_float("powerL1") + phase2_power = _get_float("powerL2") + phase3_power = _get_float("powerL3") + + phase1_voltage = _get_float("voltageL1") + phase2_voltage = _get_float("voltageL2") + phase3_voltage = _get_float("voltageL3") + + phase1_current = _get_float("currentL1") + phase2_current = _get_float("currentL2") + phase3_current = _get_float("currentL3") + + energy = _get_float("totalImportEnergy") + abstract_payload = { - "energy": payload.get("energy", 0.0), - "total_power": payload.get("total_power", 0.0), - "phase1_power": payload.get("phase1_power", 0.0), - "phase2_power": payload.get("phase2_power", 0.0), - "phase3_power": payload.get("phase3_power", 0.0), - "phase1_voltage": payload.get("phase1_voltage", 0.0), - "phase2_voltage": payload.get("phase2_voltage", 0.0), - "phase3_voltage": payload.get("phase3_voltage", 0.0), - "phase1_current": payload.get("phase1_current", 0.0), - "phase2_current": payload.get("phase2_current", 0.0), - "phase3_current": payload.get("phase3_current", 0.0), + "energy": energy, + "total_power": phase1_power + phase2_power + phase3_power, + "phase1_power": phase1_power, + "phase2_power": phase2_power, + "phase3_power": phase3_power, + "phase1_voltage": phase1_voltage, + "phase2_voltage": phase2_voltage, + "phase3_voltage": phase3_voltage, + "phase1_current": phase1_current, + "phase2_current": phase2_current, + "phase3_current": phase3_current, } - + return abstract_payload