
The Shelly TRV (SHTRV-01) is a battery-powered Wi-Fi thermostatic radiator valve from Allterco Robotics. It mounts directly on a standard hot-water radiator valve body and regulates room temperature by driving the valve pin via an internal motor. TapHome communicates with the device over HTTP on the local network — no bridge, no cloud, no MQTT broker required.
Shelly TRV is discontinued and has been succeeded by the Bluetooth-based Shelly BLU TRV. Existing units keep working and this template remains fully supported; for new projects consider the successor.
Two alternative templates are provided for the same physical device — choose one based on the intended control pattern.
| Template | Exposes | Use case |
|---|---|---|
| Shelly TRV (main) | Battery + closed-loop thermostat | End-user room temperature control via setpoint (5-30 °C). Firmware drives the valve internally. |
| Shelly TRV (valve) | Battery + valve dimmer + thermostat (setpoint variant) | Smart rules that need direct valve override — expose valve position as a 0.0-1.0 dimmer. |
Do not import both templates for the same physical device. Both bind to the same endpoint and poll loops will collide — writes will conflict and valve behaviour becomes unpredictable.
Hardware installation
The Shelly TRV has no wiring — it is a mechanical radiator head with internal electronics, powered by an internal Li-ion battery (Panasonic NCR18650BD, 3.7 V / 6500 mAh). It mounts directly on the radiator valve body via a metal retaining ring.
Compatible valve bodies
Native thread: M30 × 1.5. The following adapters are included in the retail box:
- Danfoss — RA, RAV, RAVL
- Caleffi
- Giacomini
- M28 × 1.5 — Sam, Slovarm, Comap, TA, Herz, MMA, Remagg
- Pont à Mousson
Third-party adapters (not included) extend compatibility to Gampper, Ista, Meges, Ondal, Oventrop, Rossweiner, Vaillant and others.
Mounting procedure
- Ensure the radiator is turned off and cooled down.
- Turn the existing manual valve head counter-clockwise until fully open, then unscrew the metal retaining ring to remove it.
- Fit the correct adapter if the valve thread is not native M30 × 1.5.
- Seat the Shelly TRV on the valve body and tighten the metal ring clockwise — firmly but not over-tightened. Too loose or too tight both cause calibration to fail.
- Rotate the display to the desired orientation before fully tightening the ring.
- Briefly press Reset (back of device). The display shows
CL(calibrating) and the internal motor moves in both directions. Successful calibration ends withAPon the display; failure showsE1.
Calibration must be performed after every remount on a different valve body. Until
calibrated=true, TapHome setpoint and position writes are rejected withDevice is not calibrated.
Charging
The device charges over USB-C (cable supplied, adapter not). A ≥1 A USB-C compliant charger brings the battery from empty to full in approximately 5 hours. Typical battery life is ~2 years (~5 months of a continuous heating season under typical use).
During charging the body of the device warms up and the internal temperature sensor reads incorrectly. Expect skewed room-temperature values while
chargeris notdisconnected.
Configuration
TapHome import
During template import TapHome asks for a single parameter:
| Parameter | Description | Default |
|---|---|---|
IpAddress | Local IP address or mDNS hostname of the device | 192.168.0.1 |
Port 80 is fixed. HTTPS is not supported on Gen1. HTTP Basic Auth must be disabled on the device — TapHome does not authenticate HTTP requests to Gen1 Shelly devices.
Use the mDNS hostname (shellytrv-XXXXXX.local) where possible — it is resilient to DHCP lease changes. The TapHome IP Scanner (Settings → Network → Scan) discovers both the IP and the mDNS hostname.
Disable the weekly schedule
Shelly TRV has a built-in weekly scheduler (5 profiles, up to 18 scheduled changes per week per profile). When the schedule is enabled, the firmware overwrites any externally-written setpoint at the next scheduled event — TapHome setpoints are silently reverted.
The template surfaces this as a warning (Schedule is enabled). Before putting the device under TapHome control, either:
- trigger the Disable schedule service action on the module (sends
/settings/thermostats/0?schedule=false), or - select the Disable profile in the Shelly Cloud app or device Web UI.
External room sensor (recommended)
The built-in temperature sensor is physically close to the hot radiator pipe and typically reads 1-3 °C higher than the actual room temperature. Two correction paths are available:
- External sensor — pair a separate Wi-Fi thermometer (such as Shelly H&T) via the device Web UI → Sensor Settings → Enable external temperature corrections endpoint. The external sensor then POSTs the ambient temperature to the TRV.
- Static offset — use the Set temperature offset service action on the Thermostat device (range ±20 °C) to compensate for a constant bias.
For best thermal comfort combine a reliable external sensor with a small static offset as fallback.
Device capabilities
The main template exposes the device as a battery indicator plus a closed-loop thermostat. The valve template keeps the same module and battery, but exposes valve position as a dimmer and uses a setpoint variant that disables automatic PID control when written. Module-level diagnostics and actions are identical for both templates.
Battery status
The battery is exposed as a multi-value switch derived from the reported charge level and USB-C charger state. The charger state takes precedence over the level:
| State | Condition |
|---|---|
| Critical | bat.value < 25 |
| Low | bat.value 25-50 |
| Normal | bat.value 50-75 |
| Full | bat.value > 75 |
| Charging | charger != disconnected |
Two supplementary service attributes report the raw battery charge (%) and cell voltage (V, nominal ~3.7 V, typical range 2.6-4.2 V). The template raises Low battery at <50 % and Battery charge is critically low at <25 %.
Thermostat (main template)
A closed-loop room thermostat: TapHome writes the target setpoint, the TRV firmware drives valve position internally based on its built-in (or external) temperature sensor.
- Read: measured room temperature (
thermostats[0].tmp.value) and active target (thermostats[0].target_t.value) - Write: setpoint 5-30 °C via
/settings/thermostats/0?target_t={Se}
Supplementary thermostat attributes include Temperature offset [°C], Valve position [%] (read-only, for visibility into the PID output), Force close, Extra pressure and Automatic calibration correction. Corresponding service actions let TapHome set the offset, toggle the force-close mode (valve stays fully closed regardless of setpoint) and toggle extra-pressure mode (boosts actuation for stiff valves).
Setpoint writes fail with Device is not calibrated while calibrated=false, and the template adds a warning when the weekly schedule is enabled (since the firmware will overwrite external writes on the next schedule event).
Valve dimmer (valve template)
An alternative template exposes the valve actuator directly as a dimmer device (0.0-1.0 → 0-100 %). TapHome writes position via /thermostats/0?pos={Le*100} — the firmware moves the motor to the requested position and implicitly disables automatic target-temperature control.
The valve template adds Force close, Extra pressure and Automatic calibration correction service attributes (plus the matching toggle actions) on the valve device, so that smart-rule authors can drive the motor directly for scenarios such as emergency close, manual pre-heating or boost sequences.
Thermostat (valve template variant)
The valve template still exposes a thermostat device so that setpoint can be written from the same TapHome device group, but its write script sends both target_t and target_t_enabled=false so that firmware PID does not fight a manually-driven valve. Service attribute set is reduced to Temperature offset [°C] (valve-body attributes such as force_close and valve_state migrate to the valve device instead). The template warns when target_t.enabled=true is observed — that indicates a conflict between the valve dimmer and automatic control.
Module diagnostics and actions
The module (head unit) polls /status and /settings every 3 seconds and exposes device-wide diagnostics and actions:
- Diagnostics: Wi-Fi SSID, IP address, MAC, received signal strength (RSSI in dBm), calibration state, schedule on/off, display brightness (1-7) and display flipped state.
- Actions: Disable schedule, Reboot, Calibrate (triggers
/calibrate), Update firmware (pullsSHTRV-01_build.gblfrom the official Shelly EU firmware server), Set display brightness and Flip display.
Additional capabilities
The device also exposes — but the current templates do not yet surface — several Gen1 features: passive open-window detection (/window), the symmetrical Force open action, fallback ambient temperature (auto_temp), child lock, window-open auto-close delay, scheduled-setpoint sensor (schedule_t), active-profile index, remaining boost minutes and the Trigger boost action (/thermostats/0?boost_minutes=N), internal electronics thermal state (tmp_state), and firmware-update availability as a sensor. CoIoT push and MQTT transport are both supported at device level but not used — TapHome pulls /status every 3 s instead. These can be added in a future template update.
Troubleshooting
Device is not calibrated
Every setpoint and valve-position write returns Device is not calibrated until the TRV completes a successful calibration cycle.
- Make sure the device is firmly seated on the valve body — the retaining ring must be tight enough for the motor to load against the valve pin, but not so tight that it deforms.
- Trigger the Calibrate service action on the module (sends
/calibrate). The display briefly showsCLwhile the motor moves in both directions. - On success
calibratedbecomestrueand writes succeed; failure showsE1on the display — usually indicates an incorrect mount.
Setpoint gets reverted every few hours
This is the weekly schedule overwriting external writes. Check Schedule service attribute — if on, trigger the Disable schedule action on the module, or disable the active profile in the Shelly Cloud app.
Room temperature reads too high
Two common causes:
- Charger connected. Room-temperature readings are invalid while
charger != disconnected. Unplug USB-C and allow the device to cool down. - Built-in sensor bias. The sensor sits close to hot pipes and typically reads 1-3 °C high. Either enable the external temperature corrections endpoint and pair a Shelly H&T (or compatible Wi-Fi thermometer) in the same room, or apply a static Set temperature offset (e.g.
-1.5 °C).
Display shows E1 / E2
E1 — calibration problem. Remount the device, tighten the ring carefully and trigger a new calibration cycle.
E2 — temperature sensor problem. tmp.is_valid becomes false in /status and the template adds a Temperature sensor error error. If the issue persists after a reboot, the sensor has likely failed — contact Shelly support.
Device unreachable
- Verify the TRV is connected to Wi-Fi — press Up + Down for 5 s and scroll through the status parameters;
COindicates a connected Wi-Fi client. - Confirm TapHome CCU and TRV are on the same network / VLAN — Shelly Gen1 does not route across subnets by default.
- Try the mDNS hostname (
shellytrv-XXXXXX.local) instead of the IP — the DHCP lease may have changed. - Open
http://{device-ip}/statusin a browser. If the JSON response arrives, the device is reachable and the problem is in TapHome configuration.
Gen1 Shelly devices accept only 2 concurrent HTTP connections. If TapHome and another system (Home Assistant, Node-RED) poll the same device at the same time, communication becomes unreliable. Keep poll interval at the template default (3 s) and avoid additional pollers.
Enabling MQTT on Gen1 Shelly devices irreversibly disables Shelly Cloud. TapHome uses HTTP only — leave MQTT off unless you explicitly want to migrate away from Shelly Cloud.