DIY - sterownik nawadniania - część 4. - Budowa sterownika - sterowanie przez przeglądarkę

opublikowano 13.07.2020, autor: Marek

Włączanie i wyłączanie sterownika z poziomu komend wydawanych na klawiaturze to spore utrudnienie. Właśnie dlatego dodamy możliwość sterowania z poziomu przeglądarki - przez telefon czy komputer, za pomocą zainstalowanego na Raspberry Pi serwera www.
Nie widziałeś poprzedniego odcinka? Zobacz - https://podlewaj.pl/blog/diy-sterownik-nawadniania-czesc-3

Czym jest serwer www

Odwiedzając dowolną stronę internetową wykorzystujemy naszą przeglądarkę do komunikacji z serwerem (komputerem) na którym znajduje się ta strona. Dzięki temu, jesteśmy w stanie korzystać z zasobów z dowolnego urządzenia podłączonego do sieci i dysponującego przeglądarką internetową - bez względu na to, czy jest to telewizor SmartTV, laptop, komputer stacjonarny, tablet czy smartfon.

Dlaczego jednak komunikacja z serwerem internetowym pozwala na wyświetlenie strony internetowej, a wpisanie w przeglądarkę adresu naszego komputera domowego powoduje wyświetlenie komunikatu o tym, że strona nie istnieje? Oprócz fizycznego urządzenia, potrzebujemy także oprogramowania - czyli właśnie serwera www - które obsłuży połączenia z przeglądarkami użytkowników i wyśle treść żądanych stron.

Co ma jednak wspólnego wyświetlanie strony internetowej ze sterowaniem portami wejścia/wyjścia? Teoretycznie - niewiele. W końcu w większości przypadków w trakcie naszych działań w internecie nie mamy potrzeby włączania czy wyłączania fizycznych urządzeń. W przypadku sterownika jednak, wykorzystamy fakt, że Raspberry Pi pozwala na zainstalowanie takiego oprogramowania i sprzężenie go z komendami sterującymi naszymi portami wejścia/wyjścia. A to oznacza, że kliknięcie na stronie internetowej sprawi, że serwer internetowy w naszym imieniu wprowadzi odpowiednią komendę - bez konieczności wpisania żadnych poleceń z naszej strony! Prawda, że to duże uproszczenie? Tak więc zabierajmy się do instalacji.

Aktualizujemy system i instalujemy serwer internetowy

Uruchamiamy więc system (o ile jeszcze tego nie zrobiliśmy) wraz z podłączonym monitorem/telewizorem, myszą oraz klawiaturą. Otwieramy terminal - ten sam, przez który w poprzednim odcinku wydawaliśmy komendy - i wpisujemy:

sudo apt-get update

System pobierze dostępne aktualizacje - jest to konieczne zanim przystąpimy do instalowania nowego oprogramowania. Teraz wpisujemy

sudo apt-get install apache2 php7.3 libapache2-mod-php7.3

Zostaniemy zapytani o pobranie danych. Klikamy przycisk Y i wciskamy ENTER. Czekamy chwilę, aż pakiety zostaną pobrane i zainstalowane. Co właściwie robi ta komenda? Instaluje serwer apache2 oraz bibliotekę php w wersji 7.3, a następnie moduł który doda obsługę php 7.3 do serwera apache2. Czym są apache2 i php7.3? Chyba najłatwiej przełożyć tą relację na… restaurację! Apache2 to urządzona restauracja, która znajduje się w budynku (na naszym serwerze). PHP to natomiast kucharze zatrudnieni w tej restauracji - realizujący zamówienia przynoszone przez kelnerów. Restauracja bez kucharzy jest w naszym wypadku równie bezużyteczna jak Apache bez PHP :) To oczywiście bardzo duży skrót myślowy, ale zainteresowani na pewno znajdą więcej informacji we własnym zakresie.

Wróćmy jednak do naszej instalacji. Serwer www powinien uruchomić się automatycznie, gdy więc zakończy się proces instalacji (a na ekranie pojawi się znowu znak zachęty), możemy przetestować poprawność działania.

