Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Użytkownik

Witam,
Panowie, jak zrobić w Debianie taki myk, aby system non stop nasłuchiwał port /dev/ttyS0 i jeżeli coś przyjdzie to z automatu zapisze wszystko w /home/user/plik.txt
Offline



Członek DUG




Dodajesz danego użytkownika do grupy dialout
usermod -aG dialout user
$ cat /dev/ttyS0 > /home/user/plik.txt
Może być przydatne zapoznanie się z "przekierowaniem wyjścia" w
man bash
oraz pomoc do polecenia tee:
man tee
Napisz czemu ma to służyć, bo bezpośredni odczyt z portu szeregowego i zapis wszystkich danych do pliku nie jest specjalnie dobrym pomysłem.
Offline
Użytkownik

Mam kartę przekaźników i chciałbym zrobić tak, że po naciśnięciu klawisza przełącza mi przekaźnik i wysyła jednocześnie jakąś tam komendę. Jeżeli już komputer (który "słucha") otrzyma tą komendę to uruchomi skrypt-ogólnie to ma być część czegoś większego.
W google znalazłem coś takiego:
stty 9600 -parenb cs8 -cstopb | cat /dev/ttyS0 > /home/user/plik.txt
Ale nie do końca rozumiem tego polecenia i jak je wykorzystać.
Jeżeli uruchomię to polecenie w terminalu i wyślę z karty "Sw1" to w pliku otrzymuję "Sw1" i jakieś kwadraciki, jeżeli otworzę plik w LibreOffice Writer to mam "Sw1 ##"
Czy wysyłając coś z karty muszę wysłać jakieś dodatkowe znaki czy coś?
Danych ogólnie będzie mało.
Ostatnio edytowany przez pimowo (2013-04-15 21:20:58)
Offline
Użytkownik

Ma ktoś jakiś pomysł jak to mądrze rozwiązać? :)
Offline




Moderator Mamut
zobacz hexedytorem jakie wartości numeryczne odpowiadają tym kwadracikom ... często w transmisjach sieciowych (także na porcie szeregowym) używany jest wraz z znakiem nowej linii znak powrotu karetki ... poza tym skoro dostajesz numer switcha to w czym przeszkadzają te dodatkowe znaki?
Offline
Użytkownik

bercik napisał(-a):
zobacz hexedytorem jakie wartości numeryczne odpowiadają tym kwadracikom ... często w transmisjach sieciowych (także na porcie szeregowym) używany jest wraz z znakiem nowej linii znak powrotu karetki ... poza tym skoro dostajesz numer switcha to w czym przeszkadzają te dodatkowe znaki?
W sumie to mi to nie przeszkadza, byłem ciekawy dlaczego tak się dzieje.
Otwierając plik.txt w programie GHex otrzymuję ".. Sw1 ." "0A 0A 20 53 77 31 20 0A"
A jak to zrobić, aby Debian cały czas w tle "słuchał" co się dzieje na ttyS0 i jeżeli coś przyjdzie to zapisze do plik.txt?
Offline



Członek DUG




Robisz aby np. to
stty 9600 -parenb cs8 -cstopb | cat /dev/ttyS0 > /home/user/plik.txt &
uruchamiane było podczas startu systemu, tu masz wątek jak to zrobić: http://forum.dug.net.pl/viewtopic.php?id=5695 Zwróć uwagę na znak & kończący linię.
Offline




Moderator Mamut
czyli poza nowymi liniami i spacjami nic specjalnego tam nie ma ... więc nie powinno być kwadracików :-/
Offline



Członek DUG




@bercik
Ale on ustawa przez stty (opcja -parentb) generowanie bitu parzystości na wyjściu, stąd pewnie dodatkowe znaki, najlepiej jakby bezpośrednio czytał np. hexdump-em /dev/ttyS0
Tak nawiasem zapisywanie danych z portu szeregowego bezpośrednio do pliku a potem odczytywanie jego zawartości można o kant d... wytłuc, lepiej napisać własny program chociażby w pythonie lub nawet w C, jest sporo gotowych przykładów w sieci, tym bardziej, jak autor wątku napisał, że ma to być częścią czegoś większego
Offline
Użytkownik

Panowie, odgrzewam swojego starego kotleta...
Ostatnio mnie znów natchnęło aby wykonać nasłuch portu, ale tym razem /dev/ttyUSB0 :)
Kiedyś tak jak i teraz nie wiem jak sobie z tym poradzić :(
Napisałem sobie coś takiego:
#!/bin/bash
PORT=/dev/ttyUSB0
while true; do
read -n90 RESPONSE < $PORT &&
echo $RESPONSE
if [ $RESPONSE = "S5551" ]
then
/gdzies/jakis/skrypt
fi
doneCzyli w sieci pojawi się ciąg znaków "S5551" i wykona mi się skrypt. Tadam, wszystko działa :)
Niestety działa tylko w połowie jak bym tego chciał :(
Jak ten programik odczyta coś z sieci to już nic innego nie działa :(
W sumie chodzi mi o to jak zrobić "przezroczysty" nasłuch /dev/ttyUSB0?
Offline