TapHome

Shelly Sensor Add-On

Packet Parser → HTTP
Eingereicht von
Zuletzt aktualisiert: 04. 2026
Shelly Sensor Add-On

Das Shelly Sensor Add-On (vermarktet als Shelly Plus Add-On) ist eine galvanisch getrennte Erweiterungsplatine, die auf den Add-on-Stecker eines kompatiblen Shelly Plus, Gen3 oder Gen4 aufgesteckt wird. Sie erweitert den Host-Shelly um einen 1-Wire-Temperaturbus (DS18B20), einen Digitaleingang (Reed-/Trockenkontakt), einen Analogeingang (0–10 V / 0–100 %) und ein 0–10 V Voltmeter. Das Add-on ist kein eigenständiges Wi-Fi-Gerät — es wird über die HTTP-Schnittstelle des Host-Shelly im lokalen Netzwerk gelesen, TapHome adressiert also die IP des Hosts, nicht eine eigene IP des Add-ons.

Die TapHome-Vorlage stellt vier DS18B20-Temperaturfühler (Component-ID 100–103), einen Reed-Kontakt, einen Analogeingang und ein Voltmeter bereit. Alle Werte werden über die Standard-Shelly Gen2+ JSON-RPC-API auf Port 80 abgefragt — eine Cloud-Verbindung ist nicht erforderlich.

Hardware-Anschluss

Das Add-on setzt sich über einen proprietären seriellen Stecker auf den Host-Shelly und bezieht 3,3 V DC direkt aus dem Host (Verbrauch unter 0,5 W ohne Sensoren). Die zugänglichen Klemmen sind in einen analog/digitalen Block und drei 1-Wire-Sensorpositionen gruppiert.

Analoge und digitale Klemmen
  • ANALOG IN — 0–10 V Analogeingang (Genauigkeit ±5 %, 1 % Meldeschwelle)
  • DIGITAL IN — Trockenkontakt-/Reed-Schalter-Eingang (True: −15 V bis 0,5 V, False: 2,5 V bis 15 V)
  • VREF OUT — Referenzspannung (max. 1 mA) zur Versorgung von Sensoren mit Potentiometer-Teilung
  • VREF+R1 OUT — Referenzspannung mit 10 kΩ Pull-up-Widerstand, ausgelegt für Spannungsteiler mit NTC und Fotowiderstand
  • GND × 2 — Massenanschlüsse
1-Wire-Bus

Drei dreipolige Gruppen (VCC, DATA, GND) teilen sich intern eine gemeinsame 1-Wire-Datenleitung. Bis zu 5 DS18B20-Fühler können parallel am gemeinsamen Bus verdrahtet werden; alternativ kann ein einzelner DHT22-Sensor den Bus belegen (DHT22 blockiert im aktiven Zustand den OneWire-Scan). Der gesamte VCC-Ausgang ist auf 10 mA begrenzt, was für fünf DS18B20-Fühler ausreicht.

Der maximale Leiterquerschnitt an allen Klemmen beträgt 1 mm² (17 AWG).

Mische DHT22 und DS18B20-Fühler nicht auf demselben Bus. Der DHT22 blockiert die OneWire-Enumeration, und der Host-Shelly kann den Bus bei angeschlossenem DHT22 nicht neu einlesen.

Konfiguration

Das Shelly Sensor Add-On besitzt keine eigene IP-Adresse. Trage beim Import der TapHome-Vorlage im Parameter IpAddress die IP-Adresse des Host-Shelly ein (das Plus-/Gen3-/Gen4-Gerät, auf dem das Add-on sitzt) — Standard ist 192.168.0.1.

Die gesamte Kommunikation läuft über die Gen2+ JSON-RPC-API per HTTP GET auf Port 80. Einmal pro Poll-Zyklus liest die Vorlage /rpc/Sys.GetStatus und /rpc/SensorAddon.GetPeripherals in interne Cache-Variablen, anschließend fragt jedes Geräte-Skript seinen eigenen Endpunkt ab (Temperature.GetStatus, Input.GetStatus oder Voltmeter.GetStatus).

Kompatible Host-Geräte

Das Add-on arbeitet mit folgenden Shelly-Geräten zusammen (aus der Herstellerliste):

  • 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

Die Firmware des Host-Shelly muss den Dienst SensorAddon bereitstellen — ältere Plus-Firmware-Versionen haben ihn möglicherweise nicht. Aktualisiere den Host auf die neueste Firmware, falls das Add-on-Menü in der Weboberfläche fehlt.

