Pro správnou funkci MQTT dle následujícího popisu je nutné, aby NETIO zařízení mělo přístup do sítě internet.
- NETIO zásuvky se chovají jako MQTT subscriber.
- Na základě přijatých příkazů provedou požadovanou akci (přepne výstup).
- NETIO zároveň funguje jako MQTT publisher a posílá zprávy o měření a stavu svých výstupů (při změně, případně na vyžádání nebo periodicky dle nastavení).
Obsah MQTT zpráv (payload) má json strukturu.
Zprávy (řetězec znaků - payload MQTT zprávy), které NETIO přijme, se rozloží na jednotlivé příkazy/akce a zásuvka poté dle požadované akce nastaví výstupy do požadovaných stavů, případně pošle svůj kompletní popis a stav. Čísla akcí pro každý jeden výstup odpovídají standardnímu NETIO číslování ve všech M2M protokolech:
- 0 = Vypnutí výstupu (Off)
- 1 = Zapnutí výstupu (On)
- 2 = Vypnutí výstupu na krátkou dobu (Short OFF) – restart zařízení
- 3 = Zapnutí výstupu na krátkou dobu (Short ON)
- 4 = Přepnutí výstupu z jednoho stavu do druhého (Toggle)
- 5 = Ponechání stavu výstupu (no change)
Pro akce 2 a 3 je možné ve zprávě definovat i parametr Delay v milisekundách. Pokud tento parametr není ve zprávě uveden, použije se výchozí nastavení (definovatelné přes webovou administraci).
Co všechno měří NETIO 4All přes MQTT
Jeden z produktů řady NETIO 4x (model NETIO 4All) měří spotřebu elektrické energie pro každou ze 4 zásuvek. Tyto hodnoty publikuje pomocí MQTT a tento model proto přes MQTT zobrazuje:
- 1x elektrické napětí [V]
- 1x frekvenci elektrické sítě [Hz]
- 4x elektrický proud [A]
- 4x příkon [W]
- 4x spotřeba [Wh]
- TPF (Reálný Power Factor / účiník) - pro sinusový průběh odpovídá Cos Fi
Podporovaná zařízení: NETIO 4All, NETIO PowerPDU 4C, NETIO 4, PowerCable MQTT 101x
Nastavení NETIO 4x
Ve webové administraci NETIO 4x v sekci M2M API Protocols - MQTT, povolte MQTT API, nastavte MQTT mód na “Generic”, adresu brokeru (‘Broker Host”) “broker.hivemq.com” a jeho TCP port (“Broker Port”) na “1883”.
Dále je třeba nastavit uživatelské jméno a heslo pro přihlášení k brokeru - v případě veřejného brokeru HiveMQ není tato autorizace potřeba a zadané uživatelné jméno a heslo se na straně brokeru ignoruje, nicméně pro nastavení a povolení MQTT API v NETIO jsou tyto položky povinné a je třeba je tedy vyplnit.
Následně zkontrolujte, že není zaškrtnuto “Use SSL”, protože veřejný HiveMQ broker SSL připojení nepodporuje. Jako další vyplňte “Client Id” - to bude použito v topicu jako identifikátor zařízení NETIO a zároveň slouží jako identifikátor vůči brokeru a musí být tedy jedinečné – doporučujeme použít v ID na konci část MAC adresy (poslední 2 byty) bez dvojteček. Pokud by dvě (či více) zařízení měla stejné “Client Id” tak si budou vzájemně narušovat komunikaci s brokerem a ani na jednom nebude MQTT správně funkční. Nastavte “Update period” () a uložte nastavení kliknutím na tlačítko Save Changes.
Poznámka: “Update period” určuje, jak často bude automaticky odesílána MQTT zpráva se stavem všech výstupů (případně měření pro NETIO 4All). Pokud je nastaveno “0” tak nejsou zprávy se stavem všech výstupů pravidelně odesílány a zprávy o změně jednotlivého výstupu jsou odeslány pouze při změně stavu výstupu (případně změně měřených hodnot pro NETIO 4All, což může být vzhledem ke kolísání napětí i celkem často).
MAC adresu zařízení NETIO 4x naleznete ve webové administraci NETIO 4x v sekci Settings / Network Configuration
Pokud jste nastavili MQTT správně a NETIO zařízení má přístup k internetu, dojde k navázání komunikace s HiveMQ MQTT brokerem a “MQTT status” se změní na “Connected (Connected)”.
Pokud se nepodaří s MQTT brokerem spojit tak se u “MQTT status” zobrazí “Broker connection failed (Failed to connect: unknown reason)”. V tomto případě zkontrolujte adresu brokeru (‘Broker Host”), port (“Broker Port”) a že “Use SSL” není zaškrtnuto. Pokud je vše nastavené správně, zkontrolujte, že má zařízení NETIO přístup k internetu.
Kontrolu fungujícího připojení k internetu můžete provést například pomocí synchronizace času nebo ověřením dostupných aktualizací firmware - ve webové administraci NETIO 4x v sekci Settings - Firmware klikněte na “Check for updates”.
Pokud se po chvíli objeví hlášení o aktuálnosti firmware - text “up-to-date”, pak je připojení k internetu funkční.
Pokud se i přesto nedaří s MQTT brokerem spojit doporučujeme vyzkoušet, že je ze stejné sítě, ve které je připojené zařízení NETIO, dostupný HiveMQ broker - např. v počítači do prohlížeče zadejte url broker.hivemq.com a mělo by dojít k přesměrování na http://www.mqtt-dashboard.com/ - v tom případě by měl být broker dostupný a je třeba ověřit, zda není ve Vaší síti (routeru/firewallu) MQTT komunikace blokována (např.. Filtrace portů..
Pokud se po kliknutí na “Check for updates” zobrazí chybové hlášení “Operation has failed” pak není s největší pravděpodobností internet z NETIO zařízení dostupný. Zkontrolujte síťové nastavení a ověřte, zda není např. MQTT komunikace blokována routerem/firewallem.
Nastavení MQTT “klienta”
Pro otestování funkcí MQTT API doporučujeme použít MQTT Websocket client od HiveMQ, který umožní přijímat zprávy od NETIO i ovládat jeho výstupy:
http://www.hivemq.com/demos/websocket-client/
V položce “Host” můžete ponechat “broker.mqttdashboard.com” nebo vyplnit “broker.hivemq.com”, protože obě směřují na HiveMQ veřejný broker. Port ponechte “8000” což je jeho Websocket Port. “ClientID” je unikátní generované a doporučujeme jej ponechat, jelikož s ním jinde nepracujeme a slouží jen i identifikace klienta proti brokeru (můžete si nastavit vlastní ClientID, ale musí být unikátní v rámci brokeru). Další položky ponechte nezměněné a klikněte na tlačítko “Connect”.
Připojení k brokeru bude signalizováno zelenou barvou a textem “Connected” a sekce Connection se “minimalizuje”.
Následně můžete nastavit “Subscription” pro odběr zpráv ze zařízení NETIO - Klikněte na tlačítko “Add New Topic Subscription”.
Zobrazí se dialogové okno pro zadání “Topic” a související nastavení - pro “Qos” zvolte hodnotu “0” a do položky “Topic” zadejte “devices/<Client Id>/messages/events/” kde “<Client Id>” je to, které jste zadali do NETIO - v našem příkladu “netio-test-25E0”, takže topic bude devices/netio-test-25E0/messages/events/ a klikněte na tlačítko “Subscribe”.
Pokud je v NETIO zadaná hodnota pro MQTT “Update period” větší než “0” bude nejpozději po nastavené době odeslána MQTT zpráva NETIO zařízením na broker a následně přijata klientem a zobrazena v sekci “Messages”.
Obdobně bude zobrazena zpráva při změně stavu výstupu NETIO zařízení.
Obsah MQTT zprávy
-
Informace o celkovém stavu zásuvky
- Napětí [V]*
- Frekvence sítě [Hz]*
- Celkový proud všemi výstupy [mA]*
- Celkový Power factor / účiník [-]*
- Celkový příkon [W]*
- Celkovou spotřebu [Wh]*
- Dobu začátku měření*
-
Informace o jednotlivých vstupech
- ID výstupu
- Jméno výstupu
- Stav, ve kterém se výstup nachází
- Akce, která se s výstupem provádí
- Dobu trvání akcí 2 a 3
- Proud procházející výstupem [mA]*
- Power factor / účiník [-]*
- Příkon výstupu [W]*
- Spotřebu výstupu [Wh]*
*Tyto hodnoty jsou k dispozici pouze pro zařízení NETIO 4All
Spínání výstupu přes MQTT z HiveMQ
Pro ovládání výstupu na NETIO zařízení vyplňte sekci “Publish”:
Topic: “devices/<Client Id>/messages/devicebound/”
kde “<Client Id>” je to, které jste zadali do NETIO - v našem příkladu “netio-test-25E0”, takže topic bude devices/netio-test-25E0/messages/devicebound/
QoS: 0
Retain: nezaškrtnuto
Message: {"Operation":"SetOutputs","Outputs": [{"ID":1, "Action":4},{"ID":3, "Action":4}]}
Kliknutím na tlačítko “Publish” dojde k odeslání MQTT zprávy na broker a následně do NETIO zařízení, které provede požadovanou akci - v tomto případě změní stav výstupů 1 a 3. V sekci “Messages” se zobrazí zprávy o změně stavu výstupu.
Publikováním zprávy {"Operation":"GetDescription"} dojde k vyžádání kompletního stavu zařízení (včetně měření u NETIO 4All). Zpráva s kompletním stavem se zobrazí opět v sekci “Messages”
FAQ:
1) Lze vypnout odesílání zprávy při změně stavu výstupu (případně změně měřených hodnot pro NETIO 4All)?
Ne. Při změně stavu jednoho z výstupů se komunikuje s MQTT brokerem, nezávisle na tom, zda se hodnota výstupu změnila na základě lokálního tlačítka na zařízení, vnitřního Lua skriptu, z webu, z mobilní aplikace, nebo přepnutím z webu.
2) Lze nastavit nějakou minimální hodnotu, o kterou se musí změnit hodnota měření u NETIO 4All pro odeslání zprávy o změně? Momentálně se odesílá např. i při změně proudu o jednotky mA.
Ne, aktuální systém používá interní volání událostí, dlouhodobě plánujeme změnu a možnost detailnějšího nastavení volání události.
3) Jaký je rozdíl mezi nastavením MQTT Generic a MQTT (MS Azure)?
Rozdíl je ve způsobu komunikace s MQTT Brokerem. V MS Azure vše vkládá uživatel jako specifický řetězec a ne do jednotlivých položek. To by mělo usnadňovat přenos konfigurace mezi hodně zařízení.
4) Lze měnit strukturu MQTT topic a payload?
Momentálně ne, plánujeme možnost modifikace z Lua skriptu v zařízení.
5) Jakou hodnotu může / musí mít hodnotu Retain / QoS.
Retain: pro ovládání NETIO 4x doporučujeme nepoužívat zprávy Retain. NETIO 4x neoznačuje odeslané zprávy příznakem Retain.
QoS: Záleží na tom, co podporuje použitý MQTT broker. NETIO 4x používá při komunikaci s brokerem QoS 1.
6) Lze v jedné MQTT zprávě sepnout najednou několik výstupů?
Ano, příkazy pro jednotlivé výstupy lze řetězit za sebe. Příklad pro zapnutí všech výstupů: {"Operation":"SetOutputs","Outputs": [{"ID":1, "Action":1},{"ID":2, "Action":1},{"ID":3, "Action":1},{"ID":4, "Action":1}]}
7) Lze v MQTT Zprávě pro NETIO zásuvky poslat zároveň i čas pro akci reset (Short ON / Short OFF) ?
Ano, stačí do zprávy vložit parametr "Delay", který specifikuje dobu (v milisekundách) po kterou bude výstupu zapnutý/vypnutý. Příklad pro zapnutí výstupu 2 na 5 sekund: {"Operation":"SetOutputs","Outputs": [{"ID":2, "Action":2, "Delay":5000}]}
8) Budou NETIO zásuvky přes MQTT fungovat i s Mosquitto MQTT brokerem?
Ano, MQTT na NETIO 4x bude fungovat i s Mosquitto brokerem. HiveMQ v této Aplikační poznámce byl použit, protože je možné jej veřejně využít k testování bez nutnosti instalace.
9) Vzhledem k častým změnám napětí posílá NETIO 4All zprávu dost často. Jak snížím počet MQTT zpráv?
Počet zpráv zaslaných z NETIO nelze omezit. K poslání dojde vždy při změně stavu výstupu nebo měřených veličin.
10) Mohu připojit NETIO 4x do AWS (Amazon Web Services) přes MQTT?
Nelze, v současné době (07/2017) vyžaduje AWS vložit do zařízení bezpečnostní certifikát, což NETIO 4x neumožňuje. Pro připojení zařízení do AWS je nutné využít jiného MQTT serveru připojeného do AWS.
Podporované verze FW:
3.0.1 a novější (Archiiv firmware)