TapHome

Shelly Sensor Add-On

Packet Parser → HTTP
Submitted by
Last updated: 04. 2026
Shelly Sensor Add-On

The Shelly Sensor Add-On (marketed as Shelly Plus Add-On) is a galvanically isolated expansion board that plugs onto the add-on header of a compatible Shelly Plus, Gen3, or Gen4 device. It extends the host Shelly with a 1-Wire temperature bus (DS18B20), a digital input (reed / dry contact), an analog input (0–10 V / 0–100 %), and a 0–10 V voltmeter. The add-on is not a standalone Wi-Fi device — it is read through the host Shelly’s HTTP interface on the local network, so TapHome targets the host device’s IP, not a dedicated IP for the add-on.

The TapHome template exposes four DS18B20 temperature sensors (Component IDs 100–103), one reed contact, one analog input, and one voltmeter. All readings are polled over the standard Shelly Gen2+ JSON-RPC API on port 80 — no cloud connection is required.

Hardware connection

The add-on seats onto the host Shelly via a proprietary serial header and draws 3.3 V DC directly from the host (consumption below 0.5 W without sensors). The user-accessible terminals are grouped into an analog/digital block and three 1-Wire sensor positions.

Analog and digital terminals
  • ANALOG IN — 0–10 V analog input (accuracy ±5 %, 1 % reporting threshold)
  • DIGITAL IN — dry contact / reed switch input (True: −15 V to 0.5 V, False: 2.5 V to 15 V)
  • VREF OUT — reference voltage (1 mA max) for powering potentiometer-style sensors
  • VREF+R1 OUT — reference voltage with 10 kΩ pull-up resistor, designed for NTC and photoresistor voltage dividers
  • GND × 2 — ground returns
1-Wire bus

Three three-terminal groups (VCC, DATA, GND) share a common 1-Wire data line internally. Up to 5 DS18B20 probes can be wired in parallel on the shared bus; alternatively, a single DHT22 sensor can occupy the bus (DHT22 blocks the OneWire scan while active). The total VCC output is limited to 10 mA, which is sufficient for five DS18B20 probes.

Max conductor size on all terminals is 1 mm² (17 AWG).

Do not mix a DHT22 with DS18B20 probes on the bus. The DHT22 blocks OneWire enumeration and the host Shelly will fail to rescan the bus while it is connected.

Configuration

The Shelly Sensor Add-On has no IP address of its own. During TapHome template import, enter the host Shelly’s IP address (the Plus / Gen3 / Gen4 device the add-on is seated onto) in the IpAddress parameter (default placeholder 192.168.0.1).

All communication uses the Gen2+ JSON-RPC API over HTTP GET on port 80. Once per poll cycle the template reads /rpc/Sys.GetStatus and /rpc/SensorAddon.GetPeripherals into internal cache variables, then each device script queries its dedicated endpoint (Temperature.GetStatus, Input.GetStatus, or Voltmeter.GetStatus).

Compatible host devices

The add-on works with the following Shelly devices (from the manufacturer’s compatibility list):

  • Shelly Plus: 1, 1PM, 1 UL, 1PM UL, 2PM, 2PM UL, i4, i4DC, 0-10 V Dimmer PM, RGBW PM
  • Shelly Gen3: 1, 1PM, 2PM, Shutter, i4, DALI Dimmer, Dimmer 0/1-10 V PM, EM
  • Shelly Gen4: 1, 1PM, 2PM

The host Shelly’s firmware must expose the SensorAddon service — older Plus firmware releases may not have it. Update the host to the latest firmware if the add-on menu is missing in the web UI.

Enabling Add-on peripherals

The add-on is a one-time setup in the host Shelly’s web interface — TapHome does not configure it. Complete the following before importing the template:

  1. Seat the add-on board onto the host Shelly’s add-on header and power the host.
  2. Open the host’s web UI at http://{host-ip}/ and sign in.
  3. Navigate to Settings → Add-on and register the add-on (this calls Sys.SetConfig with device.addon_type = "sensor" under the hood). Reboot the host if prompted.
  4. Open Settings → Components → Peripherals and click the + button.
  5. Pick the peripheral type — Temperature (DS18B20), Digital Input, Analog Input, or Voltmeter.
  6. For DS18B20, click Rescan, tick each discovered probe, then choose Add and reboot. The first probe gets Component ID 100, the second 101, and so on.
  7. For Digital Input, set Mode to Switch or Button (the template reads state from this Component).
  8. For Analog Input and Voltmeter, the defaults are fine — only the name and delta threshold are relevant.

