|
11.1. HOWTO: Jak zrobić reseter (do AP, modemu, ...)?
Wiesza Ci się Access Point, modem? Jeśli tylko masz obok komputer pracujący pod systemem Linux - Twój problem zaraz zniknie.
Poniższe rozwiązanie przedstawia najprostszy możliwy sposób wykonania "resetera", tj. urządzenia rozłączającego zasilanie dowolnego
urządzenia pracującego pod napięciem do 230V.
Cała zabawa nie powinna zająć więcej niż 30 minut, a efekt? Zobacz sam :-)
Zbieramy zabawki...
Do naszego układu potrzebować będziemy jedynie przekaźnika, diody, dwóch rezystorów i tranzystora NPN.
Przekaźnik powinien być domyślnie ZWARTY. Może to być przekaźnik 5V lub 12V (wtedy do układu podpinamy odpowiednio 5V lub 12V z zewnętrznego
źródła).
Dioda to jakakolwiek dioda prostownicza. Rezystory 1k i 10k.
Zastosowałem zewnętrzne źródło zasilania żeby nie uszkodzić portu.
O porcie co nieco
Jako port wykorzystałem port równoległy LPT. Dlaczego? Pewnie dlatego, że lepiej się nim steruje (przynajmniej mi ;-)) oraz
dlatego, że nadaje się do rozwiązania naszego problemu ;-)
Port LPT posiada 8 wyjść/wejść, na których pojawiają się stany logiczne - niski (0 logiczne, napięcie na pinie ok. 0V) oraz wysoki
(1 logiczne, napięcie na pinie ok. 5V)
No to zaczynamy!
Nie będziemy tu bawić się zbytnio w elektronikę cyfrową, bo raczej nie ma to sensu. Skoro dostajemy 5V na porcie w jakiś sposób,
nie wnikając już w jaki, to spróbujemy to wykorzystać.
Poniżej przedstawiony jest schemat ideowy całego układu.

