
The Shelly Plus 2PM is a compact dual-channel Wi-Fi relay with built-in power metering on both channels. It fits behind a standard wall switch and can control two independent circuits, each rated up to 10 A (16 A total at 230 V AC), or drive a single motorized roller shutter. TapHome communicates with the device over HTTP using the Gen2+ RPC API on the local network — no cloud connection is required.
The device supports two operation profiles — switch and cover — selectable through the Shelly web UI or via the TapHome service action. In switch profile, both relay outputs (O1 and O2) operate independently with per-channel power monitoring. In cover profile, the two outputs drive a single motor for roller shutters, blinds, or curtains, with position control and calibration.
The Shelly Plus 2PM is discontinued. Its successor, the Shelly 2PM Gen3, offers the same dual-profile functionality with an upgraded processor (8 MB flash), up to 6 concurrent HTTP connections, and Matter upgradeability.
Configuration
The Shelly Plus 2PM connects over Wi-Fi. During TapHome template import, enter the device’s IP address (default placeholder 192.168.0.1).
Authentication must be disabled on the Shelly device for TapHome integration. TapHome does not support HTTP Digest Auth used by Gen2+ devices. Open the Shelly web UI (
http://{device-ip}) → Settings → Authentication and ensure it is turned off.
If ECO mode is enabled on the Shelly device, it may cause communication timeouts due to the fast poll intervals used by the template (2.5–5 seconds). Disable ECO mode in the Shelly web UI if you experience intermittent connectivity issues.
Profile selection
The Shelly Plus 2PM operates in one of two profiles at a time. The active profile determines which TapHome devices are functional:
- Switch profile — enables both relay switches (Switch 1 and Switch 2) and their per-channel energy meters. The shutter device and shutter energy meter will not respond.
- Cover profile — enables the shutter device and its energy meter. The two switch devices and their energy meters will not respond.
The active profile is visible as a module-level service attribute (“Profile”) in TapHome. To change the profile, use the Profile service action at the module level, or switch it in the Shelly web UI. After changing the profile, the device reboots and only the devices matching the new profile will operate.
The template includes all six devices (2 switches + 2 switch power meters + 1 shutter + 1 shutter power meter), but only the devices matching the active profile will work. This is expected behavior — devices on the wrong profile simply do not respond.
Cover calibration
When using the cover profile, the motor travel limits must be calibrated before position control works. Until calibration is complete, current_pos returns null and the “Calibrated” service attribute shows false. Calibrate either through the Shelly web UI or by triggering the Calibrate service action on the Shutter device in TapHome. During calibration, the cover runs a multi-step sequence (full open → full close → full open → close in steps → open in steps) to measure travel distances.
Device capabilities
Relay control (switch profile)
The template exposes two independent relay switches. Each switch reads its state from /rpc/Switch.GetStatus?id={0,1} (output field, boolean) and controls the relay via /rpc/Switch.Set?id={0,1}&on=true|false.
Each switch exposes seven service attributes:
- Source — source of the last command (http, UI, WS_in, etc.)
- Temperature — internal device temperature in °C
- Initial State — switch behavior on power-up (off, on, restore_last, or match_input)
- Input Mode — physical input wiring mode (follow or detached)
- Power Limit — maximum power threshold in watts for overpower protection
- Voltage Limit — maximum voltage threshold in volts
- Current Limit — maximum current threshold in amperes
Two service actions are available on each switch:
- Set Initial State — configures the relay behavior after power-up (off, on, restore_last, match_input)
- Set Mode — configures the physical input wiring mode (follow, detached)
Power metering (switch profile)
Each switch channel has a dedicated energy meter that reads two values from /rpc/Switch.GetStatus:
- Real-time power —
apowerreported in watts, converted to kW by the template - Total consumption —
aenergy.totalreported in watt-hours, converted to kWh by the template
Each energy meter also exposes three service attributes:
- Voltage — supply voltage in volts
- Current — load current in amperes
- Power Factor — power factor of the load
The meters are read-only — they update automatically with every poll cycle.
Shutter control (cover profile)
The shutter device controls a motorized roller shutter, curtain, or awning. It reads position from /rpc/Cover.GetStatus?id=0 (current_pos field, 0–100%) and writes via /rpc/Cover.GoToPosition?id=0&pos=N.
The shutter device exposes 21 service attributes:
- Status — source, state (open/closed/opening/closing/stopped/calibrating), current and target position, movement timeout and start time
- Calibration — whether position control is enabled (
pos_control) - Temperature — internal device temperature in °C
- Power-up behavior — initial state configuration (open, closed, stopped)
- Input settings — input mode (single, dual, detached), swap inputs, invert directions
- Protection limits — power limit (W), voltage limit (V), current limit (A)
- Motor tuning — idle power threshold (0–50 W), idle confirmation period (0.25–2 s)
- Movement limits — maximum open time (0.1–300 s), maximum close time (0.1–300 s)
- Safety features — obstruction detection status, safety switch status
Six service actions are available on the shutter:
- Open — fully opens the cover
- Close — fully closes the cover
- Stop — stops movement immediately
- Calibrate — starts the calibration procedure for position control
- Go to Position — moves the cover to a specific position (0–100%)
- Reverse directions — toggles the
invert_directionsconfig and reboots the device
Power metering (cover profile)
The shutter has a dedicated energy meter that reads from /rpc/Cover.GetStatus:
- Real-time power —
apowerreported in watts, converted to kW by the template - Total consumption —
aenergy.totalreported in watt-hours, converted to kWh by the template
The shutter energy meter also exposes voltage, current, and power factor as service attributes.
Service diagnostics
The template exposes two module-level service attributes:
- MAC — device MAC address from system config
- Profile — currently active device profile (switch or cover)
The module read script also checks restart_required from /rpc/Sys.GetStatus and surfaces a warning in TapHome if a reboot is pending.
Service actions
Two service actions are available at the module level:
- Reboot — triggers a device reboot via
/rpc/Shelly.Reboot - Profile — switches between switch and cover operating profiles via
/rpc/Shelly.SetProfile
Additional capabilities
The Shelly Plus 2PM also exposes network frequency (freq), per-minute energy values (aenergy.by_minute), physical input states (input:0, input:1), WiFi signal strength (RSSI), and a switch toggle endpoint in its RPC responses. Energy counters can be reset via /rpc/Switch.ResetCounters (switch profile) or /rpc/Cover.ResetCounters (cover profile). In cover mode, slat/tilt position for venetian blinds is available when the hardware supports it. These capabilities can be added in a future template update.
Troubleshooting
Device not responding
- Verify the Shelly is connected to Wi-Fi and has a valid IP address
- Try using the mDNS hostname (
shellyplus2pm-AABBCCDDEE.local) instead of the IP address — the IP may have changed after a DHCP renewal - Open
http://{device-ip}/rpc/Shelly.GetDeviceInfoin a browser — if it responds with JSON, the device is reachable - Check that TapHome Core and Shelly are on the same network / VLAN
- Confirm authentication is disabled on the Shelly device
Profile mismatch — devices not responding
If some devices show no readings while others work correctly:
- Check which profile is currently active — the “Profile” service attribute at the module level shows the current mode
- Switch to the correct profile using the Profile service action, or ignore the unused devices
- After switching profiles, the device reboots automatically — allow a few seconds for reconnection
Cover position not working
- Verify the device is in cover profile — switch profile does not expose cover functionality
- Run the Calibrate service action on the Shutter device — position control requires completed calibration
- Check that the motor is connected correctly to O1 and O2 terminals
- Poll
/rpc/Cover.GetStatus?id=0manually and verifypos_controlistrue
Cover calibration fails
Calibration aborts if:
- The cover fails to reach the end position within
maxtime_openormaxtime_close - A safety feature (obstruction detection or safety switch) is triggered during calibration
- An external stop command is issued during calibration
- The motor direction does not match expected feedback
- The device reboots during calibration
Check motor wiring, increase maxtime_open/maxtime_close if the motor is slow, and ensure no obstructions are present.
Power readings show zero
- Confirm the load is connected through the Shelly relay (not bypassed)
- Check that the relay is turned on — the meter only reads when current flows through the relay
- Poll
/rpc/Switch.GetStatus?id=0(switch profile) or/rpc/Cover.GetStatus?id=0(cover profile) manually and verifyapowerreturns a non-zero value
Gen2+ Shelly devices support up to 6 concurrent HTTP connections. While this is an improvement over Gen1 (2 connections), avoid polling from too many systems simultaneously (TapHome, Home Assistant, custom scripts) to prevent connection exhaustion.