The TapHome template hard-codes Component IDs 100–103 for DS18B20 and ID 100 for the reed contact, analog input, and voltmeter. When adding peripherals in the Shelly web UI, verify that the assigned IDs match this numbering — if you delete a peripheral and re-add it, the Shelly assigns the next free ID, which can push the ID above 103 and the TapHome device will silently stop receiving data.

Before removing a peripheral, note down its Component ID. If you rewire a DS18B20 probe, prefer the web UI’s Edit → Update address action so the Component ID stays the same.

HTTP Digest Authentication must be disabled on the host Shelly — TapHome does not send authenticated requests. Leave the device ungated or restrict access at the network level.

Device capabilities

The template groups seven read-only sensor devices under a single HTTP module that targets the host Shelly.

Temperature probes (DS18B20)

Four DS18B20 OneWire temperature probes are exposed, one per Component ID 100–103:

  • Temperature Sensor DS18B20 (100) — reads /rpc/Temperature.GetStatus?id=100tC (°C)
  • Temperature Sensor DS18B20 (101) — reads /rpc/Temperature.GetStatus?id=101tC
  • Temperature Sensor DS18B20 (102) — reads /rpc/Temperature.GetStatus?id=102tC
  • Temperature Sensor DS18B20 (103) — reads /rpc/Temperature.GetStatus?id=103tC

Each device has a user-configurable Id custom variable (default matches the position). Poll interval is 15 seconds per probe. The Shelly web UI allows fine-tuning each probe’s delta threshold (0.1–5 °C) and offset (±50 °C) for calibration.

Reed contact (digital input)

Reed Contact (100) reads /rpc/Input.GetStatus?id=100state (boolean). In the Shelly UI the input must be configured as Switch or Button (not Analog or Count). Poll interval is 2.5 seconds. The default Id custom variable is 100.

Analog input

Analog Input (100) reads /rpc/Input.GetStatus?id=100percent, divided by 100 so the value is normalised to the 0.0–1.0 fraction TapHome expects for analog inputs. The input must be configured as Analog in the Shelly UI. Accuracy is ±5 %, with a 1 % reporting threshold. Poll interval is 2.5 seconds.

Note that the reed contact and the analog input share Component ID 100 — the Shelly hardware has only one digital and one analog input on the add-on, and the active mode is set by the input’s type in the web UI (switch/button vs analog). Use either the reed contact device or the analog input device in TapHome, not both at the same time.

Voltmeter

Voltmeter (100) reads /rpc/Voltmeter.GetStatus?id=100voltage (V). The range is 0–10 V with ±5 % accuracy and a 0.1 V reporting threshold. It is modelled as a PacketParserVariable with the sensor capability — the raw voltage is exposed as a scalar value, not as a dedicated voltmeter device type. Poll interval is 15 seconds.

Additional capabilities

The Shelly Sensor Add-On also natively supports a DHT22 temperature and humidity sensor (a single probe that creates paired temperature:100 and humidity:100 Components on the host). The TapHome template wires temperature through on all four DS18B20 devices but hard-codes the humidity script to NaN — DHT22 humidity is therefore not exposed. Users needing humidity can extend the template with a separate read script on /rpc/Humidity.GetStatus?id=100.

Two further capabilities exist at the hardware/firmware level but are out of scope for this template: a fifth DS18B20 slot (the Shelly bus supports up to five probes; the template only polls IDs 100–103), and the digital input’s pulse counter mode (counts.total, counts.by_minute, freq), which requires configuring the input as type=count in the Shelly UI. Both can be added in a future template update.

Troubleshooting

Host Shelly not responding
  1. Verify the host Shelly is connected to Wi-Fi and has a valid IP address.
  2. Try using the host’s mDNS hostname (e.g. shellyplus1pm-AABBCCDDEE.local) instead of the IP — the IP may have changed after a DHCP renewal. The add-on inherits the host’s hostname, it does not have its own.
  3. Open http://{host-ip}/rpc/Shelly.GetDeviceInfo in a browser — if it responds with JSON, the host is reachable.
  4. Check that TapHome CCU and the host Shelly are on the same network / VLAN.
  5. Ensure HTTP Digest Authentication is disabled in the Shelly web UI.
Sensors show no data
  1. Open the Shelly web UI → Components → Peripherals. Confirm the peripheral is listed with the exact Component ID the template expects (temperature:100103, input:100, voltmeter:100). If the ID is above 103 or shifted, renumber the peripherals by deleting and re-adding them in the right order, or edit the template to match your IDs.
  2. For DS18B20: click Rescan on the DS18B20 peripheral row — the bus address should resolve. If the address shows N/A, check VCC/DATA/GND wiring and the 10 kΩ pull-up on DATA (some generic DS18B20 boards omit it; the Shelly provides it internally).
  3. Poll the endpoint directly: GET http://{host-ip}/rpc/Temperature.GetStatus?id=100. The response should include a non-null tC value.
  4. Reboot the host Shelly after adding or removing peripherals. Components may not appear until after a reboot.
Analog input reads zero
  1. Confirm the input type in the Shelly UI is set to analog (not switch, button, or count). The template reads percent, which is only populated in analog mode.
  2. Check the wiring — a 0–10 V source must be between ANALOG IN and GND. For potentiometer-style sensors (NTC, photoresistor), use VREF+R1 OUT (with the built-in 10 kΩ pull-up) instead of VREF OUT.
  3. Remember that TapHome receives the value as a 0.0–1.0 fraction (the template divides percent by 100).
DHT22 humidity is missing

This is an intentional limitation of the template — the readhumidity script is hardcoded to NaN on every DS18B20 device slot. The add-on hardware supports DHT22, but to expose humidity in TapHome you need to extend the template with a dedicated device that reads /rpc/Humidity.GetStatus?id=100rh. The DS18B20 and DHT22 cannot coexist on the same bus — remove DS18B20 probes if you switch to DHT22.

Fifth DS18B20 probe not visible

The template only polls IDs 100–103. A fifth probe registered in the Shelly web UI as temperature:104 will exist on the host but will not be read by TapHome. Either move the probe you care about into one of the 100–103 slots (delete and re-add in order), or extend the template with a fifth device that targets id=104.

How to install in TapHome

Prerequisites

  • Shelly device installed and powered on
  • Local Wi-Fi network (2.4 GHz)
  • TapHome CCU on the same network

Step 1 — Connect Shelly to Wi-Fi

Option A — Shelly app (recommended):

  1. Download the Shelly app (iOS / Android)
  2. Tap +Add Device and follow the Bluetooth pairing wizard
  3. Enter your Wi-Fi credentials when prompted

Option B — AP mode (no app):

  1. On first power-up the device creates a hotspot: ShellyXXX-AABBCCDDEE
  2. Connect your phone/PC to that hotspot
  3. Open http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Enter SSID and password → Save

Shelly only supports 2.4 GHz networks. 5 GHz networks will not appear in the scan.

Step 2 — Find the device address

Shelly Gen1 devices support mDNS (Zeroconf). You can reach the device using a hostname instead of an IP address:

1
shelly<model>-<MAC>.local

For example: shelly1pm-AABBCCDDEE.local (MAC address in uppercase hex, no colons).

Recommended: use the TapHome IP Scanner. Open the TapHome app and use the IP Scanner (Settings → Network → Scan). The scanner will discover devices on your network and show both the IP address and the mDNS hostname. Use the hostname instead of the IP address for a more reliable connection — it stays the same even if the device’s IP changes after a router reboot.

Alternative methods to find the IP address:

  • Shelly app: Device detail → Device info → IP address
  • Shelly web UI: Connect to the device AP before Wi-Fi setup — the IP is shown after saving
  • Router DHCP table: Look for a hostname like shelly1pm-AABBCCDDEE

Step 3 — Configure in TapHome

  1. In TapHome, add a new Packet Parser (HTTP) module
  2. Address: enter the mDNS hostname (e.g., shelly1pm-AABBCCDDEE.local) or IP address from Step 2
  3. Port: 80 (default, no change needed)
  4. Import the template — TapHome will poll /status to read device state

HTTP authentication is disabled by default on Shelly devices. If you have enabled login protection, TapHome does not support HTTP Basic Auth at this time — keep auth disabled for TapHome integration.

Available devices

Shelly Sensor Add-On Module
Custom Variables

Shelly Sensor Add-On

Read (module)
var res := sendhttprequest("/rpc/Sys.GetStatus");
SysGetStatus := res.Content;
res := sendhttprequest("/rpc/SensorAddon.GetPeripherals");
SensorAddonGetPeripherals := res.Content;
Analog Input Analog Input Read-only

0–10 V / 0–100 % analog input — reads /rpc/Input.GetStatus?id=100 → percent and divides by 100, exposing the value as a 0.0–1.0 fraction. Requires input type set to analog in the Shelly web UI. Accuracy ±5 %

numeric Unit: % (normalised) json_path
Variable: IdComponent ID of the analog input peripheral on the host Shelly (add-on peripherals use 100–199; first analog input is 100)

Analog Input

Read input level
var res := sendhttprequest("/rpc/Input.GetStatus?id=" + Id);
parsejson(res.Content, "percent") / 100
Reed Contact Reed Contact Read-only

Digital dry-contact / reed input — reads /rpc/Input.GetStatus?id=100 → state (true = closed, false = open). Requires input type set to switch or button in the Shelly web UI (shares Component ID 100 with the analog input — only one active mode at a time)

boolean json_path
Variable: IdComponent ID of the digital input peripheral on the host Shelly (default 100)

Reed Contact

Read
var res := sendhttprequest("/rpc/Input.GetStatus?id=" + Id);
parsejson(res.Content, "state")
Temperature Sensor (DS18B20 #1) Temperature Sensor Read-only

First DS18B20 probe on the 1-Wire bus — reads /rpc/Temperature.GetStatus?id=100 → tC (°C). Humidity is hardcoded to NaN (template does not expose DHT22)

numeric Unit: °C json_path
Variable: IdComponent ID of the first DS18B20 probe on the host Shelly (default 100)

Temperature Sensor (DS18B20 #1)

Read humidity
NaN
Read temperature
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Temperature Sensor (DS18B20 #2) Temperature Sensor Read-only

Second DS18B20 probe on the 1-Wire bus — reads /rpc/Temperature.GetStatus?id=101 → tC (°C)

numeric Unit: °C json_path
Variable: IdComponent ID of the second DS18B20 probe on the host Shelly (default 101)

Temperature Sensor (DS18B20 #2)

Read humidity
NaN
Read temperature
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Temperature Sensor (DS18B20 #3) Temperature Sensor Read-only

Third DS18B20 probe on the 1-Wire bus — reads /rpc/Temperature.GetStatus?id=102 → tC (°C)

numeric Unit: °C json_path
Variable: IdComponent ID of the third DS18B20 probe on the host Shelly (default 102)

Temperature Sensor (DS18B20 #3)

Read humidity
NaN
Read temperature
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Temperature Sensor (DS18B20 #4) Temperature Sensor Read-only

Fourth DS18B20 probe on the 1-Wire bus — reads /rpc/Temperature.GetStatus?id=103 → tC (°C). Last DS18B20 slot in the template — the Shelly bus supports up to 5 probes but only IDs 100–103 are polled

numeric Unit: °C json_path
Variable: IdComponent ID of the fourth DS18B20 probe on the host Shelly (default 103)

Temperature Sensor (DS18B20 #4)

Read humidity
NaN
Read temperature
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Voltmeter Variable Read-only

0–10 V voltage measurement — reads /rpc/Voltmeter.GetStatus?id=100 → voltage (V). Exposed as a read-only scalar via PacketParserVariable (not a native voltmeter device). Accuracy ±5 %, reporting threshold 0.1 V

numeric Unit: V json_path
Variable: IdComponent ID of the voltmeter peripheral on the host Shelly (default 100)

Voltmeter

Read
var res := sendhttprequest("/rpc/Voltmeter.GetStatus?id=" + Id);
parsejson(res.Content, "voltage")
Connection: Packet Parser → HTTP
Possible improvements (7)
  • DHT22 Humidity — Template hardcodes readhumidity = NaN on all four DS18B20 temperature devices. The add-on physically supports a DHT22 sensor (temperature + humidity) which creates paired humidity:100 + temperature:100 Components on the host. A separate PacketParser device reading humidity:100 → rh would expose this.
  • 5th DS18B20 slot — The Shelly Plus Add-on supports up to 5 DS18B20 probes on the shared 1-Wire bus. The template only wires 4 (IDs 100–103). A fifth probe registered as temperature:104 in the Shelly web UI would not be polled.
  • OneWire bus scan — Manufacturer API can discover unmapped DS18B20 probes. Not exposed as a TapHome service action — users must scan via the Shelly web UI. Useful for replacing physical probes.
  • Peripheral lifecycle management — Adding/removing/updating peripherals is performed exclusively via the Shelly web UI; the template does not expose these as TapHome service actions by design.
  • Enable / disable add-on — Activation is a one-time setup step performed in the Shelly web UI (or via Sys.SetConfig with device.addon_type = "sensor"). Not exposed by the template.
  • Pulse counter mode — Digital input can be configured as type=count and would expose counts.total / counts.by_minute / freq. Template only reads state (switch/button mode).
  • Voltmeter transformed value — Voltmeter supports an optional JavaScript expression (xvoltage.expr) that transforms the raw voltage (e.g. for a voltage-divided NTC temperature reading). Template reads only raw voltage.

Sources