MQTT

MQTT server

Zařízení primárně komunikuje přes internet s pomocí MQTT serveru (broker). Adresa tohoto serveru je přednastavena v zařízení, ale je možno ji změnit a použít vlastní server.

Vlastní server můžete nainstalovat na svém PC, popřípadě na jednodeskových počítačích typu Raspberry Pi, v pronajatém VPS serveru apod. Pro běžné účely můžeme nainstalovat např. MQTT broker Mosquitto. K brokeru pak připojíte jednak samotné zařízení, ale také třeba vlastní aplikaci. Místo aplikace nebo skriptu můžete zvolit jednoduchou variantu a použít nástroje do příkazové řádky - např. mosquitto_pub a mosquitto_sub pro odeslání resp. přijímání zpráv.

Příklad použití mosquitto_pub pro otevření okna na 100%

mosquitto_pub  -t ion/nmfnjabs/%18fe34e010e2/cmd -m "open;100"

ion/nmfnjabs/%18fe34e010e2 je téma (v kontextu MQTT), ve kterém zařízení očekává příkazy (více níže), open;100 je příkaz, který má zažízení vykonat. Tento příklad předpokládá MQTT broker dostupný na localhost a standardním portu.

MQTT protokol

Protože vetšina témat MQTT začínají vždy stejně, budeme v následujícím textu psát místo začátku jen PREFIX, což bude odpovídat ion/<USER>/%<DEVICE_ID> . Kde

  • USER je uživatel přihlášený do MQTT (v zařízení označení jako REMOTE_ID),
  • DEVICE_ID je hexadecimální řetězec jednoznačně identifikující Vaše zařízení.

Příklad prefixu je ion/nmfnjabs/%18fe34e010e2. (všimněte si znaku % před identifikátorem zařízení)

Připojení, iniciální data

Po připojení k MQTT serveru se zařízení přihlásí k odběru následujících témat (z angl. topic):

  • PREFIX/cmd/#
  • PREFIX/s/+/cmd

První téma slouží pro zasílání obecných příkazů pro zařízení, druhé pak pro příkazy určené senzorům, vč. interních.

Následně zařízení odešle řetězec "1" to tématu PREFIX/online a stavová data do tématu PREFIX/status. Obojí s příznakem RETAIN (tedy trvalá data v MQTT)

Téma PREFIX/online je možné použít k rozlišení online/offline stavu (tedy zda je zařízení připojeno), při odhlášení nebo odpojení zařízení bude zpráva v tomto tématu přepsána na "0" (toto chování zajišťuje MQTT broker pomocí zprávy Last Will - "poslední vůle").

Jakýkoliv MQTT klient by tedy pro detekci připojených zařízení měl sledovat téma ion/<USER>/#, popř. samostatně ion/<USER>/+/online a ion/<USER>/+/status

Příkazy pro zařízení

Příkazy pro zařízení odpovídají příkazům pro ostatní API, s tím rozdílem, že celý příkaz včetně parametrů je obsahem MQTT zprávy a oddělovačem misto lomítka je středík (;)

Např. pro zaslání příkazu open s parametrem 50 (otevření na 50%) pošleme zprávu "open;50" do tématu PREFIX/cmd

Příkazy pro senzory

Interní senzory nemají žádné veřejné přikazy. Příkazy použitelné s ostatními zařízeními a externími senzory budou doplněny vždy při uvolňování zařízení na trh.

Stavová informace zařízení

Informace je v textové podobě, jednotlivé informace jsou oddělěny řádky (znak LF), každý řádek je ve tvaru klíč:hodnota Tato informace se posílá do tématu PREFIX/status automaticky při každé změně stavu.

Příklad stavové informace
     t:swr
     s:200
     e:0
     ok:1
     ro:0
     pos:c
     fix:0
     a:0
     fw:203.2.1
     mem:19928
     up:259284714
     ip:285870602
     cid:BedroomWindow
     rssi:-63
     time:1523292002
t
typ zařízení (swr)
s
Stavový kód
e
Chybový kód
ro
hřeben zasunut v zařízení
pos
poloha okna (c - zavřeno, o - otevřeno)
fix
poloha okna fixována (okno je přidržováno zařízením)
ip
32bitové čislo reprezentující IP adresu" "
cid
Název zařízení
rssi
Síla signálu
fw
Verze firmwaru v zařízení