Domowy NAS: wyłączanie i włączanie… z Arduino?!

Domowy NAS zainstalowany. Teraz zacząłem się zastanawiać nad kosztami jego używania… Cóż, mój NAS nie musi być włączony przez cały czas:)

Postanowiłem więc skonfigurować go tak, żeby wyłączał się o określonych godzinach. A Arduino? Pobudka, na życzenie:)

Automatyczne wyłączanie…

Tu nie ma wielkiego problemu. Harmonogramowanie wyłączania jest jedną z funkcji Nas4Free. Wystarczy zalogować się do portalu serwera i wybrać System/Shutdown:

Teraz wybierzcie zakładkę „Scheduled”.

W prawym górnym rogu zaznaczcie „Enable”. Teraz możecie ustawić kiedy serwer będzie się wyłączał. Na koniec kliknijcie „Save”. Wasz serwer będzie wyłączał się zgodnie z zadanym harmonogramem.

UWAGA: Ustawiając czasy wyłączenia, uważajcie żeby nie zaznaczyć „All” na minutach czy godzinach. Jest to domyślne ustawienie, które sprawi, że dopiero co uruchomiony serwer – wyłączy się po minucie (lub po godzinie). Chyba, że tak właśnie chcecie…

MAC i IP

Do dalszych eksperymentów będą potrzebne „namiary” na serwer: jego adres MAC i IP. Łatwo to sprawdzić – wystarczy wybrać Status/Interfaces:

Mój serwer NAS:

  • Adres IP: 192.168.1.250,
  • Adres MAC: 00:19:b9:1c:10:16

Automatyczne włączanie (BIOS)

W zależności od modelu płyty głównej, automatyczne uruchamianie można ustawić w BIOS:

Takie rozwiązanie pozwala na regularne włączanie serwera, np. każdego poranka o 9.00 (albo tylko w dni robocze).

Ja jednak szukam czegoś innego: włączania serwera na życzenie. I taka możliwość istnieje – a nazywa się WakeOnLAN. Nawet wyłączony, komputer „pilnuje” tego co pojawia się na karcie sieciowej. Jeżeli wykryje odpowiednio spreparowany pakiet – serwer uruchomi się.

Funkcję WakeOnLAN trzeba najpierw włączyć w BIOS. U mnie był wyłączony:

Wystarczyło go włączyć:

Pozwoliłem serwerowi wystartować, a później go zamknąłem. Teraz z maszyny linuksowej:

I serwer ożył:)

Serwer wyłączajcie tylko w kontrolowany sposób!!!

Z Arduino…

Pomysł polega na wysłaniu pakietu „WOL” z Arduino wyposażonego w rozszerzenie ethernetowe. Takie Arduino może być włączone do sieci w dowolnym miejscu – byle było w tej samej podsieci co serwer NAS.

Na Arduino uruchomię mini-serwer web. Będzie można na niego wejść z dowolnego urządzenia w domowej sieci. Odpowiednia strona www umożliwi zdalne uruchomienie NASa; planuję:

  • Stronę główną, na której wyświetlę stan serwera (on/off-line) i przycisk do uruchomienia serwera,
  • „/up” wysyłająca żądanie wake-on-lan (obudzenia serwera), przekierowująca do „/check”,
  • „/check” – sprawdzająca. czy serwer już wstał; jeżeli tak: powraca do głównej

Podłączamy Arduino do sieci

Więcej o Ethernet Shield: Arduino i Ethernet Shield WP5100.

Nałóżcie Ethernet Shield na Arduino. Podłączcie gniazdo Ethernet do routera w Waszej sieci domowej. Kablem USB podłączcie Arduino do komputera.

Jeżeli używacie linuksa i klona Arduino UNO z chipem CH340 do komunikacji po USB, w katalogu /etc/udev/rules.d dodajcie plik np. 51-arduino.rules o zawartości:

ATTRS{idVendor}==”1a86″, ATTRS{idProduct}==”7523″, ENV{ID_MM_DEVICE_IGNORE}=”1″
SUBSYSTEMS==”usb”, ATTRS{idVendor}==”1a86″, ATTRS{idProduct}==”7523″, MODE:=”0666″

Teraz otwórzcie Arduino IDE i załadujcie na Arduino przykład Ethernet/Webserver (diody na karcie sieciowej powinny się teraz zapalić). Ten przykład ustawia karcie Ethernetowej Arduino:

  • Adres IP: 192.168.1.177,
  • Adres MAC:  DE:AD:BE:EF:FE:ED

Otwórzcie teraz przeglądarkę i wpiszcie w niej adres: 192.168.1.177. Powinniście zobaczyć stan wejść analogowych:

Gratulacje, właśnie zbudowaliście serwer WWW na Arduino:)

Modyfikacje

Najpierw zmienię adres IP. Linijka:

Przyjmie postać:

Czyli teraz serwer znajdzie się pod adresem 192.168.1.240.

Przy okazji dodam sobie zmienne reprezentujące adres IP i MAC mojego serwera NAS:

Te linijki odpowiadają za zbudowanie strony:

Na pewno zostawię drukowanie nagłówka pakietu i głównych tagów HTML, chociaż chyba ładniej będzie przenieść to do dwóch funkcji:

W ten sposób strony będą tworzył wywołując mp.:

Przyda się: konwersja obiektu IPaddress na String:

Ping

Najpierw chce się upewnić, czy mój serwer nie jest już przypadkiem włączony. Użyję do tego bibliotekę Ping. Na podstawie przykładu „Ping” napisałem funkcję sprawdzającą, czy mój NAS odpowiada:

Zwróćcie uwagę na jeden szczegół: inicjalizacja pingSocket. W przykladzie Ping jest:

Niestety taka inicjalizacja sprawia, że NAS zostanie wykryty… tylko raz po włączeniu Arduino. Każde kolejne wywołanie funkcji zwróci fałsz. Rozwiązanie znalazłem w tym wątku na forum Arduino i polega na zmianie domyślnego socketa:

Teraz mogłem dodać:

Jeżeli ping się powiódł, na stronie głównej pojawi się informacja, że serwer jest on-line. Inaczej – uaktywniony zostanie przycisk z napisem „uruchom”. Po jego wciśnięciu użytkownik zostanie przekierowany na podstronę „/up”, która wyśle pakiet WOL.

WOL

Funkcję napisałem na podstawie tego kodu. Dodałem nową zmienną:

I funkcja do wysyłania:

Wywołanie tej funkcji z adresem MAC Nas’a obudzi serwer.

Pełny kod

Żeby dostosować ten kod do swoich potrzeb, zmieńcie:

Na MAC i adres IP Waszego NAS.

A działa tak:

Źródła

2 myśli nt. „Domowy NAS: wyłączanie i włączanie… z Arduino?!”

    1. Witaj,
      hmmm – możesz wyjaśnić? WOL to taki pakiet, który wysyłasz po sieci z adresem MAC karty sieciowej maszyny, która ma być włączona (o ile ustawiłeś jej to w BIOS). Jak się do tego ma przekaźnik?

      Pozdrawiam,
      A

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *