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 0 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 🙂
U podobných věcí mám pár problémů
– když potřebuju zapisovat do registrů hodnoty, tak Loxone posílá jen změny. Nelze tedy udělat 2x za sebou stejný zápis.
– hodilo by se blok podobný EIB přepínači, ale v analogové variantě. Když si z registru přečtu novou hodnotu, tak si jí jen zapamatovat, neposílat jí zpět pro zápis, ale zapisovat jen změny vzniklé v Loxone.
– vyhodnocování chyb v komunikaci. Mám TČ které při požadavku na čtení z registru může odpovědět do 2 s. Nechápu sice co mu tak trvá, ale to nevyřeším. Dočasné chyby bych chtěl ignorovat, ale nenašel jsem jak to Loxone vysvětlit. Občas mi aplikace pak zobrazuje, že TČ nevrací hodnoty a během chvíle to zase zmizí.
A když je v článku ukázka se spínanou zásuvkou. Netio vypadá zajímavě, ale cenově mi přijdou zajímavější například Shelly S nebo zásuvky s ESP z Ali do kterých se nahraje tasmota.
Ad problemy, bohuzel, tak to proste s Loxone je ;-). Je to tak uz radu let a zadna zmena nebyla a zrejme ani nebude. Je to smutne.
Na slozitejsi veci je lepsi si to napsat v NodeRedu, kde ma clovek k dispozici plnohodnotny programovaci jazyk.
Ohledne zasuvky, uz jsem to psal ve starsich clancich. Cilem techto zasuvek neni konkurence Ali zarizeni, ale cili na segment, kde zapojit Ali veci by mohlo byt rizikove.
Napriklad spinani a hlidani vykonnych tezebnich rigu, ruznych vysokoodberovych zarizeni, atd. Dostal jsem je k recenzovani a na ukazku protokolu se to paradne hodilo.
Je ale jasne, ze to neni vhodne pro kazdeho a pokud spinam lampicku nebo zvlhcovacku, staci mnohem mensi zarizeni (Netio zvlada 16A odbery/spinani).
maličko jsem doufal, že přijde někdo s odpovědí, že zná řešení 😉 Asi je to jen v myšlení, ale přeci jen bych preferoval funkčnost bez dodatečného prostředníka u věcí jako třeba topení.
Věci z Ali byla jen jedna z variant, proto jsem zmínil Shelly, tedy jednu z věcí běžně dostupnou u nás. I v 16A variantě by se něco našlo, ale myslím, že Netio má navrch ve spínání v nule. Mohli by udělat variantu bez přepěťové ochrany s příznivější cenovkou.
Bohuzel, Loxone nechce abys pouzival cokoli jineho, nez Loxone.
Proto ani nenabizi zadne jednodusi reseni bez prostrednika. Neni to v jejich zajmu. Naopak, snazi se hazet co nejvice klacku pod nohy vsemu, co nema nalepku Loxone. Bohuzel.