TapHome

Shelly Gas MQTT

Packet Parser → MQTT
Autor
Posljednje ažuriranje: 10. 2026

Ovaj uređaj podržava mDNS

Umjesto IP adrese uređaju možete pristupiti na adresi:

shellygas-{MAC}.local

Zamijenite {MAC} MAC adresom svog uređaja (velika slova, bez dvotočaka).

TapHome podržava mDNS. Naziv računala (hostname) pouzdaniji je od statične IP adrese.

Shelly Gas MQTT

Shelly Gas (model SHGS-1) je Wi-Fi detektor zapaljivih plinova s napajanjem iz mreže. Uključuje se izravno u zidnu utičnicu, neprekidno mjeri koncentraciju plina i kada koncentracija prijeđe prag, pokreće vlastiti zvučni i svjetlosni alarm. Prodaje se kao dva zasebna proizvoda: Shelly Gas CNG za stlačeni prirodni plin (metan) i Shelly Gas LPG za ukapljeni naftni plin (propan / butan). Oba imaju isti firmver i iste MQTT teme, pa ovaj jedan predložak radi s oba. Razlikuju se samo senzorski element i preporučena visina postavljanja.

Ovaj se predložak spaja na MQTT broker, a ne izravno na uređaj. Modul se na brokeru pretplaćuje na shellies/# i prema Device ID-u izdvaja poruke koje pripadaju jednoj jedinici Shelly Gas. TapHome prima stanje alarma i koncentraciju plina čim ih uređaj objavi i može pokrenuti samotestiranje senzora.

Dostupna je i HTTP varijanta ovog predloška (Shelly Gas). Ovaj MQTT predložak koristite kada u instalaciji već radi MQTT broker i kada su poželjna ažuriranja koja uređaj sam šalje. HTTP predložak koristite kada broker ne postoji.

Shelly Gas je sigurnosni uređaj. Integracija s TapHome nadopunjuje njegovu ugrađenu zujalicu i LED alarm, ali ih ne zamjenjuje. Zujalica i LED rade neovisno o MQTT-u, brokeru i centralnoj jedinici TapHome te nastavljaju raditi i kada bilo što od toga nije dostupno.

Hardver

Postavljanje

Jedinica se uključuje u mrežnu utičnicu, nema ožičenja. Ispravna visina postavljanja ovisi o varijanti plina, jer se ta dva plina u zraku ponašaju različito.

VarijantaOtkriveni plinPonašanje u zrakuPreporučeno postavljanje
Shelly Gas CNGStlačeni prirodni plin (metan)Lakši od zraka, skuplja se pri stropu0,3–1 m ispod stropa, okomito, i 1,5 m od izvora plina
Shelly Gas LPGUkapljeni naftni plin (propan / butan)Teži od zraka, skuplja se pri podu0,3 m iznad poda, unutar 1,5 m od izvora plina

CNG i LPG su dva zasebna proizvoda s različitim senzorima, a ne dva načina rada između kojih se može prebacivati. Ako varijanta nije jasna, provjerite oznake na stražnjoj strani uređaja.

Specifikacija
ParametarVrijednost
Napajanje110–230 V ±10 %, 50/60 Hz AC
Potrošnja snage< 3 W
Osjetljivost alarma6 % DGE (donja granica eksplozivnosti, LEL)
Razina zvuka≥ 70 dB
Wi-Fi802.11 b/g/n, 2400–2484 MHz
Dometdo 50 m na otvorenom, do 30 m u zatvorenom
Radna temperatura−10 °C do +50 °C
Izlaz priključka za pogon ventila11–13 V, 500 mA (vanjski dodatak, ovaj predložak njime ne upravlja)
Dimenzije89,5 × 89,5 × 38 mm (bez utikača)
Lokalna signalizacija

LED prsten i zujalica vlastita su signalizacija uređaja. TapHome vidi samo dvije teme opisane u odjeljku Mogućnosti uređaja, pa ti signali nose informacije koje ne stižu do centralne jedinice.