Łączymy się z serwerem

Otwieramy więc naszą przeglądarkę internetową (na telefonie lub komputerze). Ale chwila, w zasadzie jaki adres powinniśmy wpisać w okno? Zazwyczaj używamy bowiem czytelnych dla człowieka adresów domen takich jak google.com czy podlewaj.pl

W przypadku Raspberry działającego wyłącznie w sieci lokalnej nie mamy jednak domeny. Musimy odwołać się poprzez adres sieciowy. Skąd go zdobyć? Wróćmy na Raspberry i wpiszmy komendę:

ifconfig

Wyświetli nam się stan wszystkich kart sieciowych zainstalowanych w systemie. W moim przypadku są to: eth0 (czyli połączenie przewodowe poprzez kabel Ethernet), lo (czyli wirtualna karta sieciowa) oraz wlan0 (czyli połączenie bezprzewodowe). Zależnie od tego czy używamy połączenia przez ethernet czy wifi, sprawdzam odpowiednią sekcję i szukamy w niej linii znajdującej się słowem “inet”. Następujące po niej 4 liczby rozdzielone kropkami to właśnie adres internetowy naszego sterownika w sieci lokalnej :) W moim przypadku jest to: 192.168.1.111

Jeśli okaże się, że nie ma takiej linii, prawdopodobnie połączenie internetowe jest rozłączone - jeśli używasz kabla ethernet, sprawdź poprawność jego połączenia, a jeśli łączysz się bezprzewodowo, kliknij na ikonkę sieci w prawym górnym rogu okna systemu Raspberry (zaraz obok głośnika). Menu pokaże podłączone i inne dostępne w okolicy sieci wifi, pozwoli też na podłączenie do innej, jeśli zajdzie taka potrzeba.

Wróćmy jednak do wpisywania adresu w przeglądarkę. Zamiast “google.com” wpisujemy tym razem http://ADRES-WYŚWIETLONY-PO-SŁOWIE-INET czyli np. w moim przypadku: http://192.168.1.111

Dlaczego “http://” z przodu jest ważne? Niektóre przeglądarki, m.in. Google Chrome, pozwalają na wyszukiwanie fraz wpisanych w pole adresu. Czasami przeglądarka błędnie zinterpretuje adres IP jako frazę do wyszukiwania i otworzy… stronę wyszukiwarki! Wpisanie “http://” z przodu informuje przeglądarkę, że świadomie chcemy przejść na adres strony następujący po tej frazie - nawet, jesli ten adres to 4 liczby rozdzielone kropkami :)

Uwaga! Pamiętajcie, że połączenie będzie nawiązane wyłącznie wtedy, gdy oba urządzenia będą w tej samej sieci lokalnej (podłączone do tego samego routera, przewodowo lub bezprzewodowo). Jeśli wasz smartfon jest połączony z internetem przez 3G lub LTE, nie będzie w stanie dostać się do waszego urządzenia (i bardzo dobrze, wyobrażacie sobie, że każdy człowiek z dostepem do internetu mógłby podłączyć się do Waszego urządzenia?! Na ten moment będą w stanie zrobić to tylko osoby zalogowane do sieci do której podłączony jest też sterownik, czyli domownicy - osoby zaufane).

Klikamy ENTER i… powinna otworzyć nam się strona testowa “Apache2 Debian Default Page”. Jeśli tak - świetnie, otrzymaliśmy odpowiedź z serwera www naszego sterownika :) W przeciwnym wypadku sprawdźmy, czy wszystkie poprzednie komendy są poprawne, wpisujemy właściwy adres i czy jesteśmy w tej samej sieci lokalnej.

Tworzymy interfejs użytkownika

Aby ułatwić Wam nieco pracę, skorzystamy ze stworzonego przeze mnie gotowego projektu skryptu PHP wraz z interfejsem użytkownika, obsługującego włączanie i wyłączanie 4 przekaźników. Pobierzemy go przechodząc pod adres https://podlewaj.pl/blog/files/diyserwer.zip