Banalny. Nieprawdaż?
Pomiędzy I/O portu a masę podpinamy przekaźnik (a konkretnie jego uzwojenie). Ja wybrałem tu port 0, ale można wpiąć się w piny
od 2 do 9 (są to we/wy portu). I odpowiednio dla nich masa - piny 18 do 25. Lub bezpośrednio do GND.
Żeby port nam chwilę pożył zakładamy między uzwojenia przekaźnika diodę, która ograniczy przepływ prądu tylko w jednym kierunku.
Podpinamy zasilanie, z drugiej strony, za przekaźnikiem urządzenie, które chcemy resetować - i - voila.
Ponieważ nasz przekaźnik jest domyślnie zwarty prąd będzie zawsze przez niego płynął, nawet gdy będzie całkowicie odłączony
od komputera. I o to chodzi. W przeciwnym razie, dopiero po uruchomieniu systemu i programu do obsługi naszego portu moglibyśmy
załączyć przekaźnik. Więc po resecie naszego serwera musielibyśmy czekać na uruchomienie urządzenia...
Dodatkowo cały czas obciążalibyśmy nasz biedny port, a przecież tego nie chcemy... :-)
Obsługa urządzenia z poziomu Linuksa
No niestety. Bez programu się nie obędzie :-)
Ale spokojnie... jak już na ten projekt przystało - program również banalny.
Program do resetowania napisany jest w C, do sprawdzania stanu połączenia zaś - w perlu. Wybrałem C i perla, bo lubię ;-)
Dodatkowo, jeśli ktoś nie posiada pliku port.h to jest on również dołączony. Są to dwie funkcje służące
do dostępu do portu LPT.
A teraz listingi programów.
plik: reseter.c
00 /* RESETER.c (c) 2004 Marcin Lukasik */
01
02 #include <sys/io.h>
03 #include <unistd.h>
04 #include <stdio.h>
05 #include <stdlib.h>
06
07 #include "port.h"
08
09 #define ERR " \033[0;22m\033[31m-\033[31;1m>\033[31;22m-\033[0m "
10
11 int main(int argc, char **argv) {
12
13 unsigned int t = 0;
14
15 if(getuid() != 0) {
16 printf("ERROR: To access LPT from Linux you must run this program as root.");
17 exit(-1);
18 }
19
20 if(argc != 2) {
21 printf("%sUsage: %s reset_time_in_sec\n", ERR, argv[0]);
22 exit(-1);
23 }
24
25
26 t = atoi(argv[1]) * 1000000;
27
28
29 ioperm(0x378, 3, 1); // open port
30 port_out(0x378, 255); // HI on b2-b9 (relay open - RESET)
31 usleep(t); // sleep for t seconds
32 port_out(0x378, 0); // LOW on (relay closed - NORMAL OPERATION)
33
34 return 0;
35 }
36
Trochę informacji dla chętnych i niezorientowanych w obszarach, które jakiegoś komentarza wymagają ;-)
Linia 29 - otwieramy port.
Linia 30 - wysyłamy na port wartość dziesiętną 255, która odpowiada liczbie binarnej 11111111 (czyli na każdym
wyjściu ustawiamy wartość 1) - dlatego wcześniej napisałem, że przekaźnik można podłączyć do któregokolwiek pinu I/O.
Linia 31 - usypiamy program na czas załączenia rozłączenia styków.
Linia 32 - wysyłamy na port wartość dziesiętną 0, która odpowiada liczbie binarnej 00000000 (czyli na każdym
wyjściu ustawiamy wartość 0) - przekaźnik wraca do pozycji domyślnej, prąd przepływa, i wszystko działa ;-)
Kompilacja: wpisujemy make all lub po prostu gcc reseter.c -o reseter -O2 -Wall.
I tyle :-) Jeśli wszystko poszło gładko, a powinno, to w bieżącym katalogu "wyskoczy" nam plik 'reseter'.
plik: checkforlink
#!/usr/bin/perl
$log_dir = "/var/log/messages"; # system log file
$d = "/bin/date"; # path to date program
$host = "192.168.1.15"; # host to check
$rp = "/bin/reseter"; # path to reseter
$rt = "1"; # reset time (default 1s)
$t1 = `$d +"%b"`; chop($t1);
$t2 = `$d +"%e"`; chop($t2);
$t3 = `$d +"%X"`; chop($t3);
$stat = system("ping -c 3 $host >/dev/null");
$host = `hostname`; chop($host);
if($stat == 0) { exit(0); } # connection okay? if yes -> exit.
system("$rp $rt");
open(LOG, ">>$log_dir");
print LOG "$t1 $t2 $t3 $host RESETER: Connection to $host lost! Reseting.";
close(LOG);
Powyższy program wymaga małej "konfiguracji".
$log_dir - plik z logami naszego serwera. Domyślnie /var/log/messages.
$d - ścieżka do programu 'date'. Domyślnie /bin/date
$host - rzecz najważniejsza! Jest to adres hosta, który zostanie sprawdzony.
Jeśli nie dochodzą do niego pingi, zostanie uruchomiona procedura resetu.
$rp - ścieżka do wcześniejszego programu resetującego. Podaj koniecznie!
$rt - czas restartu [s] (czas na jaki zostaną rozwarte styki przekaźnika). Domyślnie 1 sekunda
Jak to działa?
Plik umieszamy w crontabie i uruchamiamy co np. 5 minut. Program wysyła ping do $host. Jeśli odpowiedź powróci, program jest przerywany. Jeśli nie -
zostaje uruchomiony program reseter oraz zapisana w logach systemowych informacja o zerwaniu połączenia i wykonaniu resetu.
Wpis w crontabie
Cron, to taka fajna rzecz, która uruchamia nam jakiś program wtedy, kiedy chcemy :-)
I jeśli chcemy co uruchomić, to musimy do crontaba, czyli listy zadań dla crona, dopisać nasz program.
U mnie plik ten znajduje się w /var/spool/cron/crontabs/root.
A cały wpis powinien wyglądać mniej więcej tak:
*/5 * * * * perl /path/to/checkforlink 1> /dev/null 2> /dev/null
Taki wpis będzie skutkował uruchamianem co 5 minut programu perlowego /path/to/checkforlink. Oczywiście ścieżkę musimy dostosować sobie do położenia
naszych plików.
UWAGA! Wpis KONIECZNIE musi znaleźć się w crontabie dla root'a, ponieważ tylko root ma bezpośredni dostęp do portu!
Pliki, pliki, pliczki...
Tutaj znajduje się plik 'reseter.c', tutaj znajduje się 'checkforlink',
a tu 'port.h' - potrzebny plikowi 'reseter.c'
Wszystko możesz pobrać jako archiwum tar.gz z http://milea.pl/download/reseter.tar.gz
Parę słów na koniec
Jeśli chcesz np. zresetować Access Pointa, a jest on na dachu - nie poddawaj się. Możesz założyć przekaźnik, który będzie działał powiedzmy od 3V,
i puścić do niego zasilanie skrętką aż pod samego AP.
To, co z tym zrobisz, to już Twoja wola.
Poprzez ten reseter możesz włączać i wyłączać TV. Rób co chcesz. Ale pamiętaj:
Autor nie ponosi jakiejkolwiek odpowiedzialności za zniszczenia i inne spustoszenia spowodowane powyższym projektem.
Jeśli obawiasz się, że układ Cię zabije, to daj mu, i sobie, spokój.

