Big Dog Power PDU
GEM driver for the Big Dog Power line of intelligent power distribution units from Ethereal / MetraAV. It talks to the unit's own local HTTP API on the LAN — no MAVbase cloud account, no polling of a vendor server. The local API is open by default; when the unit's web interface has HTTP authentication switched on, the driver authenticates with a username and password.
Covered models:
| Model | Form factor | Switched outlets |
|---|---|---|
| PR-S1PI | Single smart outlet (Wi-Fi) | 1 |
| PR-W3PI | 3-outlet wall mount (Wi-Fi / wired) | 3 |
| PR-R13PI | 12+1 rack mount (Wi-Fi / wired) | 12 switched, 1 always-on |
Feature coverage:
- Per-outlet
on,off,toggleandreboot(firmware power-cycle dwell) - Polling of
/updateOutlets→ zonestate,power_w,current_a,voltage_v,uptime_seconds - Chassis rollup on the device →
total_power_w,outlet_count,chip_id,model_code,uptime_seconds,surge_mov1/surge_mov2, andtemperature_1_f…temperature_4_fon the rack chassis - Chassis IO relay output as a first-class zone (
output_on/output_off/get_output_state) - Contact-input and front-panel button event reads
- Front-panel LCD text and LED backlight control
- UPS serial loopback test for commissioning the RS-232 link
Prerequisites
- The PDU on the LAN. Commission it through the setup flow first: join the unit's own Wi-Fi SSID (
Metra-XXXX XXXX XXXX), browse to192.168.4.1, and point it at the site network. Wi-Fi models are 2.4 GHz only. Rack and wall units can use wired Ethernet instead, which is what you want in a rack. - A stable address. Reserve a DHCP lease for the PDU. The driver addresses it by IP.
- Network placement. The local API is open by default — any host that can reach port 80 on the PDU can switch outlets. The firmware's web interface can turn on HTTP Digest authentication; enabling it and giving GEM the credentials adds a second layer, but it is not a substitute for segmentation. Put the PDU on the management VLAN with the rest of the control gear.
- Credentials, if auth is on. If you enable HTTP authentication on the unit, set the device Username and Password to a login it accepts. Leave both blank when authentication is off.
Network segmentation is the primary access control for this device whether or not HTTP authentication is enabled. Do not expose the PDU to a guest network, and never port-forward it.
Setup steps
-
Add the device. Devices → New Device, driver
big_dog_power. Set PDU IP Address to the unit's LAN address. Leave HTTP Port at 80 unless you have a reason not to. If HTTP authentication is enabled on the unit, also set Username and Password; leave HTTP Auth Method at Digest. -
Confirm it answers. Run the
get_outletscommand from the Script Console. You should get asystemblock plus one entry per switched outlet:{"system": {"chipID": "REDACTED", "model": 3, "upTime": 0, "mov1": 1, "mov2": 2},"outlets": [{"num": 1, "isOn": true, "a": 0, "v": 115.99, "w": 0, "upTime": 14932},{"num": 2, "isOn": true, "a": 0.14, "v": 115.99, "w": 12.3, "upTime": 14946},{"num": 3, "isOn": true, "a": 0, "v": 115.99, "w": 0, "upTime": 1846}]}If this times out, the controller cannot reach the PDU — check the browser at
http://<ip>/updateOutletsfrom the same network segment. -
Create one zone per outlet. In the power subsystem, create a zone per outlet with this device selected and Address set to the outlet number (
1,2,3, …). Name them after the load, not the outlet — "Rack Switch" reads better than "Outlet 4" everywhere in the UI. -
Optionally add the relay. If the chassis IO relay drives something (a contactor, a projector lift interlock), create one more zone with Address set to the literal string
output.onandoffon that zone drive the relay instead of an outlet. -
Check the meter. Turn a known load on and confirm watts move within about a minute. The meter is slow by design.
Attribute reference
Device attributes
| Attribute | Required | Type | Purpose |
|---|---|---|---|
ip | yes | string | LAN IP or hostname of the PDU. |
port | no | int | HTTP port. Default 80; the firmware does not expose a way to change it. |
status_interval | no | int | Poll period in ms. Default 15000, floor 5000. |
request_timeout | no | int | HTTP timeout in ms. Default 8000. |
username | no | string | Web API login. Set only when HTTP authentication is enabled on the unit. |
password | no | string | Web API password, stored encrypted. Set only when HTTP authentication is enabled on the unit. |
auth_method | no | string | digest (default) or basic. Used only when a username/password is set. The firmware uses Digest. |
Attributes the driver writes
Device (chassis):
| Attribute | Unit | Meaning |
|---|---|---|
total_power_w | W | Sum of watts across every switched outlet. |
outlet_count | — | Number of switched outlets the unit reports. |
chip_id | — | ESP32 chip id, effectively the unit serial. |
model_code | — | Model number from the system block. |
uptime_seconds | s | Chassis uptime. |
surge_mov1, surge_mov2 | — | Surge module status values. Watch for changes — a shift here means a replaceable MOV module has taken a hit. |
temperature_1_f … temperature_4_f | °F | Rack temperature probes. 13-outlet chassis only, and reported in Fahrenheit by the firmware. |
firmware_esp, firmware_mcu | — | Firmware versions, read once at connect and on get_firmware. |
output_state | — | IO relay state, maintained when an output zone exists. |
Zone (one per outlet):
| Attribute | Unit | Meaning |
|---|---|---|
state | — | on or off. |
power_w | W | Live real power for the outlet. |
current_a | A | Live current. |
voltage_v | V | Line voltage as measured by the unit. |
uptime_seconds | s | How long this outlet has been energized. |
Readings are rounded before storage (1 W, 0.1 A, 0.1 V) so meter jitter does not churn attribute history.
Zone address format
1 # outlet 1
12 # outlet 12 (PR-R13PI)
output # the chassis IO relay contact, not an AC outlet
Outlet numbers come from get_outlets — match on the num field rather than counting rear-panel positions. The always-on outlet of the PR-R13PI is not switchable and never appears in the list, so a 12+1 chassis reports 12 addressable outlets.
Command notes
rebootuses the firmware's own off/on dwell. That dwell is fixed and cannot be set through the API. If you need a specific delay, useoff, a macro delay step, thenon.set_backlighttakesitem=LCD,Up,Down,Right,LeftorEnter, andstate=1/0. The underlying vendor endpoint is spelledsetBackight; the driver sends that spelling on purpose.write_lcdwrites to both LCD lines, and the display reverts to its normal content shortly after on its own. It is a notification, not a persistent display.ups_testsends text out the RS-232 line and reportsPass: <text>if the same text comes back — a loopback check for the UPS serial cable, not a battery test.get_input_triggerandget_button_eventreturn0none,1pressed,2released,3long press.
Which outlets a user may switch
Every addressed command from a UI, the REST API, or voice is confined to outlets that have a
zone on this device. The rule is enforced centrally at the command dispatch layer rather than
by a per-command list in this driver, so a verb added later is confined automatically. An address
with no matching zone returns not authorized: address is not mapped to a zone on this device.
The output chassis relay is covered by the same rule — it is the most destructive target on the
unit, not an exception.
The outlet count comes from the PDU's own /updateOutlets reply, not from GEM's zone table, so
without this an outlet an integrator deliberately left unmapped — one feeding the alarm panel, the
network switch, the NVR, or the GEM controller — was reachable by anyone with an account.
Administrators are unaffected, and so are macros, triggers, schedules and other drivers.
Known limitations
- Authentication is optional and off by default. The firmware supports HTTP Digest authentication (realm
asyncesp), toggled in its web interface; the driver uses it when credentials are set. With auth off there is no protocol-level control, so network placement carries the load either way. - Factory reset is deliberately not exposed. The firmware has a reset endpoint. It is not wired up as a GEM command, because a reset reachable from a macro or a mistyped console line would drop the unit off the network and require a physical re-commission.
- Metering is slow. Vendor documentation states meter data can take up to 60 seconds to appear. Do not build fast interlocks on watt thresholds from this device.
- No push. The firmware offers no event channel, so state changes made at the front panel or in the MAVbase app appear on the next poll.
- The always-on outlet is invisible. It cannot be switched or metered through the API.
- Scheduling and self-healing stay on the device. The unit's own auto-reboot and schedule rules are configured in MAVbase and are neither read nor written here. If you want GEM to own that behaviour, disable it on the unit and build a macro instead, so two schedulers aren't fighting over the same outlet.
- Model coverage is inferred from one API revision. The published API describes outlets 1–3 and notes the 13-outlet chassis adds
t1–t4. The driver derives the outlet count from the device's own response rather than the model, so a larger chassis should enumerate correctly, but that has not been confirmed against a 12-outlet unit.
Troubleshooting
| Symptom | Check |
|---|---|
get_outlets times out | Browse to http://<ip>/updateOutlets from the same segment. If the browser works and GEM does not, it is VLAN/firewall between controller and PDU. |
Every call fails with http 401 | The unit has HTTP authentication enabled. Set Username and Password to a login it accepts, and leave HTTP Auth Method at Digest unless the firmware was reconfigured for Basic. |
unexpected /updateOutlets response | The address is answering HTTP but is not a Big Dog PDU (often a router admin page on a recycled IP). Confirm the IP. |
| Outlet switches but the zone state lags | State refreshes on the next poll. Lower status_interval or run get_outlets. |
| Watts read 0 with a load connected | Wait 60 s for the meter to settle. A persistent 0 W on a live outlet usually means the load is in standby. |
outlet N out of range | The unit reported fewer outlets than the address you used. Run get_outlets and use the num values it returns. |
not authorized: address is not mapped to a zone on this device | The outlet has no zone on this device. Create one, or run the command as an administrator. See Which outlets a user may switch. |
| Device flaps connected/disconnected | Wi-Fi models on a marginal 2.4 GHz signal drop HTTP requests. Move to wired Ethernet on the rack and wall units, or improve AP coverage. |
| Rack temperatures missing | Only the 13-outlet chassis reports t1–t4. Single and 3-outlet units have no probes. |