Backend:
- New valve_position column, populated from shellies/<id>/info alongside
wifi_rssi (was already a column, never actually written to).
- New GET/POST /api/devices/:id/trv-status and /trv-control routes, mirroring
the mhi-status/mhi-control and daikin-status/daikin-control pattern. Control
goes through the existing setTargetWithRetry() reliability pipeline.
Frontend:
- New TrvControlPanel.tsx: +/- setpoint control debounced 1s after the last
click before firing a command (these are battery/deep-sleep valves going
through a real retry/backoff pipeline, not a cheap register write like MHI/
Daikin), plus room temp, valve position %, wifi signal, and a live "time
since last update" readout. Wired into ZoneDetailModal for shelly_trv rows.
- ZoneCard dashboard tile: radiator icon now just shows red when heating_active
(valve open) / grey when idle, with only the target setpoint alongside it
(dropped the room-temp half, redundant with the zone-level temp line above).