-
Notifications
You must be signed in to change notification settings - Fork 83
Description
Summary
When using a third-party BLE AC energy meter driver (Hughes Power Watchdog) that publishes data on the standard com.victronenergy.grid D-Bus paths (modeled after dbus-cgwacs), the local Cerbo GX GUI displays everything correctly, but the VRM portal shows an incorrect/broken layout.
What works (local Cerbo GUI)
The local GUI correctly shows:
- Grid: 173W with L1 (166W) and L2 (7W) breakdown
- Inverter/Charger: External control
- AC Loads: 20W with per-phase breakdown (L1: 13W, L2: 7W)
- DC Loads: 154W
- Battery: 98%, Discharging, 13.63V, -0.6A, -8W
(Screenshot 1 — will be attached in comments)
What's broken (VRM portal)
The VRM portal simultaneously shows:
- DC Loads panel is completely missing
- AC Loads shows "-" (blank/no data)
- "Essential Loads" appeared with per-phase data showing Hz values — this panel doesn't exist on the local UI
- Battery shows "Idle" despite actively discharging at -14W / -1.0A
(Screenshot 2 — will be attached in comments)
Root cause analysis
I investigated the D-Bus data on the Cerbo and identified the root cause. The data on D-Bus is correct — the issue is that the VRM portal uses different D-Bus paths than the local GUI to render its dashboard.
D-Bus paths — what dbus-systemcalc-py publishes (all correct)
| Path | Value | Description |
|---|---|---|
/Ac/Consumption/L1/Power |
14 W | Total AC consumption L1 |
/Ac/Consumption/L2/Power |
7 W | Total AC consumption L2 |
/Ac/ConsumptionOnOutput/L1/Power |
0 W | Loads on inverter AC-out L1 |
/Ac/ConsumptionOnOutput/L2/Power |
2 W | Loads on inverter AC-out L2 |
/Ac/ConsumptionOnInput/L1/Power |
[] (empty) | No loads between grid meter and inverter |
/Ac/ConsumptionOnInput/L2/Power |
[] (empty) | No loads between grid meter and inverter |
/Dc/System/Power |
153 W | DC loads (correctly calculated) |
/Ac/Grid/L1/Power |
167 W | Grid L1 from external meter |
/Ac/Grid/L2/Power |
7 W | Grid L2 from external meter |
Relevant settings
| Setting | Value | Description |
|---|---|---|
/Settings/SystemSetup/HasDcSystem |
1 | System has DC loads |
/Settings/SystemSetup/HasAcOutSystem |
1 | System has AC output |
/Settings/SystemSetup/HasAcInLoads |
0 | No loads between grid meter and inverter |
/Settings/CGwacs/RunWithoutGridMeter |
0 | Using an external grid meter |
/SystemType |
Hub-1 | System topology |
How the local GUI renders (correct)
The local Cerbo GUI (gui-v2) uses:
- "AC Loads" →
/Ac/Consumption(total of OnInput + OnOutput) = 21W ✅ - "DC Loads" →
/Dc/System/Power= 154W ✅
How the VRM portal renders (broken)
The VRM portal appears to use:
- "AC Loads" →
/Ac/ConsumptionOnInput= empty [] → shows "-" ❌ - "Essential Loads" →
/Ac/ConsumptionOnOutput= 2W (unexpected widget appearing) - "DC Loads" → not displayed at all, even though
/Dc/System/Power= 153W ❌
The mismatch
When HasAcInLoads = 0 (no loads between the grid meter and inverter input — which is the correct topology for Shore → Power Watchdog → MultiPlus → AC loads), dbus-systemcalc-py correctly leaves ConsumptionOnInput empty. The local GUI handles this gracefully by using /Ac/Consumption (the total).
The VRM portal, however:
- Uses
ConsumptionOnInputfor its "AC Loads" widget, which is empty → shows "-" - Creates an unexpected "Essential Loads" widget from
ConsumptionOnOutput - Drops the "DC Loads" widget entirely, even though
/Dc/System/Powerhas valid data - Shows "Idle" for the battery state (likely using a different threshold or path than the local GUI, which correctly shows "Discharging" at -8W)
D-Bus paths published by the grid meter driver
The driver registers as com.victronenergy.grid.power_watchdog_<mac> and publishes:
/Ac/L1/Voltage,/Ac/L1/Current,/Ac/L1/Power/Ac/L2/Voltage,/Ac/L2/Current,/Ac/L2/Power/Ac/Power(total)/Ac/Energy/Forward(cumulative kWh)/Ac/Frequency/Role=grid,/Position= 0
Environment
- Venus OS on Cerbo GX (firmware current)
- 120V split-phase (L1 + L2) shore power → MultiPlus-II 12/3000/120-50 2x120V
- Driver: dbus-power-watchdog (BLE grid meter)
Expected behavior
The VRM portal should render consistently with the local Cerbo GUI:
- Show "AC Loads" from
/Ac/Consumption(total), not fromConsumptionOnInputalone - Show "DC Loads" from
/Dc/System/PowerwhenHasDcSystem = 1 - Not display a separate "Essential Loads" widget when the distinction between essential/non-essential isn't meaningful for the topology
Routing note
The VRM portal source is not public, so this issue can't be filed directly against it. Could this be routed to the VRM portal team?
cc @izak