Strona zgodnie z Polityką plików cookies wykorzystuje pojedynczy plik cookie do poprawnego działania licznika odwiedzin.
Możesz określić warunki przechowywania lub dostępu do plików cookies w ustawieniach Twojej przeglądarki.

 Centrum Usług Sieciowych 
 
Komputerowy system sterowania urządzeniami
 
 
Ostatnia aktualizacja: 04.08.2015
Wstęp
Sprzęt
Oprogramowanie
Instalacja
AP i DHCP
ProFTPd
Firewall
Apache z PHP
MySQL
Dźwięk
Obsługa LPT
Moduł 230V
LPT przez WWW
Cron
Muzyka  NEW
Budzik WWW
Termometr
Automatyzacja
Kontrola dostępu
Co dalej?
Sterowanie portem LPT z przeglądarki

Mamy Apache z PHP, mamy polecenie sterujące LPT i mamy układ wykonawczy. Teraz czas stworzyć dynamiczną stronę sterującą portem LPT. Nasz serwer Apache działa w systemie jako użytkownik apache (coś podobnego! =D). Aby mieć możliwość używania polecenia lpt oraz usuwania i tworzenia pliku - flagi /tmp/lptready musimy sprawić by użytkownik apache mógł to zrobić. Polecenie lpt działa tylko wtedy, gdy używamy go jako root. Z pomocą przychodzi sudo - program, który umożliwia jednemu użytkownikowi wykonanie polecenia jako root. W pliku /etc/sudoers zaraz pod linią z root'em dopisujemy:

apache Slack=/bin/lpt
apache Slack=/bin/rm -f /tmp/lptready
apache Slack=/bin/touch /tmp/lptready
apache Slack=NOPASSWD: ALL

Trochę wyjaśnień: Slack to nazwa naszego komputerka, którą ustalaliśmy podczas instalacji systemu (w razie potrzeby należy zmienić). Pierwsza linijka pozwala użytkownikowi apache na wykonanie polecenia lpt jako root, druga na usunięcie flagi, trzecia na utworzenie flagi, a czwarta powoduje, że użytkownik apache nie będzie pytany o hasło root'a.

Teraz pobawimy się w PHP. Edytujemy /var/www/htdocs/index.php, który do tej pory pokazywał nam ładne tabelki, gdy wchodziliśmy przez przeglądarkę na http://10.0.0.1/. Poniżej najprostsza wersja.

<?php
    $exec = ("if [ -f /tmp/lptready ]; then echo OK; fi;");
    if($exec!="OK") {
       echo "Brak dostepu do portu!";
    } else {
       $exec = exec("sudo lpt get");
      echo $exec;
    }
?>

Powyższy skrypt sprawdzi czy istnieje flaga. Jeśli nie to wyświetli komunikat o braku dostępu do portu, a jeśli istnieje to wyświetli liczbę od 0 do 255 pobraną z portu. Kolejny skrypt wyświetla stany pojedynczych pinów.

<?php
    $exec = ("if [ -f /tmp/lptready ]; then echo OK; fi;");
    if($exec!="OK") {
       echo "Brak dostepu do portu!";
    } else {
       for($i=0;$i<8;$i++) {
          $exec = exec("sudo lpt getbit".$i);
          echo "D".$i." = ".$exec."<br>";
       }
    }
?>

Kolejny skrypt daje nam możliwość zmiany stanu pinów. Obsługuje też w pełni flagę - usuwa ją przed wprowadzeniem zmian i tworzy po zakończeniu obsługi portu.

<?php
    $exec = exec("if [ -f /tmp/lptready ]; then echo OK; fi;");
    if($exec!="OK") {
       echo "Brak dostepu do portu!";
    } else {
       exec("sudo rm -f /tmp/lptready");
       if(isset($_GET["change"])) {
          $num=htmlspecialchars($_GET["change"]);
          if($num>=0&&$num<8) {
             $exec = exec("sudo lpt getbit ".$num);
             if($exec=="0") {
                exec("sudo lpt setbit ".$num);
             } else {
                exec("sudo lpt clrbit ".$num);
             }
          }
       }
       for($i=0;$i<8;$i++) {
          $exec = exec("sudo lpt getbit ".$i);
          if($exec=="1") $exec="On"; else $exec="Off";
          echo "D".$i." - <a href=index.php?change=".$i.">".$exec."</a>
          <br>";
       }
       exec("sudo touch /tmp/lptready");
    }
?>

Na tym etapie pojawił się problem. Jeśli po wprowadzeniu zmiany zaczniemy odświeżać stronę operacja zmiany będzie się powtarzać włączając i wyłączając pin. Ostatecznie rozłóżmy to na dwa pliki index.php i change.php.

index.php
---------
<?php
    $exec = exec("if [ -f /tmp/lptready ]; then echo OK; fi;");
    if($exec!="OK") {
       echo "Brak dostepu do portu!";
    } else {
       exec("sudo rm -f /tmp/lptready");
       for($i=0;$i<8;$i++) {
          $exec = exec("sudo lpt getbit ".$i);
          if($exec=="1") $exec="On"; else $exec="Off";
          echo "D".$i." - <a href=change.php?pin=".$i.">".$exec."</a><br>";
       }
       exec("sudo touch /tmp/lptready");
    }
?>

change.php
----------
<?php
    $exec = exec("if [ -f /tmp/lptready ]; then echo OK; fi;");
    if($exec=="OK") {
       exec("sudo rm -f /tmp/lptready");
       if(isset($_GET["pin"])) {
          $num=htmlspecialchars($_GET["pin"]);
          if($num>=0&&$num<8) {
             $exec = exec("sudo lpt getbit ".$num);
             if($exec=="0") {
                exec("sudo lpt setbit ".$num);
             } else {
                exec("sudo lpt clrbit ".$num);
             }
          }
       }
       exec("sudo touch /tmp/lptready");
    }
    header("Location: index.php");
?>

Tu plik index.php stanowi tylko interfejs. Polecenie zmiany stanu wykonuje plik change.php, który następnie skacze do index.php.

Fajnie jest włączać i wyłączać sobie lampkę przez dynamiczną stronę łącząc się telefonem komórkowym przez WiFi =D.

Na górę
Autor:

image
int

Kontakt:
facebook.com/int84
int281184@gmail.com
GG 5317390

Licznik:
27000

Valid HTML 4.01 Strict Valid CSS

Strona stworzona przy użyciu PageBreeze, Notepad++, oraz pakietu XAMPP dla sustemu Windows, a także aplikacji KSWEB i DroidEdit Pro dla systemu Android.