
The Shelly 2PM Gen3 is a compact dual-channel Wi-Fi relay module with built-in power metering. It fits behind a standard wall switch and can control two independent circuits up to 10 A each (16 A total at 230 V AC) or a single motorized cover/blind. TapHome communicates with the device over HTTP using the Gen2+/Gen3 JSON-RPC 2.0 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, tilt/slat support, and calibration.
Unlike the Shelly 1PM Gen3, which controls a single circuit, the 2PM Gen3 provides dual-channel control or motorized cover support. Both share the same Gen3 platform with an ESP processor (8 MB flash), up to 6 concurrent HTTP connections, and Matter upgradeability.
Configuration
The Shelly 2PM Gen3 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+/Gen3 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–3 seconds). Disable ECO mode in the Shelly web UI if you experience intermittent connectivity issues.
Profile selection
The Shelly 2PM Gen3 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) with independent power monitoring. The cover and blind devices will show a profile error.
- Cover profile — enables the cover (roller shutter) and blind (venetian with tilt) devices. The switch devices will show a profile error.
The active profile is visible as a module-level service attribute (“Profile”) in TapHome. To change the profile, use the Set 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 without errors.
The template includes all four device types (2 switches + cover + blind), but only the devices matching the active profile will work. Devices on the wrong profile display an error message such as “Profile is not set to switch” or “Profile is not set to cover” — this is expected behavior, not a malfunction.
Cover calibration
When using the cover profile, the motor travel limits must be calibrated before position control works. Until calibration is complete, the template will display a “Calibration is required” error. Calibrate either through the Shelly web UI or by triggering the Start automatic calibration service action in TapHome. During calibration, the cover runs fully open and fully closed 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 also exposes service attributes for per-channel monitoring:
- Temperature — internal device temperature in °C (
temperature.tC) - Energy consumption — cumulative energy in Wh (
aenergy.total) - Power demand — real-time power in W (
apower) - Electric voltage — supply voltage in V (
voltage) - Electric current — load current in A (
current) - Frequency — AC network frequency in Hz (
freq) - Power Factor — power factor value (
pf)
The switches update every 2.5 seconds.
Cover control (cover profile)
The cover device controls a motorized roller shutter, curtain, or awning. It reads position from /rpc/Cover.GetStatus?id=0 (current_pos and target_pos fields, 0–100) and writes via /rpc/Cover.GoToPosition?id=0&pos=N. The template inverts the position scale so that 0 = fully open and 100 = fully closed in TapHome.
The cover exposes service attributes:
- Temperature — internal device temperature in °C
- Energy consumption — cumulative motor energy in Wh
- Power demand — real-time motor power in W
- Electric voltage — supply voltage in V
- Electric current — motor current in A
A Start automatic calibration service action is available to initiate cover calibration directly from TapHome.
Blind control (cover profile)
The blind device extends the cover with tilt/slat control for venetian blinds. In addition to position, it reads and writes slat position (slat_pos) via /rpc/Cover.GoToPosition?id=0&pos=N&slat_pos=M. Both position and tilt scales are inverted (0 = open, 100 = closed in TapHome).
The blind exposes the same service attributes as the cover, plus:
- Slat — shows whether slat control is enabled or disabled (from
Cover.GetConfig → $.slat.enable) - Slat open time — configured slat opening duration in seconds
- Slat close time — configured slat closing duration in seconds
Known template issue: The “Slat close time” service attribute reads
$.slat.open_timeinstead of$.slat.close_timefrom the Cover configuration. Both slat time attributes currently display the same value (the open time). This will be corrected in a future template revision.
Two service actions are available on the blind device:
- Start automatic calibration — initiates cover position calibration
- Set Slat — enables slat control and configures open/close times (0.1–5 seconds each) via
/rpc/Cover.SetConfig
Slat/tilt control must be enabled before the blind device can control tilt position. If slat position is not available from the device, the blind will show an error “Slat position must be enabled for blinds”. Use the Set Slat service action to enable it and set the open/close durations.
Service diagnostics
The template exposes module-level service attributes for device monitoring:
- WiFi — connected SSID name
- IP address — current station IP
- Signal strength — WiFi RSSI in dB
- MAC — device MAC address
- Profile — currently active device profile (switch or cover)
The module read script also checks for available firmware updates and pending restart requirements, surfacing these as warnings in the TapHome interface.
Service actions
Three service actions are available at the module level:
- Update firmware — triggers a firmware update to the latest stable release via
/rpc/Shelly.Update - Reboot — triggers a device reboot via
/rpc/Shelly.Reboot - Set Profile — switches between cover and switch operating modes via
/rpc/Shelly.SetProfile
Additional capabilities
The Shelly 2PM Gen3 also exposes physical input states (input:0, input:1), returned/exported energy counters, device uptime, RAM usage, and device time in its RPC responses. An auto-off timer is available via the toggle_after parameter, overpower protection can be configured via Switch.SetConfig → power_limit, and energy counters can be reset via /rpc/Switch.ResetCounters. In cover mode, direct open/close/stop commands and cover movement state (open/opening/closed/closing/stopped/calibrating) are available. 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 (
shelly2pmg3-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 errors
If a device shows “Profile is not set to switch” or “Profile is not set to cover”:
- 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 Set Profile service action, or remove unused devices from TapHome
- 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 Start automatic calibration service action — 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
Blind tilt not responding
- Confirm slat control is enabled — check the “Slat” service attribute (should show “Enabled”)
- If disabled, use the Set Slat service action to enable it and configure open/close times
- Verify the blind motor supports tilt operation — roller shutters without tilt ignore slat commands
Overtemperature warning
The Shelly 2PM Gen3 has internal thermal protection. If the device temperature exceeds safe limits, the temperature reading in the device service attributes will increase. Ensure adequate ventilation around the device, especially when switching high loads continuously. The maximum switching current is 10 A per channel with 16 A total (18 A peak).
Gen2+/Gen3 Shelly devices support up to 6 concurrent HTTP connections. While this is a significant improvement over Gen1 (2 connections), avoid polling from too many systems simultaneously (TapHome, Home Assistant, custom scripts) to prevent connection exhaustion. The Shelly 2PM Gen3 template uses up to 4 concurrent endpoints per poll cycle, leaving limited headroom for additional connections.