---
title: "Shelly 1PM"
description: "Shelly 1PM über MQTT statt HTTP: bis zu 5 Geräte pro Modul, je Relais schalten, Echtzeit-Leistung und kumulierte Energie messen."
url: "https://taphome.com/de/compatibility/shelly-1pm-mqtt/"
language: de
lastmod: 2026-03-31
generator: hugo
ai:
  topics: ["mqtt","smart-plug","wifi","relay","power-metering"]
  questions: ["Wie integriere ich Shelly 1PM mit TapHome über MQTT?","Was misst die Shelly 1PM MQTT-Vorlage in TapHome?","Wie konfiguriere ich mehrere Shelly 1PM-Einheiten in einer TapHome-Vorlage?","Warum meldet mein Shelly 1PM MQTT keine Leistungsdaten?","Wie finde ich die MQTT Device ID des Shelly 1PM?","Meldet Shelly 1PM MQTT Übertemperatur und Überlast in TapHome?"]
---

# Shelly 1PM

Kommunikation: Packet Parser → MQTT

- [Shelly 1PM Produktseite](https://www.shelly.com/en/products/shop/shelly-1pm)
- [Shelly Gen1 MQTT-API-Referenz](https://shelly-api-docs.shelly.cloud/gen1/)

> Netzwerkadresse
> 
> Beim in TapHome integrierten MQTT-Broker geben Sie in TapHome `127.0.0.1` als Broker-Adresse ein. Im Gerät geben Sie die IP-Adresse des TapHome Core ein und richten für den Core eine IP-Reservierung im Router ein.
> 
> [Netzwerkvorbereitung](https://taphome.com/de/docs/setup/network-preparation/)

## Integrationsanleitung

Der Shelly 1PM ist ein kompakter Einkanal-WLAN-Relaisschalter mit integrierter Leistungsmessung. Er passt hinter einen Standard-Wandschalter und kann einen Stromkreis bis 16 A (3500 W bei 230 V) steuern. TapHome kommuniziert mit dem Gerät über MQTT — dies ist die MQTT-Variante der Shelly 1PM-Vorlage, geeignet wenn Sie lokale MQTT-Kommunikation gegenüber HTTP-Polling bevorzugen.

Die Vorlage unterstützt bis zu 5 Shelly 1PM-Einheiten pro Modul. Jede Einheit wird durch eine eigene Variable `pulgNtopic` unterschieden, die auf die MQTT Client ID des Geräts verweist. Jede Einheit stellt einen Relaisschalter und einen Stromzähler bereit.

## Konfiguration

### Device ID

Jeder Shelly 1PM hat eine eindeutige MQTT Device ID im Format `shelly1pm-<MAC6>`, wobei `<MAC6>` die letzten 6 Zeichen der MAC-Adresse in hexadezimaler Kleinschreibung sind (z. B. `shelly1pm-112233`).

Die Device ID finden Sie:

- Auf dem Geräteaufkleber (MAC-Adresse)
- In der Shelly-Weboberfläche: **Settings** → **Device Info**
- Über die API: `GET http://<device-ip>/settings` → Feld `mqtt.id`

> [!TIP]
> Dieses Gerät unterstützt **mDNS Discovery**. Anstelle einer IP-Adresse können Sie bei der TapHome-Konfiguration den Hostnamen `shelly1pm-{MAC}.local` verwenden. Ersetzen Sie `{MAC}` durch die letzten 6 Zeichen der MAC-Adresse des Geräts in hexadezimaler Kleinschreibung (z. B. `shelly1pm-112233.local`). Die Verwendung eines Hostnamens verhindert Verbindungsprobleme bei Änderung der IP-Adresse des Geräts.

### Vorlage einrichten

Nach dem Import der Vorlage in TapHome:

1. Öffnen Sie das Modul **Shelly 1PM MQTT**
2. Stellen Sie die **MQTT-Broker-IP** und den **Port** ein (Standard `1883`)
3. Setzen Sie für jede Shelly 1PM-Einheit die Variable `pulgNtopic` auf die Device ID des entsprechenden Shelly 1PM (z. B. `shelly1pm-112233`)

Das Modul abonniert `shellies/#` und die Listener-Skripte filtern Nachrichten anhand des konfigurierten Topic-Präfixes.

> [!TIP]
> Konfigurieren Sie nur die Slots, die Sie tatsächlich verwenden. Nicht konfigurierte Slots (mit dem Standardwert `shelly1pm-deviceidN`) stimmen mit keinem realen Gerät überein und können ignoriert werden.

## Gerätefunktionen

### Relaissteuerung

Jede Einheit stellt in TapHome ein Schaltgerät bereit. Der Relaisstatus wird aus dem Topic `shellies/<id>/relay/0` gelesen und durch Veröffentlichung von `on` oder `off` auf `shellies/<id>/relay/0/command` gesteuert.

### Leistungsmessung

Jede Einheit enthält einen Stromzähler, der zwei Werte erfasst:

- **Echtzeitleistung** — `shellies/<id>/relay/0/power` in Watt gemeldet, von der Vorlage in kW umgerechnet
- **Gesamtverbrauch** — `shellies/<id>/relay/0/energy` in Watt-Minuten gemeldet, von der Vorlage in kWh umgerechnet

Der Stromzähler ist schreibgeschützt — er aktualisiert sich automatisch, wenn das Gerät neue Daten veröffentlicht.

### Temperatur- und Überlastüberwachung

Jedes Schaltgerät stellt vier Serviceattribute bereit:

- **Interne Temperatur** — Gerätetemperatur in °C aus dem Topic `shellies/<id>/temperature`
- **Temperaturstatus** — Temperaturstufe: Normal, High oder Very High (`shellies/<id>/temperature_status`)
- **Überhitzung** — Übertemperatur-Alarmflag (`shellies/<id>/overtemperature`)
- **Überlast** — meldet die Lastleistung (W) bei erkannter Überlastung (`shellies/<id>/overpower_value`)

### Weitere Funktionen

Der Shelly 1PM veröffentlicht auch einen Online-/Offline-Status über das MQTT Last Will and Testament (LWT) Topic, eine vollständige JSON-Statusnachricht (Firmware ≥1.8.0), den Status des physischen Eingangs und Eingangsereignisse (Kurz-/Doppel-/Dreifach-/Langdruck). Diese Funktionen können in einem zukünftigen Vorlagen-Update hinzugefügt werden.

## Fehlerbehebung

### Gerät meldet keine Daten

1. Überprüfen Sie, dass der Shelly 1PM mit dem WLAN verbunden ist und MQTT in den Geräteeinstellungen aktiviert ist
2. Prüfen Sie, ob die Variable `pulgNtopic` exakt der Device ID entspricht (z. B. `shelly1pm-112233`)
3. Bestätigen Sie die korrekte MQTT-Broker-IP und den Port in den Moduleinstellungen
4. Verwenden Sie einen MQTT-Client (z. B. MQTT Explorer), um `shellies/#` zu abonnieren und zu überprüfen, ob das Gerät Nachrichten veröffentlicht

### Leistungsmessung zeigt Null

1. Bestätigen Sie, dass die Last über das Shelly-Relais angeschlossen ist (nicht umgangen)
2. Prüfen Sie, ob das Relais eingeschaltet ist — der Stromzähler misst nur, wenn Strom durch das Relais fließt
3. Abonnieren Sie `shellies/<id>/relay/0/power` mit einem MQTT-Client und überprüfen Sie, ob das Gerät einen Wert ungleich Null meldet

### Übertemperaturwarnung

Der Shelly 1PM verfügt über einen integrierten Überhitzungsschutz. Wenn die Gerätetemperatur sichere Grenzwerte überschreitet, ändert sich `temperature_status` auf "High" oder "Very High" und `overtemperature` wird auf `true` gesetzt. Sorgen Sie für ausreichende Belüftung um das Gerät, besonders beim Schalten hoher Lasten.

> [!WARNING]
> Shelly Gen1-Geräte unterstützen **kein** MQTT über TLS. Die Kommunikation zwischen Gerät und MQTT-Broker ist unverschlüsselt (Plain MQTT, Port 1883). Stellen Sie sicher, dass sich der MQTT-Broker in einem vertrauenswürdigen lokalen Netzwerk befindet.

## Installation in TapHome

### Voraussetzungen

- Shelly-Gerät mit Wi-Fi (2,4 GHz) verbunden, z. B. über die Shelly App oder den eigenen Access Point des Geräts
- 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

> [!WARNING]
> 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 & Security** → **Advanced — 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 **Settings** → **MQTT**
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

Beim integrierten TapHome-Broker ist `<broker-ip>` die IP-Adresse des TapHome Core. Geben Sie dem Core eine IP-Reservierung im Router, sonst verliert das Gerät den Broker, wenn der Router die Adresse ändert → [Netzwerkvorbereitung](https://taphome.com/de/docs/setup/network-preparation/).

> [!TIP]
> 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 **Settings** → **Device Info** → **Device 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:** `127.0.0.1` für den integrierten TapHome-Broker (die Steuereinheit verbindet sich mit sich selbst, die Adresse ändert sich nie); für einen externen Broker dessen IP-Adresse (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 10

Diese Geräte erscheinen nach dem Import in TapHome.

Shelly 1PM MQTT Modul

Benutzerdefinierte Variablen

`pulg1topic` (string) = shelly1pm-deviceid1 MQTT Device ID der ersten Shelly 1PM-Einheit — Format ist 'shelly1pm-DEVICEID' (Device ID in der Shelly-Weboberfläche → Settings → Device Info)

Open http://shellyIpAddress → Settings → Device info → copy Device ID

`pulg2topic` (string) = shelly1pm-deviceid2 MQTT Device ID der zweiten Shelly 1PM-Einheit 

`pulg3topic` (string) = shelly1pm-deviceid3 MQTT Device ID der dritten Shelly 1PM-Einheit 

`pulg4topic` (string) = shelly1pm-deviceid4 MQTT Device ID der vierten Shelly 1PM-Einheit 

`pulg5topic` (string) = shelly1pm-deviceid5 MQTT Device ID der fünften Shelly 1PM-Einheit

Stromzähler 1 Stromzähler Nur lesen

Echtzeitleistung (kW) und kumulativer Energieverbrauch (kWh) für Shelly 1PM-Einheit 1

numeric Einheit: kW / kWh

Listener

```taphome
IF(INDEXOF(pulg1topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg1topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg1topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
```

Schalter 1 Schalter Lesen und Schreiben

Relaissteuerung für Shelly 1PM-Einheit 1 — Ein-/Ausschalten mit Temperatur- und Überlastüberwachung

boolean

Werte / Zustände: ON · OFF

Schaltzustand schreiben

```taphome
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg1topic + "/relay/0/command", value);
```

Listener

```taphome
IF(INDEXOF(pulg1topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg1topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg1topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg1topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
```

Serviceattribute

Internal temperature

```taphome
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
```

Overheated

```taphome
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
```

Temperature status

```taphome
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
```

Overpower

```taphome
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
```

Stromzähler 2 Stromzähler Nur lesen

Echtzeitleistung (kW) und kumulativer Energieverbrauch (kWh) für Shelly 1PM-Einheit 2

numeric Einheit: kW / kWh

Listener

```taphome
IF(INDEXOF(pulg2topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg2topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg2topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
```

Schalter 2 Schalter Lesen und Schreiben

Relaissteuerung für Shelly 1PM-Einheit 2 — Ein-/Ausschalten mit Temperatur- und Überlastüberwachung

boolean

Werte / Zustände: ON · OFF

Schaltzustand schreiben

```taphome
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg2topic + "/relay/0/command", value);
```

Listener

```taphome
IF(INDEXOF(pulg2topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg2topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg2topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg2topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
```

Serviceattribute

Internal temperature

```taphome
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
```

Overheated

```taphome
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
```

Temperature status

```taphome
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
```

Overpower

```taphome
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
```

Stromzähler 3 Stromzähler Nur lesen

Echtzeitleistung (kW) und kumulativer Energieverbrauch (kWh) für Shelly 1PM-Einheit 3

numeric Einheit: kW / kWh

Listener

```taphome
IF(INDEXOF(pulg3topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg3topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg3topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
```

Schalter 3 Schalter Lesen und Schreiben

Relaissteuerung für Shelly 1PM-Einheit 3 — Ein-/Ausschalten mit Temperatur- und Überlastüberwachung

boolean

Werte / Zustände: ON · OFF

Schaltzustand schreiben

```taphome
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg3topic + "/relay/0/command", value);
```

Listener

```taphome
IF(INDEXOF(pulg3topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg3topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg3topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg3topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
```

Serviceattribute

Internal temperature

```taphome
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
```

Overheated

```taphome
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
```

Temperature status

```taphome
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
```

Overpower

```taphome
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
```

Stromzähler 4 Stromzähler Nur lesen

Echtzeitleistung (kW) und kumulativer Energieverbrauch (kWh) für Shelly 1PM-Einheit 4

numeric Einheit: kW / kWh

Listener

```taphome
IF(INDEXOF(pulg4topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg4topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg4topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
```

Schalter 4 Schalter Lesen und Schreiben

Relaissteuerung für Shelly 1PM-Einheit 4 — Ein-/Ausschalten mit Temperatur- und Überlastüberwachung

boolean

Werte / Zustände: ON · OFF

Schaltzustand schreiben

```taphome
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg4topic + "/relay/0/command", value);
```

Listener

```taphome
IF(INDEXOF(pulg4topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg4topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg4topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg4topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
```

Serviceattribute

Internal temperature

```taphome
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
```

Overheated

```taphome
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
```

Temperature status

```taphome
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
```

Overpower

```taphome
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
```

Stromzähler 5 Stromzähler Nur lesen

Echtzeitleistung (kW) und kumulativer Energieverbrauch (kWh) für Shelly 1PM-Einheit 5

numeric Einheit: kW / kWh

Listener

```taphome
IF(INDEXOF(pulg5topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg5topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg5topic + "/relay/0/") != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0/power")
    VAR valueP := TOSTRING(RECEIVEDMSG.PAYLOAD);

    Ed := IF(ISNULL(valueP), NaN, TODOUBLE(valueP) / 1000.0);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0/energy")
    VAR valueE := TOSTRING(RECEIVEDMSG.PAYLOAD);

    To := IF(ISNULL(valueE), NaN, TODOUBLE(valueE) / 60000.0);
END
```

Schalter 5 Schalter Lesen und Schreiben

Relaissteuerung für Shelly 1PM-Einheit 5 — Ein-/Ausschalten mit Temperatur- und Überlastüberwachung

boolean

Werte / Zustände: ON · OFF

Schaltzustand schreiben

```taphome
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg5topic + "/relay/0/command", value);
```

Listener

```taphome
IF(INDEXOF(pulg5topic, "shelly1pm-deviceid") = 0)
    ADDERROR("Set correct 'pulg5topic' value in module variables. Topic format is 'shelly1pm-<deviceid>'. The Device ID can be found by opening url 'http://shellyIpAddress', in Settings -> Device info.");
    RETURN(-1);
END

IF(INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + pulg5topic) != 0)
    RETURN(0);
END

IF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/relay/0")
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
    
    IF(value = "on")
        St := 1;
    ELSEIF(value = "off")
        St := 0;
    ELSE
        ADDERROR("Unknown switch state");
    END
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/temperature")
    internalTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/overtemperature")
    overTemp := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/temperature_status")
    tempStatus := TOSTRING(RECEIVEDMSG.PAYLOAD);
ELSEIF(RECEIVEDMSG.TOPIC = "shellies/" + pulg5topic + "/overpower_value")
    overPower := TOSTRING(RECEIVEDMSG.PAYLOAD);
END
```

Serviceattribute

Internal temperature

```taphome
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
```

Overheated

```taphome
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
```

Temperature status

```taphome
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
```

Overpower

```taphome
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
```

**Verbindung:** Packet Parser → MQTT • Hostname: `shelly1pm-{MAC}.local`

Mögliche Verbesserungen (5)

- Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline units.
- Full Status JSON — Complete /status as JSON (fw ≥1.8.0). Could parse wifi\_sta.rssi, uptime, has\_update.
- Input State — Physical input state (0/1). Shelly 1PM has one input — could be used for detached switch scenarios.
- Input Event — JSON with event type (S=short, SS=double, SSS=triple, L=long) and event\_cnt. Useful for button automation.
- Internal Temperature (Fahrenheit) — Same as temperature topic but in Fahrenheit. Redundant — Celsius already implemented via service attribute.

## Importparameter

Diese Werte geben Sie beim Import des XML ein.

| In der App abgefragt   | Standard      |
|------------------------|---------------|
| Mqtt Broker IP-Adresse | `192.168.0.1` |
| Mqtt Broker port       | `1883`        |

## Quellen

- Shelly Gen1 API Reference
  
  [shelly-api-docs.shelly.cloud](https://shelly-api-docs.shelly.cloud/gen1/) 2026-03-12
- Home Assistant Shelly Integration
  
  [www.home-assistant.io](https://www.home-assistant.io/integrations/shelly/) 2026-03-12

## Verwandte Dokumentation

- [MQTT Integration](https://taphome.com/de/compatibility/mqtt-guide/)
- [Packet Parser (HTTP, TCP, UDP, FTP, MQTT)](https://taphome.com/de/docs/integration/packet-parser/)
- [Packet-Parser-Funktionen](https://taphome.com/de/docs/script/packet-parser/)
- [Parsing-Funktionen](https://taphome.com/de/docs/script/parsing-functions/)
- [MQTT-Broker](https://taphome.com/de/docs/integration/packet-parser/mqtt-broker/)
- [Listener-Skripte](https://taphome.com/de/docs/script/listener-scripts/)

