Skip to content

daily log data: fix units#3379

Merged
LKuemmel merged 5 commits into
masterfrom
fix_energy_mix
May 21, 2026
Merged

daily log data: fix units#3379
LKuemmel merged 5 commits into
masterfrom
fix_energy_mix

Conversation

@LKuemmel
Copy link
Copy Markdown
Contributor

@LKuemmel LKuemmel commented May 21, 2026

"energy_imported", "energy_exported", "power_average", "power_imported", "power_exported" sind in kWh bzw kW entgegen der üblichen Wh bzw W. Um die Schnittstelle konsistent zu halten, wird vor dem Publishen im Command eine Legacy-Anpassung der Einheiten durchgeführt.

@LKuemmel LKuemmel changed the title fix units daily log data: fix units May 21, 2026
@LKuemmel LKuemmel requested a review from Copilot May 21, 2026 10:58
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a “legacy” unit conversion step when publishing daily/monthly/yearly log payloads to MQTT, and refactors existing log testdata into pytest fixtures to support updated integration/unit tests.

Changes:

  • Added convert_legacy_units() and applied it when publishing daily/monthly/yearly logs in Command.
  • Refactored process_log_testdata.py from module-level dicts into pytest fixtures and adjusted integration tests accordingly.
  • Added a Command.getDailyLog publishing test with new fixture-based expected payload.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/helpermodules/measurement_logging/process_log.py Adds convert_legacy_units() (unit conversion) and replaces prior large comment block with a new sample payload comment.
packages/helpermodules/measurement_logging/process_log_testdata.py Converts static dict testdata into pytest fixtures.
packages/helpermodules/measurement_logging/process_log_integration_test.py Updates tests to use fixture-based testdata via pytest_plugins.
packages/helpermodules/command.py Applies convert_legacy_units() when publishing daily/monthly/yearly logs.
packages/helpermodules/command_test.py Adds a test asserting published daily-log payload after unit conversion; registers fixture plugins.
packages/helpermodules/command_test_data.py Adds fixture containing expected converted daily-log payload for Command test.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +166 to +168
for value in ("energy_imported", "energy_exported", "power_average", "power_imported", "power_exported"):
if value in entry[type][module].keys():
entry[type][module][value] = entry[type][module][value] / 1000
Comment on lines +161 to +171
for entry in data["entries"]:
for type in ("bat", "counter", "cp", "pv", "sh", "hc"):
if type in entry:
for module in entry[type].keys():
try:
for value in ("energy_imported", "energy_exported", "power_average", "power_imported", "power_exported"):
if value in entry[type][module].keys():
entry[type][module][value] = entry[type][module][value] / 1000
except KeyError:
log.exception(
f"Fehler beim Konvertieren der Einheiten von {type} {module} in Eintrag {entry['timestamp']}")
Comment on lines +162 to +171
for type in ("bat", "counter", "cp", "pv", "sh", "hc"):
if type in entry:
for module in entry[type].keys():
try:
for value in ("energy_imported", "energy_exported", "power_average", "power_imported", "power_exported"):
if value in entry[type][module].keys():
entry[type][module][value] = entry[type][module][value] / 1000
except KeyError:
log.exception(
f"Fehler beim Konvertieren der Einheiten von {type} {module} in Eintrag {entry['timestamp']}")
Comment on lines 824 to +834
def getDailyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/daily/{payload["data"]["date"]}',
get_daily_log(payload["data"]["date"]))
convert_legacy_units(get_daily_log(payload["data"]["date"])))

def getMonthlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/monthly/{payload["data"]["date"]}',
get_monthly_log(payload["data"]["date"]))
convert_legacy_units(get_monthly_log(payload["data"]["date"])))

def getYearlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/yearly/{payload["data"]["date"]}',
get_yearly_log(payload["data"]["date"]))
convert_legacy_units(get_yearly_log(payload["data"]["date"])))
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 6 comments.

