TapHome

Shelly Flood

Packet Parser → MQTT
Trimis de
Ultima actualizare: 03. 2026

Acest dispozitiv acceptă mDNS

În loc să folosiți o adresă IP, puteți accesa dispozitivul la:

shellyflood-{MAC}.local

Înlocuiți {MAC} cu adresa MAC a dispozitivului dvs. (majuscule, fără două puncte).

TapHome acceptă mDNS — folosirea unui nume de gazdă este mai fiabilă decât un IP static.

Shelly Flood

Shelly Flood este un senzor Wi-Fi de scurgeri de apă alimentat cu baterie (CR123A). TapHome comunică cu dispozitivul prin MQTT — protocolul recomandat pentru dispozitivele Shelly cu baterii, deoarece senzorul se află în repaus cea mai mare parte a timpului și publică date doar la trezire.

Șablonul acceptă până la 5 senzori Shelly Flood per modul. Fiecare senzor este identificat prin variabila personalizată sensorN_topic, care indică ID-ul de client MQTT al dispozitivului.

Configurare

ID-ul dispozitivului

Fiecare senzor Shelly Flood are un ID de dispozitiv MQTT unic în formatul shellyflood-<MAC6>, unde <MAC6> reprezintă ultimele 6 caractere ale adresei MAC, în hexazecimal cu litere mici (de ex. shellyflood-112233).

ID-ul dispozitivului se găsește:

  • Pe eticheta dispozitivului (adresa MAC)
  • În interfața web Shelly: Settings → Device Info
  • Prin API: GET http://<device-ip>/settings → câmpul mqtt.id

Acest dispozitiv acceptă descoperirea mDNS. La configurarea TapHome puteți folosi numele de gazdă shellyflood-{MAC}.local în locul adresei IP. Înlocuiți {MAC} cu ultimele 6 caractere ale adresei MAC a dispozitivului, în hexazecimal cu litere mici (de ex. shellyflood-112233.local). Folosirea numelui de gazdă previne problemele de conectivitate atunci când adresa IP a dispozitivului se schimbă.

Configurarea șablonului

După importul șablonului în TapHome:

  1. Deschideți modulul Shelly Flood MQTT
  2. Setați MQTT Broker IP și Port (implicit 1883)
  3. Pentru fiecare senzor, setați variabila personalizată sensorN_topic la ID-ul dispozitivului Shelly Flood corespunzător (de ex. shellyflood-112233)

Modulul se abonează la shellies/#, iar scripturile de ascultare filtrează mesajele după prefixul de topic configurat.

Configurați doar sloturile de senzori pe care le folosiți efectiv. Sloturile neconfigurate (cu valoarea implicită shellyflood-deviceid) afișează un mesaj de eroare care vă solicită să setați topicul corect.

Funcțiile dispozitivului

Detectarea scurgerilor de apă

Fiecare senzor este mapat în TapHome ca dispozitiv de tip contact reed. Starea de inundație se citește din topicul shellies/<id>/sensor/flood:

  • true → Alarmă (apă detectată)
  • false → OK (uscat)

Senzorul se trezește și își publică starea atunci când apa este detectată sau dispare, precum și la intervalele periodice de raportare.

Monitorizarea bateriei și a temperaturii

Fiecare senzor oferă două atribute de service:

  • Baterie — nivelul bateriei în procente, citit din shellies/<id>/sensor/battery. Avertizarea de baterie descărcată se declanșează când nivelul scade sub 20 %.
  • Temperatură — temperatura ambientală în °C, citită din shellies/<id>/sensor/temperature.

Ambele atribute sunt doar pentru citire și se actualizează ori de câte ori senzorul se trezește și publică date.

Funcții suplimentare

Shelly Flood publică și starea online/offline prin topicul MQTT Last Will and Testament (LWT), precum și un mesaj de stare complet în format JSON (firmware ≥1.8.0). Este disponibilă și setarea rain_sensor, care inversează logica de detectare a inundației pentru detectarea ploii în exterior. Aceste funcții pot fi adăugate într-o actualizare viitoare a șablonului.

