OpenWrt 7: SER2NET – tunelujeme seriovy port (RS-232) po siti

Ne vzdy je moznost provozovat ridici program primo na pocitaci se seriovym portem a pripojenym hardwarem. Prikladem jsou treba WiFi routery s OpenWrt. Do 4MB flash musite narvat system, ovladace i svoji aplikaci. Misto prepisovani programu do C a setreni mistem je casto pohodlnejsi seriovy port tunelovat na vykonny server.

Jak nasdilet seriovy port?

Jde to vice zpusoby, ale asi nejjednodussi je program ser2net. Ser2net ma po zakladni instalaci v konfiguraku /etc/ser2net.conf docela prehlednou dokumentaci:

Pro zacatek vsechno zakomentujeme. A hned potom zacneme pridavat vlastni radky.

Priklad (dale uvazujeme IP adresu serveru 192.168.1.1):

To budou jedine nezakomentovane radky v konfigu. Pote spustime ser2net.
Od teto chvile se PC chova jako server a po siti zpristupni seriove porty.
 
Na vytvoreni jednoho naslouchajici portu je mozne spustit ser2net primo z prikazove radky. Parametr -C definuje radek z konfiguracniho souboru:

 
Na OpenWrt je nutne nainstalovat ser2net a pokud pouzivame USB-RS232 prevodnik, tak i jeho ovladac:
# opkg update
# opkg install ser2net    # + volitelne jmeno ovladace usb prevodniku
 
V prohlizeci si vyhledame „kmod-usb„. 
Podpora prevodiku v aktualnim OpenWrt 14.07 je lepsi, nez v nejnovejsich Windows:

Pozor! OpenWrt pravdepodobne v dost verzich neresi automaticke spusteni ser2net po nabootovani. Je potreba zapnout init skript a pokud neexistuje, tak si ho napsat.
Ukazkovy init skript muze mit podobu treba: 

ulozime ho do /etc/init.d/ser2net a zapneme:
# /etc/init.d/ser2net enable
 

Jak se k tomu pripojit?

Prvni a nejjednodussi moznosti je klasicky telnet. Muzeme pouzit PuTTY (Windowsaci), nebo klasicky telnet klient.
$ telnet 192.168.1.1 3333
nebo lepe 
$ nc 192.168.1.1 3333
a muzeme psat. Vse se bude prenaset po siti az k zarizeni na RS-232. Vyuziti je skvele treba pri programovani. Nase naprogramovana aplikace si povida s hardwarem pres TCP socket a nic jineho ji nezajima. Pohodlne je to obzvlast u Javy. Vsichni, kdo ladili multipatformni Java aplikaci s RXTX knihovnou na seriovy port asi souhlasi…
 
Co kdyz ale potrebujeme mit „klasicky hardware“? Tedy bezny soubor zarizeni, ktery maji v linuxu vsechny seriove porty. K tomu se da pouzit program socat. Socat vytvori soubor zarizeni a data do/z nej sype pres TCP socket. Vse zcela transparentne. Uzivatel, ani aplikace nic nepoznaji:
# socat pty,link=/tmp/ttyV0,waitslave tcp:192.168.1.1:3333
# chmod 777 /tmp/ttyV0 
Tim nam vzniklo nove zarizeni /tmp/ttyV0. Na praci je identicke s /dev/ttyS0. Klidne ho muzeme umistit do /dev, ale teoreticky se pak muze tlouct s jinym fyzicky pripojenym zarizenim. Pokud ma s nove vytvorenym zarizenim pracovat bezny uzivatel, je potreba nastavit zarizeni prava (777 neni vhodny priklad zabezpeceni). Ser2net-socat prenos neni sifrovany! Pokud potrebujeme sifrovat, muzeme komunikaci obalit treba stunellem.
 
Sam takhle tuneluji seriovy port z TP-Link WR741ND WiFi routeru s OpenWrt. K WiFi routeru je pres MAX485 (RS-485 sbernice) pripojene nekolik Arduino zarizeni. Protoze se ridici app do routeru nevesla (4MB flash neni moc), tak ovladani dela vzdaleny server.
 
 
Dalsi clanky o OpenWrt.

 

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *