Domotz Power Outlets
Overview
Domotz can read and switch outlets on PDUs and smart plugs it has
discovered as devices. This is the only part of the Domotz MCP surface
that changes anything — every other tool the server registers is a GET.
It does not restart a service or reboot an operating system. It interrupts
mains power to whatever is physically plugged into that outlet.
Both tools are device-scoped: the PDU itself is a discovered device, so you
need the agent_id of the site and the device_id of the PDU before you
can address an outlet.
Anti-triggers
- Rebooting a managed endpoint or server gracefully — an OS-level
restart that flushes buffers and runs shutdown hooks is an RMM job;
use
ncentral or atera. Reach for the outlet only when the device
is unreachable by every softer means.
- Rebooting Meraki hardware — the Dashboard reboots its own devices
by serial and brings them back cleanly; use
meraki-devices.
- A device that is merely offline in the inventory — offline in
domotz-devices means it stopped answering scans, which is not the
same as needing power cut. Diagnose first.
- Anything about the outlet's own metrics — draw, load, and SNMP
counters on the PDU are
domotz-network.
Tools
| Tool |
Effect |
Arguments |
domotz_power_outlets_list |
Read. Lists outlets on a PDU/smart-plug device and their current power state. |
agent_id (number, required), device_id (number, required) |
domotz_power_outlet_control |
Destructive. Switches one outlet. |
agent_id (number, required), device_id (number, required), outlet_id (number, required), action (on | off | cycle, required), confirm (boolean, required) |
device_id is the PDU, not the equipment plugged into it. Domotz has no
mapping from "the file server" to "the outlet the file server is plugged
into" — that association lives in your documentation, not in the API.
The confirm argument is not a safety control
domotz_power_outlet_control refuses to run unless confirm: true is
passed, and the server prefixes its own description with
DESTRUCTIVE ACTION. Both are worth knowing about and neither is an
enforcement point:
confirm is an ordinary boolean in the tool's input schema. The model
supplies it. A model that has decided to cycle the outlet will supply
true in the same call — it is a spelling requirement, not a second
pair of eyes.
- Conduit is a non-interactive client. Vendor-side destructive hints and
confirmation flags are advisory to it; it compares permission tiers and
nothing else. See
wyre-gateway/GOVERNANCE.md, Where Conduit is the
only enforcement point.
Treat the real gate as the one in GOVERNANCE.md: a named human approver
per invocation, and never this tool for an unattended agent.
Before any off or cycle
- Confirm which outlet. Call
domotz_power_outlets_list and read
the outlet's own label and current state. Do not infer the outlet
number from position or from a previous site.
- Confirm what is on it. The API will not tell you. Check the
customer's documentation, and if it is not documented, do not proceed.
- Confirm the site is attended, or that it does not need to be.
There is no confirmation that connected equipment came back — only
that the outlet is energised again. If the device does not boot, the
recovery is someone physically on site.
- Confirm the agent is online. Check
domotz_agents_get. A stale
collector means the outlet state you just read may not be current.
- Prefer
cycle over off when the intent is a restart. An off
with nobody to turn it back on strands the device; cycle at least
ends in the energised state.
Blast radius
off and cycle are mains interruptions with no undo:
- Unbuffered writes on servers and storage arrays are lost; filesystem
and database corruption is a real outcome, not a theoretical one.
- A firewall, switch, or router on that outlet takes the whole site's
connectivity with it — including the Domotz agent itself, which is how
you would have observed the result.
- Cutting power to the agent's own uplink removes your ability to turn
the outlet back on remotely.
The Domotz audit log records that the API account called the tool. It does
not record which outlet. Conduit's log records who called it, also
without arguments. Neither log will reconstruct what you switched, so the
ticket note is the only durable record — write it before the call, not
after.
Common Workflows
Read outlet state for a PDU
- Call
domotz_devices_list for the site and find the PDU device.
- Call
domotz_power_outlets_list with that agent_id and device_id.
- Report each outlet's label and state. Stop here for anything
read-only.
Human-approved power cycle
- Establish the device is unreachable by softer means and that an RMM
restart is not available.
- Run the pre-flight checks above.
- Name the approver and record the site, PDU, outlet, and reason.
- Call
domotz_power_outlet_control with action: "cycle" and
confirm: true.
- Re-read with
domotz_power_outlets_list to confirm the outlet is
energised — and separately with domotz_devices_get to see whether
the equipment actually came back. The outlet reporting on is not
evidence that the device booted.
Error Handling
Power control requires confirm: true
Cause: confirm was omitted or false. The server returns this before
issuing any request.
Solution: Do not simply retry with confirm: true. This is the point
at which to check that a human approved this specific outlet.
Outlet action returns success but the device stays offline
Cause: The equipment did not boot, or it is not on the outlet you
switched.
Solution: Re-read the outlet list; check domotz_devices_get for the
target device; escalate to on-site. Do not cycle repeatedly.
404 on the outlet path
Cause: The device is not a PDU, or outlet_id does not exist on it.
Solution: Re-run domotz_power_outlets_list for valid outlet IDs.
Related Skills
- devices - Finding the PDU in the device inventory
- agents - Collector health, which gates trusting outlet state
- network - SNMP metrics from the PDU
- api-patterns - Authentication and error codes
1---2name: domotz-power-outlets3description: Domotz PDU and smart-outlet control: listing outlets and their power state, and the one non-GET tool the Domotz server exposes — switching an outlet on, off, or cycling it. Covers the confirm argument, why it is advisory, and the pre-flight checks that belong before a mains interruption.4---56# Domotz Power Outlets78## Overview910Domotz can read and switch outlets on PDUs and smart plugs it has11discovered as devices. This is the **only** part of the Domotz MCP surface12that changes anything — every other tool the server registers is a `GET`.13It does not restart a service or reboot an operating system. It interrupts14mains power to whatever is physically plugged into that outlet.1516Both tools are device-scoped: the PDU itself is a discovered device, so you17need the `agent_id` of the site and the `device_id` of the PDU before you18can address an outlet.1920## Anti-triggers2122- **Rebooting a managed endpoint or server gracefully** — an OS-level23 restart that flushes buffers and runs shutdown hooks is an RMM job;24 use `ncentral` or `atera`. Reach for the outlet only when the device25 is unreachable by every softer means.26- **Rebooting Meraki hardware** — the Dashboard reboots its own devices27 by serial and brings them back cleanly; use `meraki-devices`.28- **A device that is merely offline in the inventory** — offline in29 `domotz-devices` means it stopped answering scans, which is not the30 same as needing power cut. Diagnose first.31- **Anything about the outlet's own metrics** — draw, load, and SNMP32 counters on the PDU are `domotz-network`.3334## Tools3536| Tool | Effect | Arguments |37|------|--------|-----------|38| `domotz_power_outlets_list` | Read. Lists outlets on a PDU/smart-plug device and their current power state. | `agent_id` (number, required), `device_id` (number, required) |39| `domotz_power_outlet_control` | **Destructive.** Switches one outlet. | `agent_id` (number, required), `device_id` (number, required), `outlet_id` (number, required), `action` (`on` \| `off` \| `cycle`, required), `confirm` (boolean, required) |4041`device_id` is the PDU, not the equipment plugged into it. Domotz has no42mapping from "the file server" to "the outlet the file server is plugged43into" — that association lives in your documentation, not in the API.4445## The `confirm` argument is not a safety control4647`domotz_power_outlet_control` refuses to run unless `confirm: true` is48passed, and the server prefixes its own description with49`DESTRUCTIVE ACTION`. Both are worth knowing about and neither is an50enforcement point:5152- `confirm` is an ordinary boolean in the tool's input schema. The model53 supplies it. A model that has decided to cycle the outlet will supply54 `true` in the same call — it is a spelling requirement, not a second55 pair of eyes.56- Conduit is a non-interactive client. Vendor-side destructive hints and57 confirmation flags are advisory to it; it compares permission tiers and58 nothing else. See `wyre-gateway/GOVERNANCE.md`, *Where Conduit is the59 only enforcement point*.6061Treat the real gate as the one in `GOVERNANCE.md`: a named human approver62per invocation, and never this tool for an unattended agent.6364## Before any `off` or `cycle`65661. **Confirm which outlet.** Call `domotz_power_outlets_list` and read67 the outlet's own label and current state. Do not infer the outlet68 number from position or from a previous site.692. **Confirm what is on it.** The API will not tell you. Check the70 customer's documentation, and if it is not documented, do not proceed.713. **Confirm the site is attended, or that it does not need to be.**72 There is no confirmation that connected equipment came back — only73 that the outlet is energised again. If the device does not boot, the74 recovery is someone physically on site.754. **Confirm the agent is online.** Check `domotz_agents_get`. A stale76 collector means the outlet state you just read may not be current.775. **Prefer `cycle` over `off`** when the intent is a restart. An `off`78 with nobody to turn it back on strands the device; `cycle` at least79 ends in the energised state.8081## Blast radius8283`off` and `cycle` are mains interruptions with no undo:8485- Unbuffered writes on servers and storage arrays are lost; filesystem86 and database corruption is a real outcome, not a theoretical one.87- A firewall, switch, or router on that outlet takes the whole site's88 connectivity with it — including the Domotz agent itself, which is how89 you would have observed the result.90- Cutting power to the agent's own uplink removes your ability to turn91 the outlet back on remotely.9293The Domotz audit log records that the API account called the tool. It does94not record which outlet. Conduit's log records *who* called it, also95without arguments. Neither log will reconstruct what you switched, so the96ticket note is the only durable record — write it before the call, not97after.9899## Common Workflows100101### Read outlet state for a PDU1021031. Call `domotz_devices_list` for the site and find the PDU device.1042. Call `domotz_power_outlets_list` with that `agent_id` and `device_id`.1053. Report each outlet's label and state. Stop here for anything106 read-only.107108### Human-approved power cycle1091101. Establish the device is unreachable by softer means and that an RMM111 restart is not available.1122. Run the pre-flight checks above.1133. Name the approver and record the site, PDU, outlet, and reason.1144. Call `domotz_power_outlet_control` with `action: "cycle"` and115 `confirm: true`.1165. Re-read with `domotz_power_outlets_list` to confirm the outlet is117 energised — and separately with `domotz_devices_get` to see whether118 the equipment actually came back. The outlet reporting `on` is not119 evidence that the device booted.120121## Error Handling122123### `Power control requires confirm: true`124125**Cause:** `confirm` was omitted or false. The server returns this before126issuing any request.127**Solution:** Do not simply retry with `confirm: true`. This is the point128at which to check that a human approved this specific outlet.129130### Outlet action returns success but the device stays offline131132**Cause:** The equipment did not boot, or it is not on the outlet you133switched.134**Solution:** Re-read the outlet list; check `domotz_devices_get` for the135target device; escalate to on-site. Do not cycle repeatedly.136137### 404 on the outlet path138139**Cause:** The device is not a PDU, or `outlet_id` does not exist on it.140**Solution:** Re-run `domotz_power_outlets_list` for valid outlet IDs.141142## Related Skills143144- [devices](../devices/SKILL.md) - Finding the PDU in the device inventory145- [agents](../agents/SKILL.md) - Collector health, which gates trusting outlet state146- [network](../network/SKILL.md) - SNMP metrics from the PDU147- [api-patterns](../api-patterns/SKILL.md) - Authentication and error codes