Rezolvarea problemelor

Senzorul nu raportează date
  1. Verificați dacă Shelly Flood este conectat la Wi-Fi și dacă MQTT este activat în setările dispozitivului
  2. Verificați dacă variabila personalizată sensorN_topic corespunde exact ID-ului dispozitivului (de ex. shellyflood-112233)
  3. Dacă adresa brokerului MQTT s-a schimbat, încercați numele de gazdă mDNS (shellyflood-AABBCCDDEE.local) pentru a verifica dacă senzorul este accesibil în rețea
  4. Folosiți un client MQTT (de ex. MQTT Explorer) pentru a vă abona la shellies/# și verificați dacă senzorul publică mesaje la trezire
Alarma de inundație nu se declanșează
  1. Verificați dacă contactele senzorului de pe partea inferioară a dispozitivului sunt curate și neacoperite
  2. Testați senzorul așezându-l pe o suprafață udă — dispozitivul ar trebui să publice true în topicul /sensor/flood în câteva secunde
  3. Verificați în TapHome starea dispozitivului de tip contact reed — 1 = alarmă, 0 = OK
Bateria se descarcă rapid
  1. Shelly Flood este proiectat pentru o durată lungă de viață a bateriei (CR123A, de obicei 1–2 ani, în funcție de frecvența raportării)
  2. Trezirile frecvente (de ex. din cauza unui semnal Wi-Fi instabil, care necesită reconectări repetate) pot descărca bateria mai repede
  3. Asigurați un semnal Wi-Fi puternic în locul în care este montat senzorul

Dispozitivele Shelly Gen1 nu acceptă MQTT prin TLS. Comunicația dintre senzor și brokerul MQTT nu este criptată (MQTT simplu, portul 1883). Asigurați-vă că brokerul MQTT se află într-o rețea locală de încredere.

Cum se instalează în TapHome

Cerințe preliminare

  • Dispozitiv Shelly conectat la Wi-Fi (2,4 GHz), de ex. prin aplicația Shelly sau prin punctul de acces propriu al dispozitivului
  • Broker MQTT care rulează în rețeaua dvs. locală (de ex. Mosquitto, Home Assistant sau brokerul integrat TapHome)
  • TapHome CCU în aceeași rețea cu brokerul

La dispozitivele Gen1, activarea MQTT dezactivează Shelly Cloud. Cele două nu pot funcționa simultan. La dispozitivele Gen2/Plus această limitare nu se aplică.

Pasul 1 — Activați MQTT pe dispozitivul Shelly

Dispozitive Gen1 (Shelly 1, 1PM, 2.5, EM, 3EM, Plug S, RGBW2, Dimmer, TRV…)

  1. Deschideți interfața web Shelly: http://<device-ip>/
  2. Accesați Internet & Security → Advanced — MQTT
  3. Activați MQTT
  4. Setați MQTT Server: <broker-ip>:<port> (de ex. 192.168.1.10:1883)
  5. Opțional, setați MQTT User și MQTT Password, dacă brokerul dvs. necesită autentificare
  6. Faceți clic pe Save — dispozitivul repornește și se conectează la broker

Dispozitive Gen2 / Plus (Shelly Plus 1, Plus 1PM, Plus 2PM, Plus Plug S, Plus H&T, Pro 3EM…)

  1. Deschideți interfața web Shelly: http://<device-ip>/
  2. Accesați Settings → MQTT
  3. Activați MQTT
  4. Setați Server: <broker-ip>:<port> (de ex. 192.168.1.10:1883)
  5. Câmpul Client ID este precompletat cu ID-ul dispozitivului (de ex. shellyplus1pm-AABBCCDDEE) — lăsați-l neschimbat, dacă nu aveți un motiv anume să îl modificați
  6. Faceți clic pe Save și reporniți dispozitivul

