TapHome

Shelly UNI

Packet Parser → MQTT
Eingereicht von
Zuletzt aktualisiert: 04. 2026
Shelly UNI

Der Shelly UNI ist ein kompaktes universelles Wi-Fi-I/O-Modul (20 × 33 × 13 mm) aus der Shelly-Gen1-Plattform. Er bietet einen ADC-Spannungseingang, zwei potentialfreie Open-Collector-Ausgänge und zwei digitale Eingänge — gedacht für die Nachrüstung bestehender Geräte ohne Zentrale.

TapHome kommuniziert mit dem Gerät über MQTT. Die Vorlage abonniert den Topic-Baum shellies/<prefix>/... und veröffentlicht Befehle an .../relay/{0,1}/command. Das Modul stellt 5 Geräte bereit: 1 Analogeingang, 2 Schalter und 2 Reed-Kontakte.

Hardware-Anschluss

Stromversorgung

Der Shelly UNI ist ein Niederspannungsmodul und kann nicht direkt aus dem 230-V-Netz versorgt werden. Versorge entweder:

  • 12–36 V DC über rote (+) und schwarze (GND) Ader, oder
  • 12–24 V AC über rote und schwarze Ader (ohne Polarität)

Ein externes Niederspannungsnetzteil ist erforderlich. Die Leistungsaufnahme liegt unter 1 W.

Schließe die rote/schwarze Ader nicht an Netzspannung an. An den Klemmen IN_1 / IN_2 / OUT1 / OUT2 kann je nach externer Beschaltung weiterhin gefährliche Spannung anliegen — die Installation muss von einer qualifizierten Elektrofachkraft durchgeführt werden.

Pigtail-Kabel — Aderfarben

Das Gerät wird mit einem farbcodierten Pigtail-Kabel geliefert:

AderKlemmeFunktion
RotVCC12–36 V DC (oder 12–24 V AC zusammen mit Schwarz)
SchwarzGNDMasse (oder AC-Phase mit Rot)
WeißADC_INAnalogeingang (Bereich 0–12 V oder 0–30 V)
GelbVCC_SENSOR3,3-V-DC-Ausgang für One-Wire-Sensoren
BlauDATA_SENSOROne-Wire-Daten (DS18B20 / DHT22)
GrünGND_SENSORSensormasse
HellbraunIN_1Digitaler Eingang 1
DunkelbraunIN_2Digitaler Eingang 2

Die beiden potentialfreien Ausgänge sind am Modulgehäuse mit OUT1 und OUT2 gekennzeichnet.

Digitale Eingänge (IN_1, IN_2)

Jeder digitale Eingang ist potentialfrei und kann entweder durch eine DC- oder eine AC-Quelle angesteuert werden:

  • DC: HIGH bei ≥ 2,2 V, LOW unter 2,2 V, max. 36 V DC
  • AC: HIGH bei ≥ 12 V, LOW unter 12 V, max. 24 V AC

Typische Anwendungen sind Reed-Kontakte (Fenster-/Türsensoren, Schwimmerschalter) und Taster, die den Eingang über eine externe Versorgung gegen GND kurzschließen.

Shelly UNI Reed-Kontakt-Verdrahtung mit DC-Versorgung
Shelly UNI Reed-Kontakt-Verdrahtung mit AC-Versorgung
Shelly UNI Taster-/Schalter-Verdrahtung mit DC-Versorgung
Shelly UNI Taster-/Schalter-Verdrahtung mit AC-Versorgung
Potentialfreie Ausgänge (OUT1, OUT2)

Jeder Ausgang ist ein potentialfreier Open-Collector-Kontakt mit folgenden absoluten Grenzwerten:

  • maximaler Strom 100 mA
  • maximale Leistung 300 mW
  • maximale Schaltspannung 24 V AC oder 36 V DC

Diese Werte sind zu niedrig für Netzlasten — um reale Lasten (Beleuchtung, Pumpen, Ventile) zu schalten, verbinde die Ausgänge mit einem externen Relais oder Schütz und versorge dessen Spule aus einer passenden Niederspannungsquelle.

Schaltplan des potentialfreien Shelly-UNI-Ausgangs
Analogeingang (ADC)

Ein einzelner ADC-Kanal an der weißen Ader (ADC_IN) unterstützt zwei Spannungsbereiche, die in der Shelly-Weboberfläche auswählbar sind:

  • 0–12 V — höhere Auflösung für Niederspannungssignale
  • 0–30 V — größerer Bereich für Batterie-/DC-Link-Überwachung

Der gewählte Bereich wird nur auf dem Gerät gespeichert — die TapHome-Vorlage liest den rohen veröffentlichten Wert und kann nicht erkennen, welcher Bereich aktiv ist. Stelle sicher, dass der Shelly-ADC-Bereich zum Signal passt, das du an die weiße Ader anschließt.

Schaltplan des Shelly-UNI-ADC-Eingangs

Konfiguration

Shelly-ID und MQTT-Präfix

Jeder Shelly UNI hat eine eindeutige Shelly-ID, die den letzten 6 Zeichen seiner MAC-Adresse entspricht (z. B. 35FA58). Das resultierende MQTT-Topic-Präfix ist shellyuni-<Shelly-ID> (z. B. shellyuni-35fa58).

Die Shelly-ID findest du:

  • Auf dem Geräteaufkleber (MAC-Adresse)
  • In der Shelly-Weboberfläche: SettingsDevice Info
  • Über die API: GET http://<device-ip>/settings → Feld device.hostname

Shelly-Gen1-Geräte melden sich per mDNS als shellyuni-<Shelly-ID>.local. Du kannst diesen Hostnamen anstelle einer festen IP-Adresse verwenden, um auf die Weboberfläche zuzugreifen.

MQTT aktivieren

Auf einem frischen Gerät ist MQTT deaktiviert. Aktiviere es vor dem Import der TapHome-Vorlage:

  1. Verbinde dich mit dem Access Point des Geräts shellyuni-XXXXXX (Passwort steht auf dem Gerät) oder erreiche es im LAN
  2. Öffne die Weboberfläche unter http://192.168.33.1/ (AP-Modus) oder unter der LAN-IP
  3. Gehe zu Internet & SecurityAdvanced — Developer Settings
  4. Setze den Haken bei Enable action execution via MQTT
  5. Setze IP und Port des Brokers (Standard 1883), Benutzername und Passwort bleiben leer — TapHome unterstützt keine MQTT-Authentifizierung auf Gen1
  6. Speichere und starte das Gerät neu

Die Aktivierung von MQTT deaktiviert die Shelly-Cloud-Verbindung auf Gen1-Geräten. Das ist gewollt — das Gerät kann nicht beide Verbindungen gleichzeitig aufrechterhalten. Die Shelly-Mobil-App kann das Gerät nicht mehr über die Cloud steuern; verwende stattdessen MQTT oder die lokale Weboberfläche.

Shelly-Gen1-Geräte unterstützen kein MQTT über TLS. Die Kommunikation zwischen Gerät und Broker ist unverschlüsselt (reines MQTT, Port 1883). Halte den Broker in einem vertrauenswürdigen lokalen Netzwerk.

Vorlage einrichten

Beim Import der Vorlage in TapHome gib an:

  • IpAddress — IP des MQTT-Brokers
  • Port — Broker-Port (Standard 1883)
  • DeviceID — die 6-stellige Shelly-ID des jeweiligen UNI (z. B. 35fa58)

Der Importparameter DeviceID wird zum Aufbau der Custom-Variable MQTTprefix verwendet (Standard shellyuni-$[DeviceID]). Falls du auf dem Shelly-Gerät eine eigene mqtt_id (abweichend vom Standard) gesetzt hast, passe nach dem Import die Variable MQTTprefix am Modul entsprechend an.

Deaktiviere die HTTP-Authentifizierung am Shelly-Gerät (Internet & SecurityRestrict Login). TapHome nutzt in dieser Vorlage kein HTTP, aber eine aktive Authentifizierung kann Fehlersuche und Firmware-Updates erschweren.

Gerätefunktionen

Analoge Spannungsmessung

Das Gerät Analog Input liest die ADC-Spannung von shellies/<prefix>/adc/0 und stellt sie als numerischen Wert in Volt bereit. Das Skript parst die eingehende Nachricht mit TODOUBLE(TOSTRING(PAYLOAD)) — ohne Skalierung.

Der tatsächliche Messbereich (0–12 V oder 0–30 V) wird direkt am Shelly-Gerät konfiguriert und nicht über MQTT gemeldet. Die TapHome-Vorlage kann nicht prüfen, welcher Bereich aktiv ist.

Schaltausgänge

Beide Open-Collector-Ausgänge werden als standardmäßige TapHome-Switch-Geräte bereitgestellt:

  • Switch 1 — OUT_1, Topic shellies/<prefix>/relay/0, Command-Topic .../relay/0/command
  • Switch 2 — OUT_2, Topic shellies/<prefix>/relay/1, Command-Topic .../relay/1/command

Der Listener bildet Payload on → ON (St=1) und off → OFF (St=0) ab. Befehle aus TapHome werden als on / off am jeweiligen Command-Topic veröffentlicht.

Die Ausgänge sind potentialfrei und auf 100 mA / 300 mW begrenzt. Schließe keine Netzlasten direkt an — verwende für alles, was über schwachen Signalverbraucher hinausgeht, ein externes Relais oder Schütz.

Digitale Eingänge (Reed-Kontakte)

Beide digitalen Eingänge werden als Reed-Contact-Geräte mit invertierter Logik bereitgestellt:

  • Reed Contact 1 — IN_1, Topic shellies/<prefix>/input/0
  • Reed Contact 2 — IN_2, Topic shellies/<prefix>/input/1

Die Shelly-Firmware veröffentlicht 1, wenn der Eingang eine Spannung oberhalb seiner Schwelle sieht, und 0, wenn der Eingang gegen GND gezogen wird. Da Reed-Kontakte und Taster den Eingang im geschlossenen / aktiven Zustand typischerweise gegen GND kurzschließen, invertiert das TapHome-Skript den Payload:

1
Rc := IF(payload = "0", 1, 0)

Das bedeutet: Rc=1 in TapHome = Kontakt geschlossen (aktiv, Fensteröffnungssensor ausgelöst, Taster gedrückt), Rc=0 = Kontakt offen (inaktiv).

Weitere Funktionen

Die Shelly-UNI-Hardware unterstützt außerdem bis zu 3 × DS18B20-Temperatursensoren am One-Wire-Bus und — alternativ — 1 × DHT22-Feuchte-/Temperatursensor. Diese Sensoren veröffentlichen auf shellies/<prefix>/ext_temperature/{0,1,2} und shellies/<prefix>/ext_humidity/0. Die aktuelle MQTT-Vorlage bindet diese Topics nicht in TapHome-Geräte ein; sie können in einer zukünftigen Vorlagenaktualisierung ergänzt werden.

Ebenso stellt das Gerät ein Online-/Offline-LWT-Topic und Eingabeereignisse (input events) für kurzen/langen Tastendruck auf input_event/{0,1} bereit, die von dieser Vorlage nicht verarbeitet werden.

Für Szenen-Trigger auf Basis von Tastenereignissen (kurzer, langer Druck) kann das Topic input_event heute von einem separaten MQTT-Client abonniert werden — die TapHome-Vorlage verfolgt nur den rohen Eingangszustand.

Fehlerbehebung

Gerät reagiert nicht
  1. Prüfe, dass der Shelly UNI versorgt ist (Rot/Schwarz an 12–36 V DC oder 12–24 V AC) und mit dem Wi-Fi verbunden
  2. Öffne die Shelly-Weboberfläche über den mDNS-Hostnamen shellyuni-<Shelly-ID>.local oder die DHCP-IP
  3. Stelle sicher, dass MQTT aktiviert ist (Internet & SecurityAdvanced) und Broker-IP/-Port den TapHome-Importparametern entsprechen
  4. Abonniere mit einem MQTT-Client (z. B. MQTT Explorer) shellies/# und prüfe, dass das Gerät Nachrichten veröffentlicht
Schalter schalten nicht
  1. Prüfe den Pfad des Command-Topics — er muss shellies/<prefix>/relay/0/command sein (nicht .../relay/0/set)
  2. Stelle sicher, dass die Variable MQTTprefix des TapHome-Moduls dem Topic-Präfix entspricht, auf dem das Gerät tatsächlich veröffentlicht
  3. Denke daran: die Ausgänge sind potentialfrei — ohne eine externe Schaltung, die Spannung liefert, ändert sich der Ausgangszustand, aber es wird keine Last geschaltet
Reed-Kontakt-Zustand ist invertiert

Die Vorlage geht davon aus, dass payload=0 „Kontakt geschlossen" bedeutet. Wenn deine externe Verdrahtung den Eingang im aktiven Zustand auf HIGH zieht (umgekehrte Verdrahtung), erscheint der Zustand in TapHome invertiert. Verdrahte so um, dass der Kontakt IN_1 / IN_2 im aktiven Zustand gegen GND kurzschließt, oder passe die Logik in einem eigenen Skript an.

ADC-Wert außerhalb des erwarteten Bereichs

Der ADC-Bereich (0–12 V oder 0–30 V) wird am Gerät eingestellt und kann nicht über MQTT zurückgelesen werden. Wenn der numerische Wert in TapHome falsch aussieht (z. B. 2× höher oder niedriger als erwartet), öffne die Shelly-Weboberfläche und prüfe SettingsADC range. Die Vorlage geht davon aus, dass das Gerät die Spannung direkt veröffentlicht und führt keine Umrechnung durch.

Installation in TapHome

Voraussetzungen

  • Shelly-Gerät mit Wi-Fi verbunden (siehe HTTP-Verbindungsanleitung, falls noch nicht geschehen)
  • MQTT-Broker in Ihrem lokalen Netzwerk aktiv (z. B. Mosquitto, Home Assistant oder der integrierte TapHome-Broker)
  • TapHome CCU im selben Netzwerk wie der Broker

Auf Gen1-Geräten deaktiviert das Aktivieren von MQTT die Shelly Cloud. Beides kann nicht gleichzeitig betrieben werden. Auf Gen2/Plus-Geräten gilt diese Einschränkung nicht.

Schritt 1 — MQTT auf dem Shelly-Gerät aktivieren

Gen1-Geräte (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu Internet & SecurityAdvanced — MQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie MQTT Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Optional setzen Sie MQTT User und MQTT Password, falls Ihr Broker eine Authentifizierung erfordert
  6. Klicken Sie auf Save — das Gerät startet neu und verbindet sich mit dem Broker

Gen2 / Plus-Geräte (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Öffnen Sie die Shelly-Weboberfläche: http://<device-ip>/
  2. Navigieren Sie zu SettingsMQTT
  3. Aktivieren Sie MQTT
  4. Setzen Sie Server: <broker-ip>:<port> (z. B. 192.168.1.10:1883)
  5. Die Client ID ist mit der Geräte-ID vorausgefüllt (z. B. shellyplus1pm-AABBCCDDEE) — belassen Sie sie so, es sei denn, Sie haben einen bestimmten Grund zur Änderung
  6. Klicken Sie auf Save und starten Sie das Gerät neu

Um zu überprüfen, ob MQTT funktioniert, verwenden Sie einen MQTT-Client (z. B. MQTT Explorer) und abonnieren Sie shellies/# (Gen1) oder <device-id>/# (Gen2). Sie sollten Statusnachrichten vom Gerät sehen.

Schritt 2 — Device ID / MQTT Client ID ermitteln

Einige Vorlagen erfordern einen Parameter Device ID oder MQTT Client ID. Dies ist die eindeutige Kennung, die in MQTT-Topics verwendet wird.

  • Gen1: auf dem Etikett als MAC-Adresse zu finden (z. B. AABBCCDDEE). Device ID = shelly<model>-<mac>, z. B. shelly1pm-AABBCCDDEE
  • Gen2/Plus: in der Shelly-Weboberfläche unter SettingsDevice InfoDevice ID zu finden, oder auf dem Geräteetikett

Schritt 3 — Konfiguration in TapHome

  1. Fügen Sie in TapHome ein neues Modul Packet Parser (MQTT) hinzu
  2. IP Address: Geben Sie die IP-Adresse des MQTT-Brokers ein (z. B. 192.168.1.10)
  3. Port: 1883 (Standard; verwenden Sie 8883 für TLS)
  4. Device ID / MQTT Client ID: Geben Sie den Wert aus Schritt 2 ein (falls von der Vorlage benötigt)
  5. Importieren Sie die Vorlage — TapHome abonniert automatisch die Geräte-Topics

Verfügbare Geräte

Shelly UNI Modul
Benutzerdefinierte Variablen
MQTTprefix (string) = shellyuni-$[DeviceID]MQTT-Topic-Präfix des Shelly UNI — standardmäßig shellyuni-{DeviceID}, wird als Basis für alle abonnierten/veröffentlichten Topics verwendet
Pass DeviceID as import parameter; find it in the Shelly web UI → Settings → Device Info (last 6 characters of MAC address). Custom mqtt_id set on the Shelly device overrides this default.
Analogeingang Variable Nur lesen

ADC-Spannungsmessung — Doppelbereich 0–12 V oder 0–30 V, am Gerät einstellbar

numeric Einheit: V

Analogeingang

Listener
if RECEIVEDMSG.TOPIC = "shellies/" + MQTTprefix + "/adc/0"
    Va := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
end
Schalter 1 Schalter

Potentialfreier Open-Collector-Ausgang OUT_1 — max. 100 mA / 300 mW, 24 V AC oder 36 V DC

string
Werte / Zustände: ON · OFF

Schalter 1

Schaltzustand schreiben
MQTTPUBLISH("shellies/" + MQTTprefix + "/relay/0/command", if(St, "on", "off"))
Listener
if RECEIVEDMSG.TOPIC = "shellies/" + MQTTprefix + "/relay/0"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);

    if(payload = "on", St := 1, St := 0);
end
Schalter 2 Schalter

Potentialfreier Open-Collector-Ausgang OUT_2 — max. 100 mA / 300 mW, 24 V AC oder 36 V DC

string
Werte / Zustände: ON · OFF

Schalter 2

Schaltzustand schreiben
MQTTPUBLISH("shellies/" + MQTTprefix + "/relay/1/command", if(St, "on", "off"))
Listener
if RECEIVEDMSG.TOPIC = "shellies/" + MQTTprefix + "/relay/1"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);

    if(payload = "on", St := 1, St := 0);