Add-on-Peripherie aktivieren

Das Add-on wird einmalig in der Weboberfläche des Host-Shelly konfiguriert — TapHome übernimmt das nicht. Führe vor dem Import der Vorlage folgende Schritte aus:

  1. Stecke die Add-on-Platine auf den Add-on-Stecker des Host-Shelly und schalte den Host ein.
  2. Öffne die Weboberfläche des Hosts unter http://{host-ip}/ und melde dich an.
  3. Navigiere zu Settings → Add-on und registriere das Add-on (dies ruft im Hintergrund Sys.SetConfig mit device.addon_type = "sensor" auf). Starte den Host auf Aufforderung neu.
  4. Öffne Settings → Components → Peripherals und klicke auf die Schaltfläche +.
  5. Wähle den Peripherietyp — Temperature (DS18B20), Digital Input, Analog Input oder Voltmeter.
  6. Klicke bei DS18B20 auf Rescan, setze bei jedem erkannten Fühler ein Häkchen und wähle Add and reboot. Der erste Fühler erhält Component-ID 100, der zweite 101 usw.
  7. Setze bei Digital Input Mode auf Switch oder Button (die Vorlage liest state aus diesem Component).
  8. Bei Analog Input und Voltmeter sind die Standardwerte in Ordnung — relevant sind nur Name und Delta-Schwelle.

Die TapHome-Vorlage fixiert Component-IDs 100–103 für DS18B20 und ID 100 für Reed-Kontakt, Analogeingang und Voltmeter. Prüfe beim Hinzufügen der Peripherie in der Shelly-Weboberfläche, dass die zugewiesenen IDs dieser Nummerierung entsprechen — wenn du eine Peripherie löschst und neu hinzufügst, vergibt Shelly die nächste freie ID, die über 103 liegen kann, und das TapHome-Gerät erhält stillschweigend keine Daten mehr.

Notiere vor dem Entfernen einer Peripherie deren Component-ID. Wenn du einen DS18B20-Fühler austauschst, bevorzuge in der Weboberfläche die Aktion Edit → Update address, damit die Component-ID gleich bleibt.

Am Host-Shelly muss die HTTP Digest Authentication deaktiviert sein — TapHome sendet keine authentifizierten Anfragen. Lasse das Gerät ohne Authentifizierung oder schränke den Zugriff auf Netzwerkebene ein.

Gerätefunktionen

Die Vorlage gruppiert sieben schreibgeschützte Sensorgeräte unter einem einzigen HTTP-Modul, das auf den Host-Shelly zielt.

Temperaturfühler (DS18B20)

Vier DS18B20-OneWire-Temperaturfühler werden bereitgestellt, einer je Component-ID 100–103:

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

Jedes Gerät hat eine benutzerkonfigurierbare Id-Custom-Variable (Standardwert entspricht der Position). Das Polling-Intervall beträgt 15 Sekunden pro Fühler. Die Shelly-Weboberfläche erlaubt die Feinabstimmung von Delta-Schwelle (0,1–5 °C) und Offset (±50 °C) pro Fühler zur Kalibrierung.

Reed-Kontakt (Digitaleingang)

Reed Contact (100) liest /rpc/Input.GetStatus?id=100state (boolean). In der Shelly-Oberfläche muss der Eingang als Switch oder Button konfiguriert sein (nicht Analog oder Count). Polling-Intervall: 2,5 Sekunden. Der Standardwert der Id-Custom-Variable ist 100.

Analogeingang

Analog Input (100) liest /rpc/Input.GetStatus?id=100percent und teilt den Wert durch 100, sodass er als Bruchteil 0,0–1,0 vorliegt, den TapHome für Analogeingänge erwartet. Der Eingang muss in der Shelly-Oberfläche als Analog konfiguriert sein. Genauigkeit ±5 %, Meldeschwelle 1 %. Polling-Intervall: 2,5 Sekunden.

Beachte, dass Reed-Kontakt und Analogeingang die Component-ID 100 teilen — die Shelly-Hardware hat am Add-on nur einen Digital- und einen Analogeingang, und der aktive Modus wird durch den Typ des Eingangs in der Weboberfläche festgelegt (switch/button vs. analog). Verwende in TapHome entweder das Reed-Kontakt- oder das Analog-Input-Gerät, nicht beide gleichzeitig.

Voltmeter

Voltmeter (100) liest /rpc/Voltmeter.GetStatus?id=100voltage (V). Der Bereich ist 0–10 V mit ±5 % Genauigkeit und 0,1 V Meldeschwelle. Es ist als PacketParserVariable mit der Fähigkeit sensor modelliert — die Rohspannung wird als skalarer Wert bereitgestellt, nicht als eigenständiger Voltmeter-Typ. Polling-Intervall: 15 Sekunden.

Zusätzliche Fähigkeiten

Das Shelly Sensor Add-On unterstützt nativ auch einen DHT22-Temperatur- und Feuchtigkeitssensor (ein einzelner Fühler, der auf dem Host die gepaarten Components temperature:100 und humidity:100 erzeugt). Die TapHome-Vorlage leitet die Temperatur auf allen vier DS18B20-Geräten weiter, fixiert das Feuchtigkeits-Skript jedoch auf NaN — DHT22-Feuchtigkeit wird daher nicht bereitgestellt. Wer Feuchtigkeit benötigt, kann die Vorlage um ein separates Read-Skript auf /rpc/Humidity.GetStatus?id=100 erweitern.

Zwei weitere Funktionen existieren auf Hardware-/Firmware-Ebene, liegen aber außerhalb dieser Vorlage: ein fünfter DS18B20-Slot (der Shelly-Bus unterstützt bis zu fünf Fühler; die Vorlage fragt nur IDs 100–103 ab) und der Impulszählmodus des Digitaleingangs (counts.total, counts.by_minute, freq), der erfordert, den Eingang in der Shelly-Oberfläche als type=count zu konfigurieren. Beides kann in einer zukünftigen Vorlagen-Aktualisierung ergänzt werden.

Fehlerbehebung

Host-Shelly antwortet nicht
  1. Prüfe, ob der Host-Shelly mit dem Wi-Fi verbunden ist und eine gültige IP hat.
  2. Versuche es mit dem mDNS-Hostnamen des Hosts (z. B. shellyplus1pm-AABBCCDDEE.local) statt der IP — die IP kann sich nach einem DHCP-Renew geändert haben. Das Add-on erbt den Hostnamen des Hosts und hat keinen eigenen.
  3. Öffne im Browser http://{host-ip}/rpc/Shelly.GetDeviceInfo — antwortet der Host mit JSON, ist er erreichbar.
  4. Prüfe, ob TapHome CCU und der Host-Shelly im selben Netzwerk / VLAN sind.
  5. Stelle sicher, dass HTTP Digest Authentication in der Shelly-Weboberfläche deaktiviert ist.
Sensoren zeigen keine Daten
  1. Öffne die Shelly-Weboberfläche → Components → Peripherals. Bestätige, dass die Peripherie mit exakt der Component-ID, die die Vorlage erwartet, gelistet ist (temperature:100103, input:100, voltmeter:100). Liegt die ID über 103 oder ist verschoben, nummeriere die Peripherie durch Löschen und erneutes Hinzufügen in der richtigen Reihenfolge neu, oder passe die Vorlage an deine IDs an.
  2. Für DS18B20: Klicke auf Rescan in der Zeile des DS18B20 — die Bus-Adresse sollte aufgelöst werden. Zeigt die Adresse N/A, prüfe die VCC/DATA/GND-Verdrahtung und den 10 kΩ Pull-up an DATA (einige generische DS18B20-Boards lassen ihn weg; der Shelly stellt ihn intern bereit).
  3. Frage den Endpunkt direkt ab: GET http://{host-ip}/rpc/Temperature.GetStatus?id=100. Die Antwort sollte einen Wert tC ungleich null enthalten.
  4. Starte den Host-Shelly nach dem Hinzufügen oder Entfernen von Peripherie neu. Components erscheinen manchmal erst nach einem Neustart.
Analogeingang liest null
  1. Prüfe, ob type des Eingangs in der Shelly-Oberfläche auf analog gesetzt ist (nicht switch, button oder count). Die Vorlage liest percent, das nur im Analog-Modus gefüllt ist.
  2. Prüfe die Verdrahtung — eine 0–10 V Quelle muss zwischen ANALOG IN und GND liegen. Für Potentiometer-Sensoren (NTC, Fotowiderstand) nutze VREF+R1 OUT (mit integriertem 10 kΩ Pull-up) statt VREF OUT.
  3. Bedenke, dass TapHome den Wert als Bruchteil 0,0–1,0 erhält (die Vorlage teilt percent durch 100).
DHT22-Feuchtigkeit fehlt

Das ist eine gewollte Einschränkung der Vorlage — das Skript readhumidity ist in jedem DS18B20-Geräte-Slot auf NaN fixiert. Die Add-on-Hardware unterstützt DHT22, für die Bereitstellung der Feuchtigkeit in TapHome muss die Vorlage jedoch um ein eigenes Gerät erweitert werden, das /rpc/Humidity.GetStatus?id=100rh liest. DS18B20 und DHT22 können nicht auf demselben Bus koexistieren — entferne die DS18B20-Fühler, wenn du auf DHT22 wechselst.

Fünfter DS18B20-Fühler ist nicht sichtbar

Die Vorlage fragt nur IDs 100–103 ab. Ein fünfter Fühler, der in der Shelly-Weboberfläche als temperature:104 registriert ist, existiert zwar am Host, wird aber von TapHome nicht gelesen. Verschiebe entweder den gewünschten Fühler auf einen Slot 100–103 (löschen und in Reihenfolge neu hinzufügen), oder erweitere die Vorlage um ein fünftes Gerät, das id=104 adressiert.

Installation in TapHome

Voraussetzungen

  • Shelly-Gerät installiert und eingeschaltet
  • Lokales Wi-Fi-Netzwerk (2,4 GHz)
  • TapHome CCU im selben Netzwerk

Schritt 1 — Shelly mit Wi-Fi verbinden

Option A — Shelly-App (empfohlen):

  1. Laden Sie die Shelly-App herunter (iOS / Android)
  2. Tippen Sie auf +Add Device und folgen Sie dem Bluetooth-Kopplungsassistenten
  3. Geben Sie Ihre Wi-Fi-Zugangsdaten ein, wenn Sie dazu aufgefordert werden

Option B — AP-Modus (ohne App):

  1. Beim ersten Einschalten erstellt das Gerät einen Hotspot: ShellyXXX-AABBCCDDEE
  2. Verbinden Sie Ihr Telefon/PC mit diesem Hotspot
  3. Öffnen Sie http://192.168.33.1Internet & SecurityWi-Fi Mode - Client
  4. Geben Sie SSID und Passwort ein → Save

Shelly unterstützt nur 2,4 GHz-Netzwerke. 5 GHz-Netzwerke werden beim Scannen nicht angezeigt.

Schritt 2 — IP-Adresse ermitteln

Nach der Verbindung mit Wi-Fi ermitteln Sie die zugewiesene IP-Adresse auf eine der folgenden Arten:

  • Shelly-App: Gerätedetail → Device info → IP-Adresse
  • Shelly-Weboberfläche: Verbinden Sie sich mit dem Geräte-AP vor der Wi-Fi-Einrichtung — die IP wird nach dem Speichern angezeigt
  • Router-DHCP-Tabelle: Suchen Sie nach einem Hostnamen wie shelly1pm-AABBCCDDEE
  • mDNS: Pingen Sie shelly<model>-<mac>.local (z. B. shelly1pm-AABBCCDDEE.local) aus dem selben Netzwerk

Weisen Sie dem Shelly-Gerät eine statische IP (DHCP-Reservierung) in Ihrem Router zu, damit sich die Adresse nach einem Router-Neustart nicht ändert.

Schritt 3 — Konfiguration in TapHome

  1. Fügen Sie in TapHome ein neues Modul Packet Parser (HTTP) hinzu
  2. IP Address: Geben Sie die IP aus Schritt 2 ein (z. B. 192.168.1.50)
  3. Port: 80 (Standard, keine Änderung erforderlich)
  4. Importieren Sie die Vorlage — TapHome fragt regelmäßig /status ab, um den Gerätestatus zu lesen

Die HTTP-Authentifizierung ist auf Shelly-Geräten standardmäßig deaktiviert. Wenn Sie den Anmeldeschutz aktiviert haben, unterstützt TapHome derzeit kein HTTP Basic Auth — lassen Sie die Authentifizierung für die TapHome-Integration deaktiviert.

Verfügbare Geräte

Shelly Sensor Add-On Modul
Benutzerdefinierte Variablen

Shelly Sensor Add-On

Lesen (Modul)
var res := sendhttprequest("/rpc/Sys.GetStatus");
SysGetStatus := res.Content;
res := sendhttprequest("/rpc/SensorAddon.GetPeripherals");
SensorAddonGetPeripherals := res.Content;
Analogeingang Analogeingang Nur lesen

