Dříve než se začneme zabývat MQTT komunikaci přímo u PLC nebo HMI, které ji podporují, je dobré mít předem připravený nějaký základní prostřed pro testování a zprovozňování komunikace nebo také pro možnost rychlého a bezproblémového zkoušení různých nastavení. A právě této "přípravě" se bude věnovat tento druhý díl. Zároveň si podle něj lze prakticky ukázat teorii MQTT komunikace popsanou v 1. díle.
Jak si snadno MQTT vyzkoušet?
K nezávaznému praktickému testování MQTT komunikace se výborně hodí softwarové PC aplikace a veřejné volné MQTT broker servery, které umožňují bez jakýchkoliv nákladů si možnosti MQTT bez problémů vyzkoušet. Stačí prakticky k tomu jakýkoliv počítač s libovolným OS, protože MQTT aplikace jsou k dispozici pro Windows, Linux i Mac, a nějaké internetové připojení (klidně i pomalejší). Ideální tedy jsou počítače dva, kdy jeden pracuje jako publisher a druhý jako subscriber, ale případně pro základní zkoušení stačí i jen jeden počítač, který zároveň bude plnit obě tyto úlohy.
Jako příklad volně stáhnutelných PC aplikací vytvářející MQTT klienty (MQTT clients), které pracující jako publisher i jako subscriber, lze uvést následující:
- MQTT.fx - spolehlivý a jednoduchý freeware pro OS Windows, Linux i Mac samostatně spustitelný bez nutnosti instalovat Java runtime (i když je vyvinutý jako JavaFX aplikace) - http://mqttfx.jfx4ee.org/.
- mqtt-spy - MQTT klient jako JavaFx aplikace běžící na Java 8 jádře, které je nutné nejdříve na PC nainstalovat - http://kamilfb.github.io/mqtt-spy/.
- MQTT Inspector - MQTT klient pro Mac iOS - https://itunes.apple.com/us/app/mqttinspector.
- MQTT Lightweight Client - jednoduchý MQTT klient software pro OS Windows - https://sourceforge.net/projects/mqtt-lightweight-client/.
- MyMQTT - MQTT klient pro Android - ke stažení v Google play obchodě - https://play.google.com/store/apps/details?id=at.tripwire.mqtt.client.
Já osobně jsem si oblíbil právě MQTT.fx software, protože pracuje zcela samostatně, i když je postaven na jazyku Java 8. Java runtime je totiž součástí balíčku programu a není tedy řešit běh Java samostatně, jako u jiných Java aplikací. Např. u OS Windows stačí software nainstalovat klasickým EXE spustitelným instalačním souborem a pak program spustit ze START menu.
K testování je však potřeba ještě MQTT broker. Ten si lze buď vytvořit zcela lokálně a samostatně na vlastním PC pomocí nainstalování například open source broker softwaru (např. Mosquitto nebo HiveMQ), ale daleko jednodušší a bezproblémové je pro testování využít nějaký internetový volný broker. Těch je v době psaní tohoto článku k dispozici hned několik:
- M2M Eclipse - m2m.eclipse.org (IP adresa: 198.41.30.241) - vynikající volný MQTT broker, který podporuje nejen nešifrovaný TCP kanál 1883, ale i šifrovaný kanál 8883, včetně CA certifikátů poskytovaných brokerem - více informací na https://iot.eclipse.org/getting-started
- HiveMQ - broker.hivemq.com (IP adresa: 217.72.74.21) - velmi dobrý volný MQTT broker, který sice poskytuje jen TCP kanál 1883, ale zase disponuje webovou aplikací (tzv. MQTT websocket s definovaným TCP kanálem 8000) pracující jako publisher i subscriber, takže při potřebě rychlého zkoušení případně ani není ani nutné případně instalovat žádný softwarový MQTT klient do PC (případně lze v jednom PC použít softwarovou aplikaci jako jednoho klienta a HiveMQ websocket jako druhý klient) - více informací na http://www.hivemq.com
- MQTT iHMI - mqtt.ihmi.net (IP adresa: 52.208.201.54) - méně známý volný MQTT broker provozovaný výrobcem průmyslových HMI panelů a serverů - firmou Weintek - primárně určený právě jako podpora testování MQTT komunikace zařízení Weintek (budou prakticky využívány v 3. a 4. díle).
Já osobně využívám na testování všechny tři a mohu potvrdit, že jsou k datu vydání tohoto článku (27.1.2017) plně funkční. Ale jen M2M Eclipse podporuje šifrovanou SSL/TLS komunikaci přes TCP broker kanál 8883.
Webové stránky brokera HiveMQ ukazují i zajímavé informace o množství přenesených dat apod. Okno "Recenly used topics" ukazuje je publikovaná témata přes webový terminál " MQTT Websocket Client - HiveMQ" .
Ještě bych zde měl pro úplnost zmínit, že případnou alternativou k instalovaným MQTT klientům jsou webové aplikace vytvářející online MQTT terminál - tzv. MQTT websocket client. Ten využívá jiný TCP port než běžný klient, a to kanál 8000 pro šifrovanou komunikaci. Obvykle je mají k dispozici někteří provozovatelé volných internetových brokerů, jako například zde zmíněný HiveMQ. Na jeho webové adrese http://www.hivemq.com/demos/websocket-client/ najdete MQTT Websocket Client - HiveMQ, který se z pohledu použití (mimo jiný komunikační port) chová velmi podobně jako níže popisovaný software MQTT.fx a stejně tak poskytuje režim "Publisher" i "Subscriber".
Ukázka použití dvou různých možností MQTT klientů: PC softwaru MQTT.fx a webové terminálu " MQTT Websocket Client - HiveMQ" .
Test MQTT komunikace s MQTT.fx
PC aplikaci (program) MQTT.fx si lze aktuálně ve verzi 1.31 stáhnout ze stránek "výrobce" - http://mqttfx.jfx4ee.org/ - jako 32bitovou i 64bitovou verzi pro OS Windows, Linux i Mac. Já osobně zatím používal jen Windows verzi na Windows 7 Profesional 64bit. a Windows Vista Home 32 bit. Měl by ale i samozřejmě fungovat na Win 10.
Instalace probíhá standardně a aplikace se spouští přes volbu MQTT.fx z Windows nabídky START.
V první fázi je nejdříve nutné navázat komunikaci právě s některým internetovým brokerem, například jedním u uvedených výše. To se provedene kliknutím na políčko "ozubeného kola" hned vedle tlačítka "Connect". Následně se objeví okno nastavení navázání spojení s brokerem. Nový broker (nová položka) se do seznamu přidá tlačítkem "+". Následně je nutné vyplnit alespoň základní parametry v záložce "Connection Profile". Těmi jsou název profilu v seznamu ("Profile name"), DNS adresa nebo IP adresa brokera ("Broker address"), TCP kanál ("Broker port") a identifikační jméno tohoto klienta v komunikaci ("Client ID"). V případě využití nešifrované komunikace TCP kanálem 1883 již není nutné nic dalšího vyplňovat. Pro přístup k brokeru a k odběru chráněný heslem je pak nutné zadat jméno a heslo v záložce "User Credentials".
Nastavení spojení / komunikace s MQTT brokerem v PC programu MQTT.fx
Následně tlačítkem "Connect" se navazuje z brokerem komunikace. Pokud byly parametry zadány správně klient se k brokeru připojí, což indikuje zelené "světlo" vlevo nahoře a zvýrazněné tlačítko "Disconnect" pro požadavek odpojení. Ikona "rozpojeného" zámku vedle zeleného světla říká, že jsme navázali nezabezpečenou komunikaci na TCP kanále 1883. Není tedy dobré zasílat citlivá data kvůli možnosti odcizení.
Následně je možné zprovoznit režim "Publisher", tedy vysílání dat do brokera, nebo "Subscriber", tedy příjem dat z brokera. Případně lze oba režimy klienta spustit v MQTT.fx současně najednou.
Pro režim vysílání stačí kliknout na záložku "Publisher" a zde definovat označení téma (tzv. TOPIC), pod kterým se budou data vysílat. V mém případě třeba "hwtest/zPC_doPC". Následně do pole pod ním je již možné vložit libovolná data ve formě libovolné kombinace ASCII znaků a číslic nebo JSON formát zprávy. MQTT komunikace totiž nijak obsah zprávy neinterpertuje a prostě ji přenese tak, jak je. Lze tedy přenést prakticky cokoliv. Kliknutím na tlačítko "Publish" se zadaná data odešlou po definovaným "Topic" do brokeru, ke kterému jsme připojeni.
Ukázka odeslání ASCII textu do MQTT brokera prostřednictvím PC MQTT klienta MQTT.fx publikováním v tématu ""hwtest/zPC_doPC" (obrázek vlevo) a následný příjem zprávy do MQTT.fx klienta spuštěného v režimu odbírání zpráv "Subscriber" (obrázek vpravo).
Pokud žádný dosud žádný klient nemá v režimu odběratele zpráv "Subscriber" u brokeru zažádáno přijímat zprávy pod naším nadefinovaným tématem (Topic) "hwtest/zPC_doPC", zpráva se nikomu nepřenese a zůstane nevyužita. Zvláště pokud nebyla publisherem vyslána v režimu "Retained", která říká, že se má daná zpráva v brokeru uložit a i po pozdějším připojení některého klienta jako "Subscriber" pro dané téma, že se mu má předat, tak se zpráva "zahodí a nevyužije.
Klient v podobě programu MQTT.fx jako odběratele zpráv zaregistrujeme v záložce "Subscriber". Zde je nutné přesně vyplnit název téma (TOPIC), ze kterého chceme data / zprávy přijímat. V mém případě tedy vyplnit "hwtest/zPC_doPC" a kliknout na "Subscribe". To, že jsme k odběru připojeni je vidět zobrazením tlačítka "Mute" (tj. dočasné nepřijímání zpráv - umlčení - ale neodpojení" a tlačítko "Unsubcribe" pro odhlášení z odběru. Následně když teď v záložce "Publisher" vyšleme nějaké znaky do internetového brokeru, po chvilce naskočí nová položka v okně "Subscriber" a uvedenými daty. Tedy komunikace funguje úspěšně.
Jak již bylo zmíněno výše, když "Publisher" chce, aby zprávu odběratel "Subscriber" dostal i při pozdějším přihlášení k odběru než bylo v době odeslání zprávy, je nutné v okně "Publisher" zatrhnout políčko "Retained".
Ukázka odeslání dat v JSON formátu do MQTT brokera prostřednictvím MQTT.fx klienta publikováním v tématu ""hwtest/zPC_doPC" (obrázek vlevo) a následný příjem dat do MQTT.fx klienta v režimu odbírání zpráv "Subscriber" (obrázek vpravo).
Režimy QoS
Poslední volba, která je přítomna u Publisheru i Subscribera, jsou tři políčka "QoS 0 / QoS 1 / QoS 2". Těmi se určuje "spolehlivost" dodání zprávy brokeru a následně příjemci/odběrateli zpráv (Subscriber), přičemž zvolený QoS režim u Publisheru se vztahuje jen k brokeru a zvolený režim QoS u Subscribera opět jen k brokeru. Přičemž celkově k doručení zprávy je platný QoS režim ten nižší z volby v Publisheru a Subscriberu. Tedy jestliže u Publisheru je zvolen QoS 2 a u subscriberu QoS 1 ve výsledku bude zpráva dodána v úrovni QoS 1. Když u publisheru je zvolen QoS 0 a u subscriberu QoS 1, ve výsledku bude zpráva dodána v úrovni QoS 0 atd.
Vhodnost použít režimů QoS:
- Režim QoS 0 (At most once) by se měl využívat u zpráv, které nejsou kritické a nevadí, když je odběratel zpráv nedostane ani jednou nebo naopak ji dostane vícekrát.
- Režim QoS 1 (At least once) by se měl využívat u zpráv, které je nutné určitě doručit minimálně jednou, ale odběrateli (Subscriberu) nevadí, když dostane stejnou zprávu i vícekrát.
- Režim QoS 2 (Exactly once) by se měl využívat u zpráv, které je nutné určitě doručit, ale zaručeně jen 1x, protože více doručení by mohlo "zmást" příjemce a jeho aplikaci, která se zprávami řídí.
Princip a rozdíl QoS režimů "kvality" přenosu zpráv .
Přímá funkce tohoto režimu bohužel není na první pohled v klientovi nijak vidět. Aby bylo možné mezi sebou uvedené tři režimy odlišit, je nutné přejít do okna "Log", kde je možné vidět podrobně rozepsaný průběh komunikace. Zde je možné vidět stručný soupis probíhající komunikace, včetně toho s jakým QoS režimem byla ta či ona zpráva přenesena.
"Log" okno programu MQTT.fx terminálu pracující jako Publisher i Subscriber, které ukazuje základní průběh komunikace s brokerem. Zde je také patrné, s jakým QoS byla daná konkrétní zpráva vyslána do brokera.
Šifrovaná MQTT komunikace s MQTT.fx
Šifrovanou verzi MQTT komunikace po TCP kanále 8883 je též možné vyzkoušet s programem MQTT.fx ve spojení s brokerem M2M Eclipse, který jako jeden z mála volných internetových brokerů to podporuje. V menu "Connection Profile" se pak navíc v záložce "SSL/TLS" definuje způsob šifrování - volba SSL nebo TLS a verze a volba certifikátu. Jak základní, snadná a plně funkční volba je použití certifikátu serveru zaškrtnutím položky "CA signed server certificate". Pak již není nutné dále nic definovat a navázání i provoz komunikace lze bez problémů používat.
Internetový broker M2M Eclipse podporuje TCP kanál 8883 a šifrování TLS v1.2 / v1.1 / v1.0 (viz výřez ze stránek Eclipse - obr. vlevo), a tak tyto parametry můžeme nastavit pro tento broker do MQTT.fx a bude to bez problémů fungovat.
Závěr 2. dílu
Dnes jsme si krátce ukázali, jak je možné si "pohrát" s MQTT komunikací i prakticky. Zde vyzkoušené základní postřehy a zkušenosti pak v příštím 3. díle využijeme při prvním zkoušení a využití MQTT komunikace s průmyslovým HMI panelem Weintek.
Odkazy:
- IoT MQTT prakticky v automatizaci - 1.díl - úvod: http://automatizace.hw.cz/iot-mqtt-prakticky-v-automatizaci-1dil-uvod.html
- Stránky "HiveMQ" - ideální web pro načerpání praktických informací o MQTT: http://www.hivemq.com
- Odkaz na internetový webový online MQTT klient "MQTT Websocket Client - HiveMQ": http://www.hivemq.com/demos/websocket-client/
- Přehledu MQTT klientů na webu brokera HiveMQ: http://www.hivemq.com/blog/seven-best-mqtt-client-tools
- Stránky MQTT brokera "M2M Eclipse": https://iot.eclipse.org/getting-started
- Stránky programu MQTT klienta MQTT.fx: http://mqttfx.jfx4ee.org/
- Web "Practical MQTT with Paho": https://www.infoq.com/articles/practical-mqtt-with-paho
- Web "Mosquitto" - open Source MQTT v3.1/v3.1.1 Broker: https://mosquitto.org/