Compare commits

...

2 Commits

Author SHA1 Message Date
0ca59896ad car outlet adjusted 6
All checks were successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
2025-12-05 15:46:25 +01:00
7858996d0f car outlet adjusted 5
All checks were successful
ci/woodpecker/tag/build/5 Pipeline was successful
ci/woodpecker/tag/build/4 Pipeline was successful
ci/woodpecker/tag/build/6 Pipeline was successful
ci/woodpecker/tag/namespace Pipeline was successful
ci/woodpecker/tag/config Pipeline was successful
ci/woodpecker/tag/build/2 Pipeline was successful
ci/woodpecker/tag/build/1 Pipeline was successful
ci/woodpecker/tag/build/3 Pipeline was successful
ci/woodpecker/tag/deploy/5 Pipeline was successful
ci/woodpecker/tag/deploy/3 Pipeline was successful
ci/woodpecker/tag/deploy/4 Pipeline was successful
ci/woodpecker/tag/deploy/2 Pipeline was successful
ci/woodpecker/tag/deploy/1 Pipeline was successful
ci/woodpecker/tag/ingress Pipeline was successful
2025-12-05 15:42:41 +01:00
2 changed files with 40 additions and 19 deletions

View File

@@ -431,25 +431,46 @@ def _transform_three_phase_powermeter_hottis_pv_modbus_to_abstract(payload: str)
"""Transform hottis_pv_modbus three_phase_powermeter payload to abstract format. """Transform hottis_pv_modbus three_phase_powermeter payload to abstract format.
Transformations: Transformations:
- Direct mapping of all power meter fields - Map vendor field names to abstract field names
- totalImportEnergy -> energy
Example: - powerL1/powerL2/powerL3 -> phase1_power/phase2_power/phase3_power
- hottis_pv_modbus: {'energy': 123.45, 'total_power': 1500.0, 'phase1_power': 500.0, ...} - voltageL1/voltageL2/voltageL3 -> phase1_voltage/phase2_voltage/phase3_voltage
- Abstract: {'energy': 123.45, 'total_power': 1500.0, 'phase1_power': 500.0, ...} - 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 = { abstract_payload = {
"energy": payload.get("energy", 0.0), "energy": energy,
"total_power": payload.get("total_power", 0.0), "total_power": phase1_power + phase2_power + phase3_power,
"phase1_power": payload.get("phase1_power", 0.0), "phase1_power": phase1_power,
"phase2_power": payload.get("phase2_power", 0.0), "phase2_power": phase2_power,
"phase3_power": payload.get("phase3_power", 0.0), "phase3_power": phase3_power,
"phase1_voltage": payload.get("phase1_voltage", 0.0), "phase1_voltage": phase1_voltage,
"phase2_voltage": payload.get("phase2_voltage", 0.0), "phase2_voltage": phase2_voltage,
"phase3_voltage": payload.get("phase3_voltage", 0.0), "phase3_voltage": phase3_voltage,
"phase1_current": payload.get("phase1_current", 0.0), "phase1_current": phase1_current,
"phase2_current": payload.get("phase2_current", 0.0), "phase2_current": phase2_current,
"phase3_current": payload.get("phase3_current", 0.0), "phase3_current": phase3_current,
} }
return abstract_payload return abstract_payload

View File

@@ -801,6 +801,6 @@ devices:
cap_version: "three_phase_powermeter@1.0.0" cap_version: "three_phase_powermeter@1.0.0"
technology: hottis_modbus technology: hottis_modbus
topics: topics:
state: "caroutlet/powermeter" state: "IoT/Cat/Values"