LED prstenZnačenje
Stalno svijetli zelenoSenzor u normalnom radu
Stalno svijetli žutoKvar senzora
Treperi crvenoAlarm
Treperi redom crveno / žuto / zelenoSenzor se zagrijava
Način oglašavanja zujaliceDogađaj
Dva kratka zvuka u sekundiZagrijavanje je počelo nakon uključivanja
Jedan dugi zvuk u sekundiZagrijavanje je završeno
Dugi zvuk jednom u sekundi dok se kvar ne otkloniKvar senzora
Tri kratka zvuka dvaput u sekundiSamotestiranje je u tijeku
Dugi zvuk jednom u sekundiSamotestiranje je uspješno završeno
Dugi zvuk jednom u sekundi, dok curenje ne prestane ili se ne pojačaBlago curenje plina
Pet sekundi zvučnog signala sa stankom od jedne sekunde, dok curenje ne prestaneJako curenje plina

Nakon uključivanja senzor se zagrijava oko tri minute. LED prsten pritom redom treperi crveno / žuto / zeleno, a očitanje plina nije valjano.

Konfiguracija

Uključivanje MQTT-a na uređaju
  1. U pregledniku otvorite web-sučelje uređaja.
  2. Idite na Internet and Security → Advanced - Developer Settings.
  3. Označite Enable action execution via MQTT.
  4. Polje Server ispunite prema obrascu {IP adresa MQTT brokera}:{port}, na primjer 192.168.1.10:1883.
  5. Pritisnite SAVE. Uređaj se ponovno spaja i počinje objavljivati na broker.

Na firmveru Gen1 uključivanje MQTT-a isključuje vezu sa Shelly Cloud: to dvoje ne može raditi istodobno. Uređaji Gen1 ne podržavaju ni MQTT preko TLS-a, pa broker mora prihvaćati obični MQTT na portu 1883. Broker držite u pouzdanoj lokalnoj mreži.

Očitavanje Device ID-a

U web-sučelju idite na Settings → Device Info → Device ID. Potreban je prvi niz znakova, a ne vrijednost u zagradama. To je Shelly-ID od šest ili više znakova, na primjer 35FA58. Isti se identifikator pojavljuje u Wi-Fi mreži koju uređaj stvara u načinu pristupne točke (ShellyGas-35FA58) i čini prefiks MQTT teme shellies/shellygas-35FA58/.

Postavljanje predloška

Predložak traži tri parametra pri uvozu:

Parametar pri uvozuZadanoVrijednost koju treba unijeti
Mqtt Broker IP address192.168.0.1IP adresa MQTT brokera, ne uređaja Shelly Gas
Mqtt Broker port1883Port na kojem broker sluša
Device ID—Shelly-ID očitan gore, npr. 35FA58

Parametar Device ID popunjava varijablu deviceID na razini modula, iz koje se sastavlja prefiks za svaku temu koju modul koristi. Modul se pretplaćuje na shellies/#, a njegove skripte za primanje poruka filtriraju dolazne poruke prema tom prefiksu.

Uređaj prema zadanim postavkama objavljuje ažuriranje svakih 30 sekundi. Postavljanjem parametra uređaja mqtt_update_period na 0 uređaj javlja samo pri promjeni.

Mogućnosti uređaja

Alarm plina

Alarm plina je prekidač s više vrijednosti koji dobiva podatke iz teme shellies/shellygas-<deviceID>/sensor/gas. Prenosi razinu alarma koju je uređaj već odredio iz izmjerene koncentracije.

Vrijednost u TapHomeMQTT payloadZnačenje
Nema alarmanoneKoncentracija ispod 1800 ppm
Blago curenje plinamildKoncentracija od 1800 ppm naviše
Jako curenje plinaheavyKoncentracija od 3000 ppm naviše
SamotestiranjetestObjavljuje se nakon uspješnog samotestiranja
Stanje alarma je nepoznatounknown ili bilo koji drugi payloadUređaj ne može odrediti razinu alarma

Oba su praga fiksno zadana u firmveru uređaja i ne mogu se promijeniti.

Koncentracija plina

Koncentracija plina čita neobrađenu vrijednost iz teme shellies/shellygas-<deviceID>/sensor/concentration u dijelovima na milijun, raspon 0–65535 ppm. To je isto fizičko mjerenje kao Alarm plina, prije nego što firmver primijeni svoje pragove.

Alarm plina koristite za logiku alarma, a Koncentraciju plina za trendove, grafikone i vlastite granice ranog upozorenja ispod 1800 ppm. Smart rule ne bi trebao sam iz vrijednosti ppm izvoditi vlastitu razinu alarma i očekivati da se poklapa s uređajem: zujalica i LED prate fiksne pragove firmvera.

Uređaj u temi koncentracije objavljuje -1 kad god očitanje nije valjano: tijekom zagrijavanja od otprilike tri minute nakon uključivanja i dok je senzor u kvaru. Predložak tu vrijednost -1 sprema takvu kakva jest, to nije kod pogreške sustava TapHome.

Samotestiranje

Modul nudi servisnu radnju Samotestiranje koja objavljuje u temu shellies/shellygas-<deviceID>/sensor/start_self_test. Dok test traje, uređaj se oglašava s tri kratka zvuka dvaput u sekundi, a kada uspije, u temi plina objavljuje test, što se u sustavu TapHome prikazuje kao vrijednost Samotestiranje u Alarmu plina.

Poznata ograničenja

Utišaj aktivni alarm ne dolazi do uređaja

Predložak sadrži tipkalo Utišaj aktivni alarm, ali u trenutačnoj reviziji predloška nema nikakav učinak. Tipkalo objavljuje u doslovnu temu shellies/shellygas-<deviceid>/sensor/mute: rezervirano mjesto <deviceid> nikada se ne zamjenjuje postavljenim Device ID-om, pa poruka odlazi u temu na koju nije pretplaćen nijedan stvarni uređaj. Ostale tri teme u istom predlošku ispravno sastavljaju prefiks iz varijable deviceID.

Ne oslanjajte se na tipkalo Utišaj aktivni alarm. Utišavanje aktivnog alarma iz sustava TapHome radit će tek kada se predložak ispravi tako da temu sastavlja iz varijable deviceID. Alarm se uvijek može utišati na samom uređaju, opcijom Mute u njegovu web-sučelju, i to samo dok je alarm stvarno aktivan.

Rješavanje problema

U TapHome ne stižu vrijednosti
  1. Provjerite je li MQTT uključen na uređaju i sadrži li polje Server adresu brokera u obliku {IP}:{port}
  2. Provjerite upućuje li krajnja točka modula na MQTT broker, a ne na IP adresu uređaja Shelly Gas
  3. Provjerite odgovara li Device ID točno onome što prikazuje Settings → Device Info → Device ID: samo prvi niz, bez vrijednosti u zagradama
  4. MQTT klijentom (na primjer MQTT Explorer) pretplatite se na shellies/# i provjerite stižu li poruke pod shellies/shellygas-<your-id>/
  5. Ako je uređaj prebačen na javljanje samo pri promjeni (mqtt_update_period = 0), pokrenite servisnu radnju Samotestiranje: nakon uspješnog testa uređaj objavljuje poruku u temi plina
Koncentracija plina pokazuje -1

Očitanje senzora nije valjano. Uređaj se još zagrijava (oko tri minute nakon uključivanja) ili je senzor u kvaru. Kvar se na uređaju prikazuje kao žuta LED koja stalno svijetli i dugi zvuk jednom u sekundi. Ovaj predložak ne čita temu stanja senzora, pa kvar do sustava TapHome dolazi samo kao ova vrijednost -1.

Alarm plina pokazuje „Stanje alarma je nepoznato”

Ta je vrijednost zamjenska grana predloška. Hvata dokumentirani payload unknown i svaki payload izvan četiri poznate vrijednosti. Provjerite LED prsten na uređaju da biste vidjeli u kojem je stanju senzor stvarno.

Uređaj je nestao iz Shelly Cloud

Na firmveru Gen1 to je očekivano: uključivanje MQTT-a isključuje vezu s oblakom. Web-sučelju pristupite preko lokalne mreže, putem IP adrese uređaja ili mDNS naziva hosta shellygas-<MAC>.local.

Kako ga instalirati u TapHome

Preduvjeti

  • Uređaj Shelly spojen na Wi-Fi (2,4 GHz), npr. putem aplikacije Shelly ili vlastite pristupne točke uređaja
  • MQTT broker koji radi u vašoj lokalnoj mreži (npr. Mosquitto, Home Assistant ili ugrađeni broker TapHome)
  • TapHome CCU u istoj mreži kao broker

Na uređajima Gen1 uključivanje MQTT-a isključuje Shelly Cloud. MQTT i Shelly Cloud ne mogu raditi istodobno. Na uređajima Gen2/Plus to ograničenje ne vrijedi.

Korak 1 — Uključite MQTT na uređaju Shelly

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

  1. Otvorite web-sučelje Shelly: http://<device-ip>/
  2. Idite na Internet & Security → Advanced — MQTT
  3. Uključite MQTT
  4. Postavite MQTT Server: <broker-ip>:<port> (npr. 192.168.1.10:1883)
  5. Ako vaš broker zahtijeva autentifikaciju, postavite MQTT User i MQTT Password
  6. Kliknite Save — uređaj će se ponovno pokrenuti i spojiti na broker

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

  1. Otvorite web-sučelje Shelly: http://<device-ip>/
  2. Idite na Settings → MQTT
  3. Uključite MQTT
  4. Postavite Server: <broker-ip>:<port> (npr. 192.168.1.10:1883)
  5. Client ID je unaprijed popunjen ID-jem uređaja (npr. shellyplus1pm-AABBCCDDEE) — ostavite ga takvim, osim ako ga iz određenog razloga trebate promijeniti
  6. Kliknite Save i ponovno pokrenite uređaj

Za provjeru rada MQTT-a koristite MQTT klijent (npr. MQTT Explorer) i pretplatite se na shellies/# (Gen1) ili <device-id>/# (Gen2). Trebali biste vidjeti statusne poruke uređaja.

Korak 2 — Pronađite Device ID / MQTT Client ID

Neki predlošci zahtijevaju parametar Device ID ili MQTT Client ID. To je jedinstveni identifikator koji se koristi u MQTT temama (topics).

  • Gen1: nalazi se na naljepnici kao MAC adresa (npr. AABBCCDDEE). Device ID = shelly<model>-<mac>, npr. shelly1pm-AABBCCDDEE
  • Gen2/Plus: nalazi se u web-sučelju Shelly pod Settings → Device Info → Device ID ili na naljepnici uređaja

Korak 3 — Konfiguracija u sustavu TapHome

  1. U sustavu TapHome dodajte novi modul Packet Parser (MQTT)
  2. IP adresa: unesite IP adresu MQTT brokera (npr. 192.168.1.10)
  3. Port: 1883 (zadano; za TLS koristite 8883)
  4. Device ID / MQTT Client ID: unesite vrijednost iz koraka 2 (ako je predložak zahtijeva)
  5. Uvezite predložak — TapHome će se automatski pretplatiti na teme uređaja

Dostupni uređaji

Shelly Gas MQTT Modul
Servisne radnje
SamotestiranjePokreće samotestiranje senzora na uređaju — zujalica se oglašava s tri kratka zvuka dvaput u sekundi, a nakon uspješnog testa Alarm plina javlja Samotestiranje.
Prilagođene varijable
deviceID (string)Shelly-ID jedinice Shelly Gas — niz od šest ili više znakova koji čini prefiks MQTT teme shellies/shellygas-<deviceID>/ (npr. 35FA58). Pronađite ga u web-sučelju Shelly pod Settings → Device Info → Device ID.
Open the Shelly web interface → Settings → Device Info → Device ID and copy the first string of characters (not the value in brackets). The template asks for it as the 'Device ID' import parameter.

Shelly GAS MQTT

Servisne radnje
Self test
mqttpublish("shellies/shellygas-"+deviceID+"/sensor/start_self_test","1");
Alarm plina Prekidač s više vrijednosti Samo za čitanje

Razina alarma koju javlja senzor — Nema alarma, Blago curenje plina (od 1800 ppm), Jako curenje plina (od 3000 ppm), Samotestiranje ili Stanje alarma je nepoznato. Pragovi su fiksno zadani u firmveru uređaja i ne mogu se promijeniti.

enum multi-value switch
Vrijednosti / stanja: No alarm · Mild gas leak · Heavy gas leak · Self Test · Alarm state is unknown

Alarm plina

Čitanje stanja sklopke
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Zapis stanja sklopke
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Mu);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Mu, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + Mu + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Mu + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Mu, "write"); # use "append" mode to append data to existing file
Listener
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellygas-"+deviceID+"/sensor/gas")
 switch(TOSTRING(RECEIVEDMSG.PAYLOAD),
 "none", Mu := 0,
 "mild",Mu := 1,
 "heavy",Mu := 2,
 "test", Mu := 3,
 Mu := 4);
END
Koncentracija plina Varijabla Samo za čitanje

Izmjerena koncentracija zapaljivog plina u dijelovima na milijun, raspon 0–65535 ppm. Dok se senzor zagrijava ili je u kvaru, uređaj javlja -1.

numeric Jedinica: ppm

Koncentracija plina

Zapis
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Va);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Va, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + Va + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Va + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Va, "write"); # use "append" mode to append data to existing file
Čitanje (modul)
# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/getValue");
# IF response.IsSuccess
#  VAR content := response.Content;
#  VAR responseHeaders := response.Headers;
#  RETURN(PARSEXML(content, "//element1/value1"));
# ELSE
#  ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
#  RETURN(NaN);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/getValue", "GET", "some data", "header1:value1", "header2:value2", ...);
# OR
# VAR request := HTTPREQUEST("/example/getValue", "POST", "some data");
# request.headers := { "header1:value1", "header2:value2", ...};
# request.method := "GET";
# request.data := null;
# VAR response := SENDHTTPREQUEST(request);
#
#
# Send TCP, UDP data:
# VAR data1 := BYTECOLLECTION("0a bb ea df 01");
# SENDDATA(data1);
# VAR data2 := "{\"name\":\"John\", \"age\":32}";
# SENDDATA(data2);
# VAR data3 := TOBYTES("{\"name\":\"John\", \"age\":32}", "iso-8859-1");
# SENDDATA(data3);
# Process received TCP or UDP data and set device values in the Listener script
#
#
# Download data from FTP:
# FTPDOWNLOAD("filePath");
Listener
# Parse received bytes:
IF(RECEIVEDMSG.TOPIC = "shellies/shellygas-"+deviceID+"/sensor/concentration")
 Va := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
END
Utišaj aktivni alarm Tipkalo

Tipkalo namijenjeno utišavanju trenutačno aktivnog alarma. U trenutačnoj reviziji predloška nema nikakav učinak — tema na koju objavljuje ne sastavlja se iz postavljenog Device ID-a.

action push button

Utišaj aktivni alarm

Zapis stanja tipke
MQTTPUBLISH("shellies/shellygas-<deviceid>/sensor/mute","1");

# Simple HTTP Request:
# VAR response := SENDHTTPREQUEST("/example/set/value=" + Bp);
# IF response.IsSuccess = false
#  ADDERROR(response.StatusCode);
# END
#
# Set Http request method, body and headers
# VAR response := SENDHTTPREQUEST("/example/setValue", "GET", "value=" + Bp, "header1:value1", "header2:value2", ...);\r
# Or VAR request := HTTPREQUEST("/example/setValue");
# request.Method := "PUT";
# VAR response := SENDHTTPREQUEST(request);
#r
#
# Send TCP, UDP data:
# VAR data1 := "{\"name\":\"John\", \"age\":" + Bp + "}";
# SENDDATA(data1);
# VAR data2 := TOBYTES("{\"name\":\"John\", \"age\":" + Bp + "}", "iso-8859-1");
# SENDDATA(data2);
# You can process received TCP or UDP data in the Listener script
#
#
# Upload data to FTP:
# FTPUPLOAD("filePath", "somedata=" + Bp, "write"); # use "append" mode to append data to existing file
Povezivanje: Packet Parser → MQTT • Naziv računala (hostname): shellygas-{MAC}.local
Moguća poboljšanja (6)
  • Sensor state — unknown | warmup | normal | fault — the template does not read it, so a sensor fault does not surface as its own state in TapHome (only indirectly as -1 on the concentration).
  • Self-test state — not_completed | completed | running | pending — the self-test can be started from TapHome, but its progress is not read back.
  • Unmute alarm — Any payload unmutes an active alarm. Not published by the template.
  • Valve state — unknown | closed | opened | not_connected | failure | closing | opening | checking — state of the optional external valve manipulator (11–13 V, 500 mA jack).
  • Valve control — Accepts the literal payloads 'open' or 'close'. The template does not publish it — this template offers no valve control at all.
  • Connection status — Last Will and Testament topic — true on connect, false on disconnect. Could detect an offline sensor.

Izvori

Pronašli ste problem s ovim predloškom uređaja?

Recite nam što ne radi, što nedostaje ili kako bi se predložak trebao ponašati. Vaše povratne informacije pomažu nam da katalog bude točan.

Provjerio TapHome

Želite ovo koristiti u svojoj centralnoj jedinici TapHome Core?

Otvorite ovaj predložak na portalu Customer Portal kako biste ga primijenili na jedan od svojih domova ili predložili poboljšanje i poslali ga natrag u katalog.

Otvorite na portalu