Pentru a verifica funcționarea MQTT, folosiți un client MQTT (de ex. MQTT Explorer) și abonați-vă la shellies/# (Gen1) sau <device-id>/# (Gen2). Ar trebui să vedeți mesajele de stare trimise de dispozitiv.

Pasul 2 — Aflați Device ID / MQTT Client ID

Unele șabloane necesită parametrul Device ID sau MQTT Client ID. Acesta este identificatorul unic folosit în topicurile MQTT.

  • Gen1: se găsește pe etichetă, ca adresă MAC (de ex. AABBCCDDEE). Device ID = shelly<model>-<mac>, de ex. shelly1pm-AABBCCDDEE
  • Gen2/Plus: se găsește în interfața web Shelly, la Settings → Device Info → Device ID, sau pe eticheta dispozitivului

Pasul 3 — Configurați dispozitivul în TapHome

  1. În TapHome adăugați un nou modul Packet Parser (MQTT)
  2. IP Address: introduceți adresa IP a brokerului MQTT (de ex. 192.168.1.10)
  3. Port: 1883 (implicit; pentru TLS folosiți 8883)
  4. Device ID / MQTT Client ID: introduceți valoarea de la pasul 2 (dacă șablonul o necesită)
  5. Importați șablonul — TapHome se abonează automat la topicurile dispozitivului

Dispozitive disponibile

Shelly Flood MQTT Modul
Variabile personalizate
sensor1_topic (string) = shellyflood-deviceidNumele topicului MQTT al senzorului de inundații 1 — formatul este 'shellyflood-DEVICEID' (ID-ul dispozitivului se găsește în interfața web Shelly → Settings → Device Info)
sensor2_topic (string) = shellyflood-deviceidNumele topicului MQTT al senzorului de inundații 2
sensor3_topic (string) = shellyflood-deviceidNumele topicului MQTT al senzorului de inundații 3
sensor4_topic (string) = shellyflood-deviceidNumele topicului MQTT al senzorului de inundații 4
sensor5_topic (string) = shellyflood-deviceidNumele topicului MQTT al senzorului de inundații 5
Senzor de inundații 1 Contact reed Doar citire

Detectarea scurgerilor de apă — raportează alarmă la prezența apei și OK când este uscat

boolean
Atribute de service
Baterie
Temperatură

Senzor de inundații 1

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Senzor de inundații 2 Contact reed Doar citire

Detectarea scurgerilor de apă — raportează alarmă la prezența apei și OK când este uscat

boolean
Atribute de service
Baterie
Temperatură

Senzor de inundații 2

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Senzor de inundații 3 Contact reed Doar citire

Detectarea scurgerilor de apă — raportează alarmă la prezența apei și OK când este uscat

boolean
Atribute de service
Baterie
Temperatură

Senzor de inundații 3

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Senzor de inundații 4 Contact reed Doar citire

Detectarea scurgerilor de apă — raportează alarmă la prezența apei și OK când este uscat

boolean
Atribute de service
Baterie
Temperatură

Senzor de inundații 4

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Senzor de inundații 5 Contact reed Doar citire

Detectarea scurgerilor de apă — raportează alarmă la prezența apei și OK când este uscat

boolean
Atribute de service
Baterie
Temperatură

Senzor de inundații 5

Ascultător
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
Atribute de service
Battery
battery + "%"
Temperature
temp + "°C"
Conexiune: Packet Parser → MQTT • Nume gazdă: shellyflood-{MAC}.local
Îmbunătățiri posibile (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.

Surse

Ați găsit o problemă la acest șablon de dispozitiv?

Spuneți-ne ce nu funcționează, ce lipsește sau cum ar trebui să se comporte șablonul. Feedbackul dvs. ne ajută să păstrăm catalogul corect.

Verificat de TapHome

Doriți să folosiți acest șablon în TapHome Core?

Deschideți acest șablon în Customer Portal pentru a-l aplica într-una dintre locuințele dvs. sau pentru a propune o îmbunătățire și a o trimite înapoi în catalog.

Deschideți în portal