logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Najtańszy uC z Ethernetem (obecnie uC+ WRT54G (linux)

Myrek1 22 Lis 2007 21:35 2303 12
REKLAMA
  • #1 4510092
    Myrek1
    Poziom 23  
    Posty: 875
    Pomógł: 17
    Ocena: 53
    Mam problem z routerami w domu. Mam ich 2, jeden jest z modemem, drugi do VoIP, trzeci to AP. Czasem bywa, że któryś się zawiesi. Muszę zrobić coś co będzie restartowało je w wypadku zawieszenia.
    Wpadłem na pomysł, że zmontuje coś na uC z TCP/IP i podłączę pod ostatnie urządzenie (w tym przypadku AP). uC będzie pingował np co kilka minut jakiś serwer www. Jeśli nie otrzyma odpowiedzi to zrestartuje przez przekaźniki wszystkie urządzona.
    Pomysł prosty i dobry.
    Pytanie tylko jakiego proca wybrać. Z tego co widziałem najtańsze z Ethernetem (ARMy) są po 50zł, to trochę za dużo. Są jakieś małe i tańsze z tym portem?
  • REKLAMA
  • #2 4510177
    marenc
    Poziom 24  
    Posty: 881
    Pomógł: 37
    Ocena: 5
    Nie taniej AVR + ENC28J60(na przykład)? Co prawda trzeba samemu zrobić stos IP, ale poza tym to chyba będzie dużo taniej ;)

    //A może by pingować sam ruter(ten najdalszy)? Bo co będzie gdy stracisz połączenie lub DSN padnie :P
  • #3 4510431
    Myrek1
    Poziom 23  
    Posty: 875
    Pomógł: 17
    Ocena: 53
    No w sumie można, wyjdzie ok 30zł i kupa roboty przy stosie, chyba że weźmie się gotowy.

    Do ostatniego będzie podłączony uC. Można zrobić tak, że pinguje kilka IP. Wtedy odpada lipa z DNSami. Dodatkowo jeśli będzie brak odpowiedzi zrobi restart routera i znów pinguje. Jeśli nic nie będzie to czeka jakiś tam czas i znów...
    Można też pingować router z modemem.
    Rozwiązań jest kilka, ważny jest tylko dobór jak najtańszego uC, żeby miało to sens.

    Tak się składa, że AP to linksys na linuksie (tomato). Dorobił bym do tego szeregówkę i do uC. Tylko nie wiem jak wygląda sterowanie portem szeregowym wna tym sofcie, nigdy nie bawiłem się na linuksie.
  • #4 4510457
    marenc
    Poziom 24  
    Posty: 881
    Pomógł: 37
    Ocena: 5
    No ja bym poszedł na gotowca ... są projekty stosu IP na ATmega48/88/168 z przykładami echa. Przerobienie polegało by tylko i wyłącznie na odczekiwaniu na echo oraz kontrolowanie jednym I/O. Mało ambitne zadanie, ale jaka prostota wykonania ... a chyba i to oprócz ceny się liczy ;)
  • REKLAMA
  • #5 4510486
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Jakie to sprzęty ? Linksys ? Jeśli tak, to można sporo w nich pozmieniać (hardware + software)..
    BTW: są gotowe urządzenia do tego, ale koszt chyba > 100,-
  • #6 4510493
    Myrek1
    Poziom 23  
    Posty: 875
    Pomógł: 17
    Ocena: 53
    WRT54GL, wpadłem na to przy drugim poście. Mam tam tomato. Muszę dowiedzieć się jak za pomocą uC pingować IP przy użyciu tego softu przez port szeregowy

    Tu nie chodzi o ambicję, ją pokazuje w innym projekcie;) Chodzi mi o sprawnie działające rozwiązanie bo denerwują mnie telefony z domu, że tel nie działa (VoIP). Jak się okazuje router często się wiesza. Trzeba wymienić router ale i zrobić zabezpieczenie dla świętego spokoju.
  • #7 4510575
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    To masz zapewne urzadzenie /dev/tts/0 i 1. Polecenie cat > /dev/tts/0 wysyła znaki z klawiatury poprzez port COM0 na płytce WRT54GL.

    Można dopisać do plików startowych w /etc/init.d/S<wysoki numerek>UARTPing.sh cos w stylu:
    
    #!/bin/sh
    cat /dev/urandom > /dev/tts/0
    

    i jeżeli ATmega zapięta po drugiej stronie przestanie odbierać dane (i zgłosi timeout), to zresetuje całą instalację.

    Dystrybucji tomato nie znam. Pozostawiam rozkminianie Tobie :)

    Oprócz tego można napisać własny kawałek kodu w C (to tak na wypadek, gdybyś nie programował jeszcze w Linux), typu
    
    FILE* pFile = fopen("/dev/tty/0", "rb");
    fwrite(...., pFile);
    fread(..., pFile);
    

    ale cat wydaje się doskonałym i sprawdzonym narzędziem :)

    Wszystko piszę per analogia do dystrybucji OpenWRT, z której sam korzystam.

    BTW: u mnie w tandemie router WRT54GS i WAP54G wiesza się zawsze ten ostatni. Z VoIPem Linksysa nie ma nigdy problemów.

    Powodzenia!
  • REKLAMA
  • #8 4510642
    Myrek1
    Poziom 23  
    Posty: 875
    Pomógł: 17
    Ocena: 53
    Ja mam tek, że jest adsl>router z modemem>fritz!box>AP WRT54GL i ma być za WRT54GL uC. Chce, żeby ten uC (Atmega) przez szeregowca pingował za pomocą tomato w AP jakieś IP w necie. Dopiero jak braknie pinga to wtedy naspuje restart wszystkiego.
    Więc chyba to co napisałeś, nie przejdzie, bo linksys jest na samym końcu, nie na początku. Działało by gdyby linksys sam pingował IP i odpowiedź wysyłała do uC.
    Ale bardziej interesuje mnie sterowanie z uC, nie z linksysa, bo wtedy magę sprawdzić więcej IP, np nie zgłasza się ping z neta to pinguje modem i sprawdzam czy jest odpowiedź. Jak jest to najprawdopodobniej jest zerwane połączenie (wina dostawcy neta).

    W linuxie się nie bawiłem, ale szybko się uczę ;)
  • REKLAMA
  • #9 4510674
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Nie wiem, ile mozesz zwojowac z tomato, ale ja bym odpalil na tym APie skrypt (pod OpenWRT jest to dosc proste), ktory robi w petli zestaw pingow, analizuje wyniki i periodycznie raportuje to na COM0 do podpietej tam ATmegi. Zwisa AP lub siec jest niedostepna - ATmega robi reset calosci. Byc moze malo eleganckie, ale o niebo prostsze niz uruchamianie stosu TCP/IP na ATmega..
  • #10 4510710
    Myrek1
    Poziom 23  
    Posty: 875
    Pomógł: 17
    Ocena: 53
    A czy nie da się napisać skryptu (nie musi być na tomato, może być na openWRT), który na odpowiednią komendę z ATmegi wykona ping dowolnego IP i odpowie ATmedze wynikiem?
  • #11 4511058
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Ooo.. myślę, że dość lajtowo

    
    # to jest proces wczytujący non stop zawartość portu COM0 i przekierowującego go na stdin naszego skryptu
    
    cat /dev/tts/0 | <moj_skrypt.sh>
    


    a w <moj_skrypt.sh>
    
    #!/bin/sh
    
    #nieskonczona petla, ktora wczytuje adres IP (linia po linii) z stdin, a nastepnie robi ping-a, ktorego wynik trzeba pozniej potraktowac np. grep-em i wyłapać obecnosc słów kluczowych. 
    #Brak slow kluczowych - wyslac Err do procka, lub OK jesli sie powiodlo.
    
    while true; do 
    while read line; do {
       result=`ping $line | <kod do weryfikacji wynikow>`;
       if(result=....) then echo "OK" > /dev/tts/0;
       else echo "Err" > /dev/tts/0;
       end if;
    } done;
    done;
    


    czy jakoś tak. Nie pamietam, czy nie wkradła się tu składnia Perla, ale z grubsza tak bym to zrobił.

    Jak dla mnie układ jest prostszy w utrzymaniu, jeśli cała konfiguracja jest na AP (np. lista adresów do pingu), a ATmega jest tylko "biernym" obserwatorem. Ale to szczegół techniczny :)
  • #12 4511586
    Myrek1
    Poziom 23  
    Posty: 875
    Pomógł: 17
    Ocena: 53
    Wielkie dzięki. Na razie mało mi to mówi ale posiedzę nad tym.
    Adresy do pingu może być np 3, 2 IP zewnętrzne np onet i wp a jeden wewnętrzny do weryfikacji połączenia. I było by tak, że Atmega wysyła rozkaz sprawdzenia jednego, otrzyma błąd, drugiego, otrzyma błąd, sprawdza wewnętrzny - otrzyma błąd - restart systemu. Jak przy wewnętrznym otrzyma ok - czeka np 5 minut. Jeśli dalej błąd to restart i dalej sprawdza. Jeśli dalej błąd czeka dłużej.

    Myślę że pomysł jest dobry i będzie działał znakomicie. I też da się to zrobić na tomato bo obsługuje on skrypty. Do tego można sobie go samemu skompilować.
  • #13 4526980
    migod
    Poziom 21  
    Posty: 462
    Pomógł: 29
    Ocena: 8
    Ok, dziś odpaliłem prosty projekcik - ATmega8 mierzy napięcie na ogniwach słonecznych i śle te dane do WRT54GS (via serial oczywiście), a ten loguje to wszystko na kartę SD. Cały układ jest zasilany wprost z WRT.

    Czyli masz duże szanse powodzenia w swoim projekcie :)

