def extract_meter(tx):
"""
Return the latest Energy.Active.Import.Register (kWh) from MeterValues or meterStop.
"""
if not tx:
return "-"
# Try meterStop first
if tx.get("meterStop") is not None:
try:
return float(tx["meterStop"]) / 1000.0 # assume Wh, convert to kWh
except Exception:
return tx["meterStop"]
# Try MeterValues: last entry, find Energy.Active.Import.Register
mv = tx.get("MeterValues", [])
if mv:
last_mv = mv[-1]
for sv in last_mv.get("sampledValue", []):
if sv.get("measurand") == "Energy.Active.Import.Register":
return sv.get("value")
return "-"