Archiwum możemy ściągnąć i wypakować na pendrive (podłączony do naszego domowego komputera) albo pobrać bezpośrednio na Raspberry otwierając przeglądarkę internetową (druga ikona na górnym pasku narzędzi - z globusem). Procedura jest bardzo podobna, ale opiszę szczegółowo tą drugą. Otwieramy więc przeglądarkę i wpisujemy w pasek adresu powyższe łącze. Klikamy ENTER i czekamy aż na pasku na dole ekranu pobieranie się zakończy - klikamy na ikonę ściągniętego pliku co spowoduje uruchomienie programu do rozpakowywania archiwów.

Klikamy teraz kombinację klawiszy Ctrl + E lub wybieramy z menu Archive > Extract

Zatwierdzamy domyślną lokalizację wypakowania (folder tymczasowy /tmp) i klikamy Extract

Teraz (niezależnie od wybranej metody), będziemy potrzebować przeglądarki plików z uprawnieniami root (czyli administratora). Jeśli otworzymy eksplorator plików klikając trzecią ikonę na pasku narzędzi (dwa foldery), otworzymy go z uprawnieniami zwykłego użytkownika (pi) i wiele operacji będzie skutkować odmową dostępu. Skorzystamy ze znanej nam komendy sudo.

Aby ją wprowadzić, otwieramy terminal (ten sam który otwieraliśmy w poprzednich częściach naszej serii, aby sterować naszą listwą przekaźnikową) i wpisujemy komendę:

sudo pcmanfm

Otworzy nam się eksplorator z widocznym pomarańczowym trójkątem z wykrzyknikiem (pierwsza ikona) - ostrzega nas on, że pracujemy w trybie administratora z wysokimi uprawnieniami i musimy zachować szczególną ostrożność.

Przechodzimy (korzystając z drzewa katalogów w lewym oknie) do katalogu /tmp a następnie do folderu “diyserwer” do którego rozpakowaliśmy pobrane archiwum. Zaznaczamy wszystkie znajdujące się tam pliki i foldery a następnie kopiujemy je (Ctrl + C lub klikamy na nie prawym przyciskiem myszy i wybieramy Copy)

Teraz nawigujemy do folderu /var/www/html i wklejamy skopiowane pliki (Ctrl + V lub klikamy prawym przyciskiem myszy na pustym obszarze okna i wybieramy Paste)

Jeśli w folderze znajdowały się wcześniej jakieś pliki, usuwamy je lub nadpisujemy w trakcie kopiowania.

Teraz możemy sprawdzić poprawność działania naszego sterownika. Przy pomocy innego komputera, smartfona lub innego urządzenia podłączonego do tej samej sieci lokalnej co nasz sterownik otwieramy adres (ten, który pokazał nam się po wpisaniu komendy “ifconfig” w terminalu). W moim przypadku jest to http://192.168.1.111

Teraz zamiast standardowej strony Apache2 Debian Default Page powinna pojawić się strona z interfejsem do obsługi naszego sterownika!

Kliknięcia w przyciski powinny przełączać odpowiednio stan przekaźników - jak zresztą widać na kolejnym zdjęciu

Oczywiście warto pamiętać, że to dopiero zalążek prawdziwego sterownika nawadniania. Nie mamy systemu kontroli dostępu - każdy z sieci lokalnej może zmieniać stan. Nie mamy automatyzacji harmonogramu - wciąż samodzielnie musimy przełączać strefy. Nie mamy danych z czujników, prognozy pogody i wielu innych które znajdziecie w pełnoprawnym sterowniku podlewaj.pl.

Ten wpis blogowy kończy nasz podstawowy tutorial odnośnie budowy sterownika, ale głowa do góry - w przyszłości pojawią się dodatkowe wpisy które pozwolą na dodanie kolejnych funkcjonalności. Polubcie nas na Facebooku żeby nie przegapić żadnych wpisów - https://www.facebook.com/podlewaj/ i w razie pytań korzystajcie z systemu komentarzy pod wpisami.

Powodzenia!

powrót do listy artykułów