0–10 V / 0–100 % Analogeingang — liest /rpc/Input.GetStatus?id=100 → percent und teilt durch 100, sodass der Wert als Bruchteil 0,0–1,0 vorliegt. Erfordert, dass der Eingangstyp in der Shelly-Weboberfläche auf analog gesetzt ist. Genauigkeit ±5 %

numeric Einheit: % (normalised) json_path
Variable: IdComponent-ID der Analogeingangs-Peripherie am Host-Shelly (Add-on-Peripherie nutzt 100–199; der erste Analogeingang ist 100)

Analogeingang

Eingangslevel lesen
var res := sendhttprequest("/rpc/Input.GetStatus?id=" + Id);
parsejson(res.Content, "percent") / 100
Reed-Kontakt Reed-Kontakt Nur lesen

Digitaler Trockenkontakt-/Reed-Eingang — liest /rpc/Input.GetStatus?id=100 → state (true = geschlossen, false = offen). Erfordert, dass der Eingangstyp in der Shelly-Weboberfläche auf switch oder button gesetzt ist (teilt Component-ID 100 mit dem Analogeingang — nur ein aktiver Modus gleichzeitig)

boolean json_path
Variable: IdComponent-ID der Digitaleingangs-Peripherie am Host-Shelly (Standard 100)

Reed-Kontakt

Lesen
var res := sendhttprequest("/rpc/Input.GetStatus?id=" + Id);
parsejson(res.Content, "state")
Temperaturfühler (DS18B20 #1) Temperatursensor Nur lesen

Erster DS18B20-Fühler am 1-Wire-Bus — liest /rpc/Temperature.GetStatus?id=100 → tC (°C). Feuchtigkeit ist auf NaN fixiert (Vorlage stellt keinen DHT22 bereit)

numeric Einheit: °C json_path
Variable: IdComponent-ID des ersten DS18B20-Fühlers am Host-Shelly (Standard 100)

Temperaturfühler (DS18B20 #1)

Luftfeuchtigkeit lesen
NaN
Temperatur lesen
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Temperaturfühler (DS18B20 #2) Temperatursensor Nur lesen

Zweiter DS18B20-Fühler am 1-Wire-Bus — liest /rpc/Temperature.GetStatus?id=101 → tC (°C)

numeric Einheit: °C json_path
Variable: IdComponent-ID des zweiten DS18B20-Fühlers am Host-Shelly (Standard 101)

Temperaturfühler (DS18B20 #2)

Luftfeuchtigkeit lesen
NaN
Temperatur lesen
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Temperaturfühler (DS18B20 #3) Temperatursensor Nur lesen

Dritter DS18B20-Fühler am 1-Wire-Bus — liest /rpc/Temperature.GetStatus?id=102 → tC (°C)

numeric Einheit: °C json_path
Variable: IdComponent-ID des dritten DS18B20-Fühlers am Host-Shelly (Standard 102)

Temperaturfühler (DS18B20 #3)

Luftfeuchtigkeit lesen
NaN
Temperatur lesen
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Temperaturfühler (DS18B20 #4) Temperatursensor Nur lesen

Vierter DS18B20-Fühler am 1-Wire-Bus — liest /rpc/Temperature.GetStatus?id=103 → tC (°C). Letzter DS18B20-Slot der Vorlage — der Shelly-Bus unterstützt bis zu 5 Fühler, aber nur IDs 100–103 werden abgefragt

numeric Einheit: °C json_path
Variable: IdComponent-ID des vierten DS18B20-Fühlers am Host-Shelly (Standard 103)

Temperaturfühler (DS18B20 #4)

Luftfeuchtigkeit lesen
NaN
Temperatur lesen
var res := sendhttprequest("/rpc/Temperature.GetStatus?id=" + Id);
parsejson(res.Content, "tC")
Voltmeter Variable Nur lesen

0–10 V Spannungsmessung — liest /rpc/Voltmeter.GetStatus?id=100 → voltage (V). Als schreibgeschützter Skalarwert über PacketParserVariable bereitgestellt (kein nativer Voltmeter-Typ). Genauigkeit ±5 %, Meldeschwelle 0,1 V

numeric Einheit: V json_path
Variable: IdComponent-ID der Voltmeter-Peripherie am Host-Shelly (Standard 100)

Voltmeter

Lesen
var res := sendhttprequest("/rpc/Voltmeter.GetStatus?id=" + Id);
parsejson(res.Content, "voltage")
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (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.

Quellen