Comment on lines +171 to +183
def convert_legacy_units(data: dict) -> dict:
for entry in data["entries"]:
for group in ("bat", "counter", "cp", "pv", "sh", "hc"):
if group in entry:
for module in entry[group].keys():
try:
for value in KWH_KEYS:
if value in entry[group][module].keys():
entry[group][module][value] = entry[group][module][value] / 1000
except KeyError:
log.exception(
f"Fehler beim Konvertieren der Einheiten von {group} {module} in Eintrag "
f"{entry['timestamp']}")
Comment on lines +177 to +180
for value in KWH_KEYS:
if value in entry[group][module].keys():
entry[group][module][value] = entry[group][module][value] / 1000
except KeyError:
Comment on lines +160 to +168
KWH_KEYS = ("energy_imported",
"energy_imported_grid",
"energy_imported_pv",
"energy_imported_bat",
"energy_imported_cp",
"energy_exported",
"power_average",
"power_imported",
"power_exported")
Comment on lines +50 to +74
# {'entries': [{'bat': {'all': {'energy_exported': 0.0, # kWh
# 'energy_imported': 0.0, # kWh
# 'exported': 50.75, # Wh
# 'imported': 2551.98, # Wh
# 'power_average': 0.0, # kW
# 'power_exported': 0, # kW
# 'power_imported': 0.0, # kW
# 'soc': 100}, # %
# 'bat2': {'energy_exported': 0.0, # kWh
# 'energy_imported': 0.0, # kWh
# 'exported': 50.75, # Wh
# 'imported': 2551.98, # Wh
# 'power_average': 0.0, # kW
# 'power_exported': 0, # kW
# 'power_imported': 0.0, # kW
# 'soc': 100}}, # %
# 'counter': {'counter0': {'energy_exported': 4.421, # kWh
# 'energy_imported': 0.0, # kWh
# 'exported': 24425.677, # Wh
# 'grid': True,
# 'imported': 90.379, # Wh
# 'power_average': -7.139, # kW
# 'power_exported': 7.139, # kW
# 'power_imported': 0}}, # kW
# 'cp': {'all': {'energy_exported': 0.0, # kWh
Comment on lines 824 to +834
def getDailyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/daily/{payload["data"]["date"]}',
get_daily_log(payload["data"]["date"]))
convert_legacy_units(get_daily_log(payload["data"]["date"])))

def getMonthlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/monthly/{payload["data"]["date"]}',
get_monthly_log(payload["data"]["date"]))
convert_legacy_units(get_monthly_log(payload["data"]["date"])))

def getYearlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/yearly/{payload["data"]["date"]}',
get_yearly_log(payload["data"]["date"]))
convert_legacy_units(get_yearly_log(payload["data"]["date"])))
Comment on lines 828 to +834
def getMonthlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/monthly/{payload["data"]["date"]}',
get_monthly_log(payload["data"]["date"]))
convert_legacy_units(get_monthly_log(payload["data"]["date"])))

def getYearlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/yearly/{payload["data"]["date"]}',
get_yearly_log(payload["data"]["date"]))
convert_legacy_units(get_yearly_log(payload["data"]["date"])))
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 7 out of 7 changed files in this pull request and generated 5 comments.

Comment on lines +50 to +71
# {'entries': [{'bat': {'all': {'energy_exported': 0.0, # kWh
# 'energy_imported': 0.0, # kWh
# 'exported': 50.75, # Wh
# 'imported': 2551.98, # Wh
# 'power_average': 0.0, # kW
# 'power_exported': 0, # kW
# 'power_imported': 0.0, # kW
# 'soc': 100}, # %
# 'bat2': {'energy_exported': 0.0, # kWh
# 'energy_imported': 0.0, # kWh
# 'exported': 50.75, # Wh
# 'imported': 2551.98, # Wh
# 'power_average': 0.0, # kW
# 'power_exported': 0, # kW
# 'power_imported': 0.0, # kW
# 'soc': 100}}, # %
# 'counter': {'counter0': {'energy_exported': 4.421, # kWh
# 'energy_imported': 0.0, # kWh
# 'exported': 24425.677, # Wh
# 'grid': True,
# 'imported': 90.379, # Wh
# 'power_average': -7.139, # kW
Comment on lines +171 to +180
def convert_legacy_units(data: dict) -> dict:
for entry in data["entries"]:
for group in ("bat", "counter", "cp", "pv", "sh", "hc"):
if group in entry:
for module in entry[group].keys():
try:
for value in UNIT_KEYS_KILO:
if value in entry[group][module].keys():
entry[group][module][value] = decimal_divide(entry[group][module][value], 1000)
except KeyError:
Comment on lines +171 to +183
def convert_legacy_units(data: dict) -> dict:
for entry in data["entries"]:
for group in ("bat", "counter", "cp", "pv", "sh", "hc"):
if group in entry:
for module in entry[group].keys():
try:
for value in UNIT_KEYS_KILO:
if value in entry[group][module].keys():
entry[group][module][value] = decimal_divide(entry[group][module][value], 1000)
except KeyError:
log.exception(
f"Fehler beim Konvertieren der Einheiten von {group} {module} in Eintrag "
f"{entry['timestamp']}")
Comment on lines 824 to +834
def getDailyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/daily/{payload["data"]["date"]}',
get_daily_log(payload["data"]["date"]))
convert_legacy_units(get_daily_log(payload["data"]["date"])))

def getMonthlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/monthly/{payload["data"]["date"]}',
get_monthly_log(payload["data"]["date"]))
convert_legacy_units(get_monthly_log(payload["data"]["date"])))

def getYearlyLog(self, connection_id: str, payload: dict) -> None:
Pub().pub(f'openWB/set/log/yearly/{payload["data"]["date"]}',
get_yearly_log(payload["data"]["date"]))
convert_legacy_units(get_yearly_log(payload["data"]["date"])))
Comment on lines +60 to +63
def test_getDailyLog(regular_daily_log_entry,
regular_daily_log_entry_processed_legacy_converted,
mock_pub,
monkeypatch):
@LKuemmel LKuemmel merged commit ae74f41 into master May 21, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants