TapHome

Shelly Flood

Packet Parser → MQTT
Přidal
Poslední aktualizace: 06. 2026
Shelly Flood

Shelly Flood je bateriový (CR123A) Wi-Fi senzor úniku vody. TapHome komunikuje se zařízením přes MQTT — doporučený protokol pro bateriová zařízení Shelly, protože senzor většinu času spí a data publikuje pouze při událostech probuzení.

Šablona podporuje až 5 senzorů Shelly Flood na jeden modul. Každá instance senzoru se rozlišuje proměnnou sensorN_topic, která odkazuje na MQTT Client ID zařízení.

Konfigurace

Device ID

Každý senzor Shelly Flood má jedinečné MQTT Device ID ve formátu shellyflood-<MAC6>, kde <MAC6> je posledních 6 znaků MAC adresy malými písmeny (hex), např. shellyflood-112233.

Device ID lze najít:

  • Na štítku zařízení (MAC adresa)
  • Ve webovém rozhraní Shelly: SettingsDevice Info
  • Přes API: GET http://<device-ip>/settings → pole mqtt.id

Zařízení podporuje mDNS discovery. Při konfiguraci TapHome můžete místo IP adresy použít hostname shellyflood-{MAC}.local. Nahraďte {MAC} posledními 6 znaky MAC adresy malými písmeny (např. shellyflood-112233.local). Hostname zabraňuje výpadkům komunikace při změně IP adresy zařízení.

Nastavení šablony

Po importování šablony v TapHome:

  1. Otevřete modul Shelly Flood MQTT
  2. Nastavte IP adresu MQTT Brokeru a Port (výchozí 1883)
  3. Pro každou instanci senzoru nastavte proměnnou sensorN_topic na Device ID příslušného Shelly Flood (např. shellyflood-112233)

Modul se přihlásí k odběru shellies/# a listenery ve skriptech filtrují zprávy podle nastaveného prefixu topicu.

Konfigurujte pouze sloty senzorů, které skutečně používáte. Nenakonfigurované sloty (s výchozí hodnotou shellyflood-deviceid) zobrazí chybovou hlášku vyzývající k nastavení správného topicu.

Schopnosti zařízení

Detekce úniku vody

Každá instance senzoru je v TapHome namapována jako zařízení Reed Contact. Stav zaplavení se čte z topicu shellies/<id>/sensor/flood:

  • trueAlarm (voda detekována)
  • falseOK (sucho)

Senzor se probudí a publikuje stav při detekci vody nebo jejím odeznění, jakož i v pravidelných reportovacích intervalech.

Monitorování baterie a teploty

Každá instance senzoru vystavuje dva servisní atributy:

  • Battery — procento nabití baterie čtené z shellies/<id>/sensor/battery. Upozornění na nízkou baterii se aktivuje při poklesu pod 20 %.
  • Temperature — okolní teplota v °C čtená z shellies/<id>/sensor/temperature.

Oba atributy jsou pouze pro čtení a aktualizují se při každém probuzení senzoru.

Další schopnosti

Shelly Flood také publikuje stav online/offline přes MQTT Last Will and Testament (LWT) topic a plnou JSON zprávu o stavu (firmware ≥1.8.0). K dispozici je nastavení rain_sensor, které invertuje logiku detekce záplavy pro použití jako detektor deště venku. Tyto funkce lze přidat v budoucí aktualizaci šablony.

Řešení problémů

Senzor nepublikuje data
  1. Ověřte, že Shelly Flood je připojen k Wi-Fi a že je v nastavení zařízení povoleno MQTT
  2. Zkontrolujte, že proměnná sensorN_topic přesně odpovídá Device ID (např. shellyflood-112233)
  3. Pokud se adresa MQTT brokeru změnila, vyzkoušejte mDNS hostname (shellyflood-AABBCCDDEE.local) k ověření dostupnosti senzoru v síti
  4. Použijte MQTT klienta (např. MQTT Explorer) k odběru shellies/# a ověřte, zda senzor publikuje zprávy při probuzení
Alarmový stav úniku se nespouští
  1. Zkontrolujte, zda jsou kontakty na spodku zařízení čisté a bez překážek
  2. Otestujte přiložením senzoru na mokrý povrch — zařízení by mělo do několika sekund publikovat true na topic /sensor/flood
  3. Zkontrolujte stav zařízení Reed Contact v TapHome — 1 = alarm, 0 = OK
Rychlé vybíjení baterie
  1. Shelly Flood je navržen pro dlouhou životnost baterie (CR123A, typicky 1–2 roky v závislosti na frekvenci reportování)
  2. Časté probouzení (např. kvůli nestabilnímu Wi-Fi signálu vyžadujícímu opakované reconnekty) může baterii vybíjet rychleji
  3. Zajistěte dostatečně silný Wi-Fi signál na místě instalace senzoru

Zařízení Shelly Gen1 nepodporují MQTT přes TLS. Komunikace mezi senzorem a MQTT brokerem je nešifrovaná (plain MQTT, port 1883). Zajistěte, aby MQTT broker byl v důvěryhodné lokální síti.

Jak nainstalovat v TapHome

Předpoklady

  • Zařízení Shelly připojené k Wi-Fi (pokud ještě ne, podívejte se na návod na HTTP připojení)
  • MQTT broker běžící ve vaší lokální síti (např. Mosquitto, Home Assistant nebo vestavěný broker TapHome)
  • TapHome CCU ve stejné síti jako broker

Na zařízeních Gen1 povolení MQTT vypne Shelly Cloud. Obojí nemůže běžet současně. Na zařízeních Gen2/Plus toto omezení neplatí.

Krok 1 — Povolte MQTT na zařízení Shelly

Zařízení Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Otevřete webové rozhraní Shelly: http://<device-ip>/
  2. Přejděte na Internet & SecurityAdvanced — MQTT
  3. Povolte MQTT
  4. Nastavte MQTT Server: <broker-ip>:<port> (např. 192.168.1.10:1883)
  5. Volitelně nastavte MQTT User a MQTT Password, pokud váš broker vyžaduje autentifikaci
  6. Klikněte na Save — zařízení se restartuje a připojí k brokeru

Zařízení Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Otevřete webové rozhraní Shelly: http://<device-ip>/
  2. Přejděte na SettingsMQTT
  3. Povolte MQTT
  4. Nastavte Server: <broker-ip>:<port> (např. 192.168.1.10:1883)
  5. Client ID je předvyplněné ID zařízení (např. shellyplus1pm-AABBCCDDEE) — ponechte tak, pokud nemáte konkrétní důvod ke změně
  6. Klikněte na Save a restartujte zařízení

Pro ověření funkčnosti MQTT použijte MQTT klienta (např. MQTT Explorer) a přihlaste se k odběru shellies/# (Gen1) nebo <device-id>/# (Gen2). Měli byste vidět stavové zprávy ze zařízení.

Krok 2 — Zjistěte Device ID / MQTT Client ID

Některé šablony vyžadují parametr Device ID nebo MQTT Client ID. Jde o jedinečný identifikátor používaný v MQTT topicích.

  • Gen1: nachází se na štítku jako MAC adresa (např. AABBCCDDEE). Device ID = shelly<model>-<mac>, např. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nachází se ve webovém rozhraní Shelly v části SettingsDevice InfoDevice ID, nebo na štítku zařízení

Krok 3 — Konfigurace v TapHome

  1. V TapHome přidejte nový modul Packet Parser (MQTT)
  2. IP Address: zadejte IP adresu MQTT brokeru (např. 192.168.1.10)
  3. Port: 1883 (výchozí; pro TLS použijte 8883)
  4. Device ID / MQTT Client ID: zadejte hodnotu z kroku 2 (pokud to šablona vyžaduje)
  5. Importujte šablonu — TapHome se automaticky přihlásí k odběru topiců zařízení

