Browsed by
Month: May 2020

Jak ovládat MQTT z Loxone

Jak ovládat MQTT z Loxone

Dnešní článek je třetí z mé třídílné minisérie pro začátečníky o tom, jak propojit Loxone s externími systémy. Dnes to bude o komunikaci s MQTT. Předchozí dva se týkaly REST API a ModbusTCP. Všechny tři způsoby využití budu ukazovat na chytrých zásuvkách Netio, které tyto protokoly podporují.

V případě MQTT je to s Loxone trochu složitější. Bohužel Loxone nepodporuje MQTT napřímo (není to zřejmě v jejich ekonomickém zájmu), takže je potřeba si pomoci NodeRED aplikací. V té lze programovat dodatečnou logiku a pomocí například REST API komunikovat pak vůči Loxone.  V tomto článku se už nebudu zabývat základy NodeRED, jelikož jsem o nich psal návody ve starších článcích zde: Zigbee2MQTT a ve článku NodeRED – Propojení všeho se vším. Stejně tak nebudu extra vysvětlovat MQTT, připojení k němu či instalaci serveru, která je popsaná ve článku MQTT Message Broker a Propojení MQTT a Loxone.

 

Takto nějak vypadá cíl našeho dnešního snažení. Stejně jako v případě Modbusu a RESTu budeme implementovat zapnutí a vypnutí zásuvky, tentokrát pomocí MQTT (za pomocí NodeRED a REST API volání).

Podobně jako v případě ModbusTCP propojení začneme tím, že si vyzkoušíme fungování samotného MQTT protokolu a dostupnost cílového zařízení. V případě MQTT používám aplikaci MQTT Explorer, kde se můžete přípojit k Vašemu MQTT serveru a sledovat, jaké topicy jsou k dispozici a případně testovat odesílání topiců vlastních.

Abychom otestovali, že naše cílové zařízení (v tomto případě chytrá zásuvka) naslouchá MQTT zprávám, zkusíme odeslat zapínací příkaz. V tomto případě je to vystavení topicu netio/PowerCable-mqtt-8E/output/1/action s hodnotou 1. Konkrétní nastavení záleží vždy na cílovém zařízení a je potřeba postupovat dle dokumentace. Dokumentace k Netio MQTT zásuvkám je k dispozici zde.

Pokud nám zařízení po MQTT komunikuje, přejdeme do fáze dvě a tím je rozchození komunikace z NodeRED směrem k MQTT. Abychom opět nejprve otestovali základní funkčnost, uděláme si jednoduchý projekt, kde budeme mít dvě tlačítka, která nám budou posílat stav 1 a 0 směrem do MQTT.

Pro tyto účely vložíme prvek MQTT output, nastavíme mu cílový server a topic. Hodnota topicu se pak do MQTT Output node dostane z “Inject” prvku, do kterého nastavíme hodnoty 1 a 0. Dáme deploy na projektu a otestujeme, že po kliknutí na inject prvky se relé zapne či vypne.

Pokud opět funguje vše jak má, pokročíme dále. Testovací vstupy 1/0 si v projektu ponecháme a přídáme dva vstupní REST API pointy. Jednomu dáme adresu /netio/zasuvka/0 a druhému /netio/zasuvka/1. Tento vstup pak napojíme na template prvek, který bude posílat hodnotu 1 a 0 směrem do MQTT output prvku. Zároveň si HTTP vstup pošleme i na debug výstup a samotný HTTP požadavek ukončíme prázdnou odpovědí pomocí HTTP response.

Samozřejmě by to šlo celé udělat mnohem více elegantně, mít například jen jeden REST API vstup, akceptovat vstup ne přes GET, ale POST jako hodnotu 0/1, nebo dokonce třeba “device=1,state=0” a vstupní data rovnou parsovat a posílat směrem do MQTT output.  Cílem této ukázky je ale přehlednost a pokud bych do toho motal ještě parsovaní v Javascriptu, myslím, že by to přehlednosti úplně nepomohlo :).

Takto upravený projekt dáme opět uložit a vyzkoušíme. Pokud vše šlo podle plánu, můžeme nyní pomocí URL adresy vedoucí na náš NodeRed a přidáním “/netio/zasuvka/1” či “/netio/zasuvka/0”  zapínat a vypínat zařízení pověšené na MQTT.

A nyní už zbývá poslední krok, napojit Loxone na náš NodeRED API Restpoint. Tento postup je nyní už naprosto identický s tím, co bylo popisováno v prvním článku o komunikaci mezi Loxone a REST API. Proto to nyní vezmu trochu rychleji. Vytvoříme nový virtuální výstup, který nasměrujeme tentokrát směrem k NodeRED. V mém případě http://nodered.dum.

Do virtuálního výstupu přidáme “Příkaz virtuálního výstupu”, kterému dáme instrukci k zapnutí a vypnutí dle našeho nastavení v NodeRED. V mém případě “/netio/zasuvka/1” a “/netio/zasuvka/0”.

Takto připravený virtuální příkaz pak už jen opět vytáhneme do Loxone plánu a propojíme s tlačítkem. A tím máme cestu z Loxone k MQTT ukončenou.

Tentokrát byla bohužel cesta z Loxone do MQTT trochu složitější. Je to dáno tím, že Loxone úplně neuznává většinu nových formátu (MQTT, Zigbee,…) a razí si jen své proprietární technologie. Naštěstí tu ale máme možnost skrz RestAPI si z/do NodeRED dostat jakákoli data potřebujeme, takže přesto lze MQTT použít.

Jak ovládat Modbus TCP/IP z Loxone

Jak ovládat Modbus TCP/IP z Loxone

Dnešní článek je druhý ze série tří článků pro začátečníky o tom, jak propojit Loxone s externími systémy. Dnešní článek bude o komunikaci Modbus TCP/IP. Předchozí díl byl o REST API a příště bude ještě MQTT. Všechny tři způsoby využití budu ukazovat na chytrých zásuvkách Netio, které tyto protokoly podporují.

Modbus TCP/IP protokol je variace Modbus protokolu, který ke komunikaci používá klasický ethernet (TCP protokol) namísto klasického Modbusu RTU využívajícího RS485 nebo RS232. Z toho vyplývá, že ho pomocí Loxone lze ovládat bez nutnosti dokupovat Modbus extension.

 

Předtím, než se pustíme do samotného Loxone, začneme freeware aplikaci Modbus Master, kde si lze celou komunikaci vyzkoušet nanečisto, než přistoupíme k samotnému ovládání skrz Loxone.

Abychom mohli se zařízením skrz Modbus komunikovat, musíme znát adresy, na kterých zařízení čeká instrukce, případně, na kterých odesílá stavová data. Pro Netio chytré zásuvky je Modbus TCP/IP popsán v této dokumentaci.  Detailní návod, jak Modbus Master nastavit můžete najít také na stránkách Netia.

Pro sepnutí zásuvky číslo jedna potřebujeme tedy zapsat hodnotu 1 na adresu 101 do sekce 0x05 – Write Single Coil, pro vypnutí pak nastavíme hodnotu do stejné adresy.

Poté, co vyzkoušíme, že nám funguje komunikace mezi ModbusMasterem a samotným zařízením, je čas přejít do Loxon Configu. Toto otestování doporučují vždy před samotným nastavením do Loxone, protože se snadněji a rychleji dá vyzkoušet, že umíme správně se zařízením komunikovat.

Takto nějak vypadá cíl našeho dnešního snažení. Do sekce Netio tentokrát přibude tlačítko na zapnutí či vypnutí zásuvky skrz Modbus TCP/IP.

Začneme tím, že v Loxone Configu klikneme na sekci “Komunikace Miniserveru” a nahoře v menu klikneme na ikonku “Modbusserver”. Tím vytvoříme nový modbus server, který si pojmenujeme “Netio Modbus” a jako adresu mu nastavíme jeho IP adresu následovanou dvojtečkou a číslem portu (defaultně 502).

 

Do takto definovaného Modbus serveru nyní přidáme “Modbus zařízení”. A to kliknutím na ikonu “Senzory a aktory” a vybráním “Modbus zařízení”. Zařízení pojmenujeme třeba “NetioZásuvka”.

Do třetice pak do vloženého Modbus zařízení vložíme “Digitální aktor”. Digitální znamená, že nabývá hodnot jen 0 nebo jedna, zatímco analogový by nám dovolil nastavit libovolnou hodnotu do cílového zařízení.

Ve stromu vpravo (bod 1) vidíte, jak by mělo nakonfigurované Modbus zařízení vypadat. Máme NetioModbus server, do kterého je vložena NetioZasuvka zařízení, které má digitální aktor OnOff. Název tohoto aktoru můžeme nastavit opět libovolný a poté do IO adresy zadáme adresu, kterou jsme si dříve vyzkoušeli v aplikaci ModbusMaster a do Příkazu pak zadáme 0x05 – Write single coil.

Tím bychom měli mít Modbus komunikaci nastavenou a zbývá jen daný aktor vytáhnout do Loxon plánu, propojit s tlačítkem, uložit projekt do Loxone Miniserveru a vše vyzkoušet.

 

Jak vidíte, ani na ovládání přes Modbus TCP/IP není nic komplikovaného. Je vždy lepší si komunikaci vyzkoušet předem pomocí ModbusMasteru (nebo jiného SW klienta pro modbus) a až pak začít nastavovat do Loxone. Přeci jen má Loxone svá specifika a je dobré vědět, že zařízení i cílové porty fungují, jak očekáváme, a případný problém je tedy v nastavení v Loxone configu, než hledat naslepo zkoušet, proč to nejede a zda je problém v Loxone nebo ve špatné adrese 🙂

 

Jak ovládat REST Api (URL) z Loxone

Jak ovládat REST Api (URL) z Loxone

Dnešní článek je první ze série tří článků pro začátečníky o tom, jak propojit Loxone s externími systémy. Dnes to bude o komunikaci REST API (tzn volání URL adresy vzdáleného zařízení), příště nás pak čeká ovládání zařízení přes ModbusTCP a nakonec pak ovládání skrz MQTT (kde je nutné využít externí NodeRED na převod požadavku do MQTT formátu). Všechny tři způsoby využití budu ukazovat na chytrých zásuvkách Netio, které tyto protokoly podporují.

Pro ty, co neví, co je REST protokol, tak zjednodušeně řečeno je to volání nějaké URL adresy a zpracování takové odpovědi. Typ REST požadavku může být buď klasický GET (to je, jako když zadáte nějakou url adresu do prohlížeče), POST (což je, když se odesílá třeba formulář na webové stránce), nebo pak již konkrétnější příkazy PUT/DELETE/PATCH, které se používají při úpravách dat skrz REST protokol.

Pro naše potřeby nám bude nyní stačit GET, jelikož Netio podporuje nastavování napřímo skrz REST URL ve formátu http://IP_ADRESA/netio.cgi?pass=heslo&output1=3&delay1=2000.  Pokud bychom ale například chtěli nastavovat stav nikoli přes URL, ale přes JSON či XML, využili bychom příkazu POST, pomocí kterého bychom na adresu http://IP_ADRESA/netio.json posílali JSON soubor s instrukcí pro zapnutí. Jelikož se ale v Loxonu s JSON či XML nepracuje úplně nejlépe (rozuměj téměř nijak), zůstaneme raději u mnohem snazšího URL.

Takto nějak vypadá cíl našeho dnešního snažení. Krom samotného vypínače na zapnutí a vypnutí chytré zásuvky uděláme ještě tlačítko, které na 2 sekundy zásuvku zapne a poté zase vypne.

Jako první v Loxone Configu přidáme “Virtuální výstup”, který si pojmenujeme třeba NetioREST a zadáme mu Adresu http://192.168.1.98  (pozor, adresa nesmí končit lomítkem).

Dále pak přidáme “Příkaz virtuálního výstupu” do vytvořeního virtuálního výstupu. Ten si pojmenujeme třeba OnOff a vyplníme instrukci při zapnutí a vypnutí (pozor, musí začínat lomítkem).  Příkaz k zapnutí/vypnutí má formát/netio.cgi?pass=Heslo&output_CISLO_VYSTUPU=STAV_VYSTUPU (podrobná dokumentace zde).

Krom samotného on/off pak přidáme ještě druhý příkaz na zapnutí zásuvky jen na 2 sekundy. To se dělá tak, že jako stav výstupu nastavíme hodnotu 3 a přidáme parametr “delay”. Přidáme tedy další “virtuální příkaz”, pojmenujeme ho třeba “Pulse” a jako instrukci pro zapnutí dáme /netio.cgi?pass=heslo&output1=3&delay1=2000. V tomto případě nebudeme dávat instrukci pro vypnutí, jelikož o vypnutí se postará zásuvka sama.

Takto vytvořené virtuální příkazy si pak nataháme do samotného Loxone plánu, kde je propojíme s tlačítkem a vypínačem. V případě On/off necháme tlačítko v režimu “vypínač”, zatímco v případě pulzního sepnutí nastavíme režim “tlačítko”.

A takto pak vypadá samotné zapínání/vypínání přes vypínač či tlačítko.

Jak vidíte, ovládání přes REST API není nic komplikovaného. Co bohužel v případě Loxone trochu komplikované je, je správně zadat ovládací URL. Více o tom, co všechno se může pokazit a jak takové chyby odladit jsem psal v dřívějším článku “Loxone virtuální vystupy a jejich debugging”.