end
Reed-Kontakt 1 Reed-Kontakt Nur lesen

Digitaler Eingang IN_1 — invertierte Logik, Kontakt gegen GND geschlossen = aktiv (1) in TapHome

string

Reed-Kontakt 1

Listener
if RECEIVEDMSG.TOPIC = "shellies/" + MQTTprefix + "/input/0"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Rc := if(payload = "0", 1, 0);
end
Reed-Kontakt 2 Reed-Kontakt Nur lesen

Digitaler Eingang IN_2 — invertierte Logik, Kontakt gegen GND geschlossen = aktiv (1) in TapHome

string

Reed-Kontakt 2

Listener
if RECEIVEDMSG.TOPIC = "shellies/" + MQTTprefix + "/input/1"
    VAR payload := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Rc := if(payload = "0", 1, 0);
end
Verbindung: Packet Parser → MQTT
Mögliche Verbesserungen (8)
  • External Temperature Sensor 1 (DS18B20) — Hardware supports up to 3× DS18B20 on the one-wire bus (Blue DATA + Yellow VCC + Green GND). Not wired in this MQTT template; would need a PacketParserVariable listening on ext_temperature/0 (value 999 = invalid).
  • External Temperature Sensor 2 (DS18B20) — Second DS18B20 on the one-wire bus. Same pattern as sensor 1, different index.
  • External Temperature Sensor 3 (DS18B20) — Third DS18B20 on the one-wire bus. Same pattern as sensor 1, different index.
  • External Humidity Sensor (DHT22) — Hardware supports 1× DHT22 humidity/temperature sensor (mutually exclusive with DS18B20 chain). Not wired in this MQTT template; would need a PacketParserVariable on ext_humidity/0 (value 999 = invalid).
  • Connection Status (LWT) — Last-Will-Testament topic — 'true' on connect, 'false' on disconnect. Could be added to detect offline devices.
  • Input 1 Event — JSON payload {event, event_cnt} — short/long press events on IN_1, useful for scene triggers.
  • Input 2 Event — JSON payload {event, event_cnt} — short/long press events on IN_2.
  • Full Status JSON — Full /status JSON published periodically (firmware ≥ 1.8.0). Could be parsed for wifi_sta.rssi, update status, uptime.

Quellen