Dostupná zařízení

Shelly Flood MQTT Modul
Vlastní proměnné
sensor1_topic (string) = shellyflood-deviceidNázev MQTT topicu senzoru zaplavení 1 — formát je 'shellyflood-DEVICEID' (Device ID najdete v Shelly web UI → Settings → Device Info)
sensor2_topic (string) = shellyflood-deviceidNázev MQTT topicu senzoru zaplavení 2
sensor3_topic (string) = shellyflood-deviceidNázev MQTT topicu senzoru zaplavení 3
sensor4_topic (string) = shellyflood-deviceidNázev MQTT topicu senzoru zaplavení 4
sensor5_topic (string) = shellyflood-deviceidNázev MQTT topicu senzoru zaplavení 5
Senzor zaplavení 1 Jazýčkový kontakt Pouze ke čtení

Detekce úniku vody — hlásí alarm při přítomnosti vody, OK když je sucho

boolean
Servisní atributy
Baterie
Teplota

Senzor zaplavení 1

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

VAR topicPrefix := "shellies/" + sensor1_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/flood") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "true", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "false", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Senzor zaplavení 2 Jazýčkový kontakt Pouze ke čtení

Detekce úniku vody — hlásí alarm při přítomnosti vody, OK když je sucho

boolean
Servisní atributy
Baterie
Teplota

Senzor zaplavení 2

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

VAR topicPrefix := "shellies/" + sensor2_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/flood") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "true", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "false", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Senzor zaplavení 3 Jazýčkový kontakt Pouze ke čtení

Detekce úniku vody — hlásí alarm při přítomnosti vody, OK když je sucho

boolean
Servisní atributy
Baterie
Teplota

Senzor zaplavení 3

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

VAR topicPrefix := "shellies/" + sensor3_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/flood") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "true", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "false", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Senzor zaplavení 4 Jazýčkový kontakt Pouze ke čtení

Detekce úniku vody — hlásí alarm při přítomnosti vody, OK když je sucho

boolean
Servisní atributy
Baterie
Teplota

Senzor zaplavení 4

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

VAR topicPrefix := "shellies/" + sensor4_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/flood") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "true", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "false", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Senzor zaplavení 5 Jazýčkový kontakt Pouze ke čtení

Detekce úniku vody — hlásí alarm při přítomnosti vody, OK když je sucho

boolean
Servisní atributy
Baterie
Teplota

Senzor zaplavení 5

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

VAR topicPrefix := "shellies/" + sensor5_topic;

IF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/flood") = 0)
    VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);

    IF (COMPARE(value, "true", CompareOptions.IgnoreCase) = 0)
        Rc := 1;
    ELSEIF (COMPARE(value, "false", CompareOptions.IgnoreCase) = 0)
        Rc := 0;
    ELSE
        Rc := NaN;
    END
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/temperature") = 0)
    temp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ELSEIF (INDEXOF(RECEIVEDMSG.TOPIC, topicPrefix + "/sensor/battery") = 0)
    battery := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
    IF battery < 20
        ADDWARNING("Battery low (" + battery + "%)");
    END
END
Servisní atributy
Battery
battery + "%"
Temperature
temp + "°C"
Připojení: Packet Parser → MQTT
Možná vylepšení (2)
  • Connection Status — LWT topic — true on connect, false on disconnect. Could detect offline sensors.
  • Full Status JSON — Complete /status as JSON (fw ≥1.8.0). Could parse wifi_sta.rssi, battery, act_reasons.

Zdroje

Našli jste problém s touto šablonou zařízení?

Napište nám, co nefunguje, co chybí, nebo jak by se měla šablona chovat. Vaše zpětná vazba nám pomáhá udržet katalog přesný.

Ověřeno TapHome

Chcete to použít ve svém TapHome jádře?

Otevřete tuto šablonu v zákaznickém portálu a použijte ji ve svém domově, nebo navrhněte úpravu a odešlete ji zpět do katalogu.

Otevřít v portálu