Podsumowanie tematu

✨ Tematem dyskusji jest wybór najtańszego mikrokontrolera (uC) z wbudowanym Ethernetem do monitorowania i automatycznego restartu domowych urządzeń sieciowych (routerów, AP, VoIP) w przypadku ich zawieszenia. Propozycja polega na podłączeniu uC do ostatniego urządzenia (np. Access Pointa Linksys WRT54GL z oprogramowaniem Tomato) i okresowym pingowaniu wybranych adresów IP w sieci lub w Internecie. W przypadku braku odpowiedzi uC miałby zresetować urządzenia przez przekaźniki. Dyskutowano o alternatywach: użyciu AVR z modułem ENC28J60, co jest tańsze (~30 zł) lecz wymaga implementacji stosu TCP/IP, lub wykorzystaniu gotowych stosów IP na ATmegach (np. ATmega48/88/168). Sugerowano także uruchomienie skryptów pingujących na routerze z Tomato lub OpenWRT, które komunikowałyby się z uC przez port szeregowy, co upraszcza implementację i pozwala na bardziej elastyczne monitorowanie wielu adresów IP. Przykładowe rozwiązania obejmują skrypty shellowe do pingowania i przesyłania wyników przez port COM, a także sterowanie resetem urządzeń przez uC na podstawie otrzymanych odpowiedzi. Wskazano, że Linksys WRT54GL z Tomato umożliwia modyfikacje sprzętowe i programowe, co ułatwia integrację z mikrokontrolerem. Całość ma na celu zapewnienie stabilności sieci domowej i automatyczne reagowanie na awarie sprzętowe lub problemy z łączem internetowym.
REKLAMA