Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: hazardrok 24. 11. 2020, 22:11:59

Název: Vývoj ve Windows: sériový port přes SSH
Přispěvatel: hazardrok 24. 11. 2020, 22:11:59
Ahoj, prosim o pomoc s vyvojem programu ve Windows (v linuxu to umim) aneb vim co chci, ale nevim jak na to. Program by mel umet nebo neumet nasledujici...

1. vytvorit virtualni seriovy port
2. pripojit se pres SSH jako client k definovanemu serveru pres uzivatelske jmeno a heslo
3. otevrit SSH kanal a preposilat pres nej data z virtualniho serioveho portu
4. nemusi mit GUI

Mel by nekdo nejaky napad jak na to?
Me osobne napadlo pouzit com0com jako emulaci serioveho portu a toho SSH klienta napsat v pythonu. Duvodem je to, ze s com0com uz jsem se v minulosti setkal a v pythonu pisu vsechno co chci aby bezelo na Windows. Prijde mi to ale jako dost kostrbaty reseni, protoze me by se nejvic libilo, kdybych pustil program. Vyskocilo by na me okno kam bych zadal uzivatelske jmeno, heslo, portu a dal OK. Dokud bych program nezavrel, tak by to fungovalo a mohl bych ho pustit i opakovane. Snad nechi tak moc ne? :)
Dik.
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: Vykook 25. 11. 2020, 17:06:19
Ja osobně bych to bral jako příležitost se podívat na .NET... předpokládám, že na to všechno tam budou nějaký knihovny.
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: Jose D 25. 11. 2020, 18:25:33
Python3 a

Kód: [Vybrat]
import serial
import paramiko

?

EDIT: přehlídnul jsem, že jde o úplně virtuální seriový port. Nějak jsem očekával spíš něco jako serial port emulovaný FTDI. Takže nevím.
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: NCC1701E 25. 11. 2020, 19:15:39
A co použít com0com a ssh jen pro vytvoření toho tcp tunelu?
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: Ondrej Nemecek 25. 11. 2020, 19:51:11
Řešení se dá asi vygooglovat. zkuste:


Zdá se, že stačí použít socat + ssh + netcat anebo použít specializované nástroje jako remserial apod.

Mírná komplikace je, aby to běželo na Windows.

Netestováno  :)
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: Martin Dráb 25. 11. 2020, 21:23:38
Asi dost záleží na tom, jak moc si chcete zaprogramovat a případně vyhrát s Windows API, asynchronními operacemi a tak (overlapped I/O).

Můžete tunelovat určitý port přes SSH (pro SSH bude asi nejjednodušší spustit nějakou instanci SSH klienta, klidně i toho, co je ve Windows 10 nativně) a pak mezi tímto portem a portem sériovým ručně přeposílat data. Bohužel, Windows neumožňují použít volání poll() na cokoliv jiného než sockety (protože sockety v jejich podání nejsou přímo souborová handle). Asynchronní zápis/čtení (overlapped I/O) je pravděpodobně to, co hledáte. Je možné, že API kolem sériového portu bude umožňovat rozumným způsobem zjistit, zda-li v něm jsou nějaká data atd., takhle z hlavy se mi nic nevybavuje.

Trochu nechápu virtualitu toho sériového portu. Chcete jej mít virtuální pouze na testování, nebo i "v produkci"? Jaké zařízení bude zastupovat, resp. co se bude nacházet za ním?
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: RDa 25. 11. 2020, 23:12:23
Ty virtualni seriove proty se sitovym koncem existuji - napr. pro takovou HW krabicku, ktera pak tuneluje ten port do fyzickeho seriaku. Takze mozna bych sel cestou pouzit tyto drivery, vnutit jim se pripojit na localhost, tam vytvorit vlastni server a pak uz je to otazka predavani dat z/do ssh spojeni.
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: hazardrok 26. 11. 2020, 07:35:44
Ahoj a díky za názory. Asi se do toho pouštět sám nebudu a pokusím se sehnat programátora. Vysvětlení proč něco takového potřebuju je to, že používám pravěký program na komunikaci s průmyslovejma řídícíma jednotkama, který používaj z dnešního pohledu dost nestandartní komunikační protokol (kombinace IrLan a modbus). Aby se dalo k těmto jednotkám přistupovat odkudkoliv, pokud jsou připojeny k síti, mám napsaný SSH server, který umožňuje přetunelovat ten pravěkej program. Tohle funguje naprosto dokonale pro jednoho uživatele. Jenže ejhle, tenhle můj virtuální port funguje a uživatelů přibývá, nyní už to přesahuje rámec mých programátorských zkušeností.
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: ivoszz 26. 11. 2020, 11:06:05
Pro tenhle usecase by mohlo být docela vhodné Go. Je jednoduché, čte se to snadno jako Python, multiplatformní, takže to v tomhle případě klidně napíšete a odladíte v Linuxu a přeložíte pro Windows a mělo by to jet. Pokud nepožadujete UI a stačí vám parametry, je to program do 100 řádků. SSH client je součástí rozšířené standardní knihovny a k tomu použít knihovnu go-serial.

Taky jsem úplně nepochopil to založení virtuálního COM portu, očekával bych, že tam už prostě je a jenom se k němu připojí.
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: IDontCare 26. 11. 2020, 11:12:34
Mohl by jsi prozradit o co se vlastne jedna? Treba by to podstatne zjednodusilo situaci..
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: hazardrok 26. 11. 2020, 12:11:34
To založení virtuálního portu je proto, že ten pravěkej program může otevřít pouze COM1 - COM15. Je to fakt pravěk psanej v ještě starším Visual Basicu a v podstatě se s tím nedá už nic dělat.
Vývoj jde ale dál a tak jsem nechal napsat aplikaci v javě (kvůli portování na mobilní zařízení), která tento program supluje a ta používá pro připojení právě SSH. Jenže k ladění a vývoji je pořád ten pravěk lepší, protože ten je domyšlenej úplně do datailu, zatímco ta náhrada umí jen část. Ta appka s SSH ale umožňuje k jakýmukoliv zařízení v tom systému přistupovat odkukdoliv, protože přes username a heslo se vždy spojí se svým přiřazeným zařízením. Zkrátka každá ta věc se hodí na něco jinýho. Já jednoduše potřebuji využít možnosti toho dokonalého ladícího nástroje na vzdáleném zařízení s SSH. Hlavně bych chtěl současně pracovat s více zařízeníma, to je vlastně největší motivace tohoto vlákna.

Snad to jako vysvětlení stačí...
Název: Re:Vývoj ve Windows: sériový port přes SSH
Přispěvatel: Perki 26. 11. 2020, 12:18:15
Ahoj, možno by pomohla krabička sériový port na ethernet: napríklad Moxa NPort 5100 Series.