TapHome

Shelly 1PM

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

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: SettingsDevice Info
  • Über die API: GET http://<device-ip>/settings → Feld mqtt.id

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.

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:

  • Echtzeitleistungshellies/<id>/relay/0/power in Watt gemeldet, von der Vorlage in kW umgerechnet
  • Gesamtverbrauchshellies/<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.

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 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 1PM MQTT Modul
Benutzerdefinierte Variablen
pulg1topic (string) = shelly1pm-deviceid1MQTT 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-deviceid2MQTT Device ID der zweiten Shelly 1PM-Einheit
pulg3topic (string) = shelly1pm-deviceid3MQTT Device ID der dritten Shelly 1PM-Einheit
pulg4topic (string) = shelly1pm-deviceid4MQTT Device ID der vierten Shelly 1PM-Einheit
pulg5topic (string) = shelly1pm-deviceid5MQTT 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

Stromzähler 1

Listener
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

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

boolean
Werte / Zustände: ON · OFF

Schalter 1

Schaltzustand schreiben
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg1topic + "/relay/0/command", value);
Listener
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
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
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

Stromzähler 2

Listener
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

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

boolean
Werte / Zustände: ON · OFF

Schalter 2

Schaltzustand schreiben
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg2topic + "/relay/0/command", value);
Listener
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
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
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

Stromzähler 3

Listener
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

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

boolean
Werte / Zustände: ON · OFF

Schalter 3

Schaltzustand schreiben
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg3topic + "/relay/0/command", value);
Listener
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
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
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

Stromzähler 4

Listener
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

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

boolean
Werte / Zustände: ON · OFF

Schalter 4

Schaltzustand schreiben
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg4topic + "/relay/0/command", value);
Listener
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
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
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

Stromzähler 5

Listener
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

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

boolean
Werte / Zustände: ON · OFF

Schalter 5

Schaltzustand schreiben
VAR value := IF(St = 1, "on", "off");
MQTTPUBLISH("shellies/" + pulg5topic + "/relay/0/command", value);
Listener
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
IF(LENGTH(internalTemp) = 0, "Unknown", internalTemp + "°C");
Overheated
IF(LENGTH(overTemp) = 0, "Unknown", IF(overtemp = 0, "No", "Yes"));
Temperature status
IF(LENGTH(tempStatus) = 0, "Unknown", tempStatus);
Overpower
IF(LENGTH(overPower) = 0, "0W", overPower + "W");
Verbindung: Packet Parser → MQTT
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.

Quellen