SPIS TREŚCI
1. Wstęp
1.1. Krótka historia sieci bezprzewodowych
2. Standardy Wireless LAN
2.1. IEEE 802.11
 2.1.1.
802.11a
 2.1.2.
802.11b
 2.1.3.
802.11b+
 2.1.4.
802.11g
2.2. HiPeRLAN
3. Co i jak, czyli jak to działa
3.1. Jak działa antena Yagi?
3.2. Czy jestem w stanie
samemu zrobić antenę? Czy to się opłaca?
4. Jednostki
4.1. dB
4.2. dBm i Watt. Jak to ugryźć?
4.3. dBi i dBd
5. Wi-Fi i prawo, czyli co można, a czego nie
5.1. Z jaką maksymalną mocą można
nadawać w paśmie 2.4GHz?
5.2. Czy jeśli nie przekraczam 100mW
E.I.R.P. to jestem legalny?
6. Zakłócenia radiowe, i nie tylko..
6.1. Czy mogę postawić
anteny 2.4GHz obok anteny CB, TV, GSM, etc. Czy to się nie będzie
wzajemnie zakłócać?
6.2. Mam przed anteną słup
wysokiego napięcia. Czy ma to wpływ na połączenie i czy to w
ogóle będzie działać?
7. Wybór sprzętu
7.1. Jaką
antenę kupić..?
7.2.
Wielu producentów pisze, że
ich antena ma tyle i tyle dBi. Często zawyżają zyski w celach
marketingowych. Jak sprawdzić, jaki rzeczywisty zysk ma taka
antena?
7.3.
Czym się kierować kupując antenę?
7.4. Wybór access pointa / karty
7.5. Jaki
wybrać kabel?
8. Problemy z łączem i sprzętem
8.1. Na łączu mam dużo
gubionych pakietów. Z czego to wynika?
8.2. Ilu użytkowników
mogę podłączyć do jednego Access Pointa?
9. Trochę teorii
9.1. Czy da się jakoś
policzyć, czy łącze na daną odległość będzie działać?
9.2. Co to znaczy point-to-point (PtP),
access point client (APC) itd..?
10. Zabezpieczenia
10.1. Jak zabezpieczyć sprzęt przed
burzą?
10.2. Jak zabezpieczyć sprzęt przed złodziejami?
11. Dokumenty HOWTO
11.1. HOWTO: Jak zrobić reseter (do AP, modemu, ...)?
|