AN48: MQTT prakticky na Poseidon2 a Damocles2


Czech version

 


English version

 


 

Protokol MQTT je úsporný TCP/IP protokol postavený určený pro nasazení v IoT aplikacích, nebo v aplikacích kde mnoho vnějších zařízení odesílá data do centrálního zdroje. Centrální zdroj je schopen data sdružovat a dále je šířit všem (zařízením), přihlášeným k odběru informací.

Tato aplikační poznámka popisuje jak použít MQTT protokol ve spolupráci se systémem broker.mqttdashboard.com a aplikací TT3.

Jak funguje MQTT

Protokol MQTT lze asi nejblíže přirovnat k SNMP trapu, ale na TCP vrstvě. Komunikace neprobíhá stylem otázka odpověď, ale jen stylem odeslání dat a potvrzení o jejich doručení – tzv. publikování (publish). To je veliká výhoda pro zatížení sítě, protože jednotlivá, „vstupní“ zařízení (senzory, detektory apod.) aktivně odesílají krátké TCP zprávy na zadanou adresu serveru, tzv. Brokeru.

Výhodou je odesílání ze vstupních zařízení v době, kterou tato zařízení uznají za potřebnou, v pravidelných intervalech či podle jinak výrobcem zadaných kritérií (sepnutí či rozepnutí vstupu, překročení povolené meze hodnoty, nárůst či pokles hodnoty a podobně)
Každá zpráva je uvozena nějakým předmětem či názvem tématu (Topic) který data charakterizuje a řadí je do nějaké skupiny či je identifikuje.

Broker

MQTT broker, se primárně chová jako server, tedy přijímá data a skladuje je. Navíc se však umí chovat vůči ostatním Brokerům v síti rovněž jako klient (vstupní zařízení) schopný odesílat data dál všem odběratelům (subscriber), kteří si je objednali k odběru (subscribe). Odběratelem v tomto případě může být například webová služba, aplikace či právě jiný broker.

Koncová zařízení odesílají data na zadané adresy Brokerů, odběratelé se hlásí Brokerům s přihlášením k odběru (podobně jako se zákazníci přihlašují k odběru novinek e-mailem). Pokud broker obdrží zprávu obsahující Topic odpovídající přihlášenému odběru, zprávu uloží a současně rozešle přihlášeným odběratelům.

Topic

Téma (MQTT topic), či předmět, zprávy je vždy textový řetězec, který může nabývat stromové struktury pomocí znaku „/“ (lomeno). Topic pak může vypadat například takto:

Poseidon/1-Wire/temperature/856275

GTS/nagano/room1/temperature

 

Odběratel se pak může přihlásit buď k odběru konkrétního tématu (topicu) nebo celé větvě či celého stromu.
V topicu lze použít zástupné znaky „#“, ,,+“ a „$“.

  • „+“ nahrazuje celou úroveň (Poseidon/+/temperature/856275)
  • „#“ je ekvivalentem známé hvězdičky a nahrazuje více úrovní (Poseidon/#).
    „#“ smí být použit pouze na konci řetězce.
  • Témata zažínající znakem „$“ jsou speciální, zpravidla systémová témata
  • Pokud jméno tématu začíná znakem „$“, jedná se o speciální téma (např. $SYS/broker/uptime).


Součástí Topicu je pak ještě příznak QoS, který definuje, zda je požadováno doručení zprávy. Hodnota 0 představuje, informaci že úspěšné doručení není vyžadováno, hodnota 1 umožňuje doručení s možnou duplicitou (nedorazí-li potvrzení o doručení, odešle se zpráva znovu) a hodnota 2 značí že je požadováno úspěšné doručení, ale nesmí dojít k duplicitám.

Payload

MQTT payload představuje vlastní obsah zprávy. Standardně se obsah zprávy předpokládá v textové podobě, ale protokol MQTT je v tomto směru benevolentní a záleží jen a jen na brokeru a odběratelích, zda a jak si s obsahem poradí. Data tedy mohou být i binární či například může jít o obrázky. Velikost a typ zprávy jsou dány brokerem. Řada brokerů pak například preferuje soubory XML nebo JSON, protože pro větší objem dat jsou úspornější než odeslání většího počtu krátkých zpráv (topiců).

Bezpečnost

Protokol MQTT standardně komunikuje na TCP vrstvě na portu 1883. Pro zvýšení bezpečnosti lze použít komunikaci zabezpečenou pomocí SSL / TLS a poté komunikace probíhá na portu 8883


Aplikace MQTT v jednotkách Poseidona2 a Damocles2

V jednotkách Poseidon2 a Damocles2 je implementován MQTT klient s volitelnou podporou SSL.

  • MQTT enable – Zapne či vypne podporu MQTT v jednotkách Poseidon2 a Damocles2.
  • Server – IP adresa nebo doménové jméno MQTT brokeru (serveru)
  • Port – TCP port na kterém Broker naslouchá
  • Username – Uživatelské jméno pro autorizaci TCP komunikace
  • Password – Heslo pro autorizaci TCP komunikace
  • Secure SSL mode – Aktivuje/deaktivuje SSL režim                           
  • Client ID – ID klienta v rámci MQTT                         
  • Publish Period – perioda odesílání naměřených informací           
  • Topic Prefix Name – Přefix předmětu zprávy. Celý Topic je pak tvořen složením prefixu + topicu uvedeného níže
  • Publish – vybere informace které mají být odesílány

 

Použití MQTT prakticky

Pro MQTT existuje řada veřejných Brokerů. Na které lze tada posílat a ze kterých je lze podle Topiců odebírat. Seznam těch nejznámějších lze nalézt například na adrese https://github.com/mqtt/mqtt.github.io/wiki/public_brokers

Pro naše účely jsme zvolili například server broker.mqttdashboard.com. Nejprve nastavíme jednotku Poseidon2:

Vyplňte Adresu serveru, Port, ClientID (libovolné) a Topic Prefix Name (cokoliv podle čeho budete schopni zařízení vyfiltrovat). Nezapomeneme checkboxem vybrat hodnoty určené k publikaci (Publish).
Jednotku Poseidon2 nebo Damocles2 nakonec restartujte.  

Spusťte program TT3 což je vlastně MQTT Broker a lzeho získat na adrese https://github.com/mqtt/mqtt.github.io/wiki/public_brokers

Nastavte adresu Brokeru (serveru), port (obě hodnoty stejné jako v Poseidon2) a opět klientské ID (musí být od Poseidonu odlišné. Následně stiskněte tlačítko Connect). Vpravo dole se v zeleném poli vypíše status Connected.

Následně do Pole Topic vyplňte adresu Topic, která nás zajímá. Například Topic „Poseidon2/#“ znamená všechny zprávy jejichž Topic začíná Poseidon2/. Stiskem tlačítka Subscribe se přihlašte k odběru a začnete dostávat zprávy.

 

FAQ - Časté dotazy

    Spam protection. How many is six times six?

    Nejaký dotaz?
    Jméno: 
    Firma: 
    Email: *
    Newsletter:
    Telefon: 
    Zeme: *


  • Kdo přiděluje User Name, Password?
    Jméno a heslo jsou nepoviné položky, například broker.mqttdashboard.com jej zatím nevyžaduje.
    Informace o potřebě a možnosti autorizace získáte u provozovatele Brokeru.
     
  • Kdo přiděluje Client ID?
    To si uživatel ve svém profile sám zvolí, případně jich použije několik různých a filtruje podle nich zprávy ve svém účtu.
     
  • Co znamená Publish Period?
    Poseidon2 se v této periodě [s] připojuje periodicky na broker aby nahlásil stavy připojených proměnných.
     
  • Proč jsou v Poseidon2 u jednoho senzoru nebo DI vstupu vždy dva checkboxy?
    Můžete si zde zaškrtnout co přesně k dané proměnné bude Poseidon2 do MQTT zprávy odesílat. Hodnotu proměnné (zde například hodnotu teploty v °C) a zároveň stav (state) této proměnné (Horní limit / Spodní limit / odpojený senzor / ..). Topic pro každou proměnou je uveden v nastavení..
     
  • Týká se MQTT také výstupů z Poseidon2?
    Ne, DO výstupy nyní nelze přes MQTT ovládat.

Klíčová slova

MQTT, MQTT topic, MQTT Broker, MQTT payload, Poseidon2, Damocles2, tt3

 

Odkazy