Dann machen wir mal weiter mit Teil 2 der Steckdosen.
Wir bauen ein Webinterface für unsere alten Funk-Steckdosen die wir im vorherigen Artikel zum IoT Device umgebaut haben.

Setup – GPIO Zugriff von PHP, Pyton oder CGI einrichten

Wie man den Apache Webserver und PHP auf dem Pi installiert beschreibe ich hier nicht, da es dazu dutzende Anleitungen gibt.
Was aber wirklich wichtig ist:

Wichtig:
Der Nutzer unter dem der Webserver (www-data) läuft darf nicht auf die GPIOs des Raspberry Pi zugreifen. Daher funktionieren auch aus PHP oder Python oder CGI aufgerufene Shell Scripte bzw. Shell-Kommandos nicht.
Wenn man nach dem Problem googelt bekommt man sehr viele hirnrissige und gefährliche Tipps.

  • Die einen packen den Apache User in die Sudoers Gruppe (/etc/sudoers). Das funktioniert auf jeden Fall, ist aber eine eine saublöde Idee. Jedes Script kann dann aus PHP mit sudo/root-Rechten aufgerufen werden. Ein “rm -rf /” wäre damit problemlos möglich. Von der Sicherheitslücke die entsteht, wenn der Webserver Scripte mit Root Rechten ausführt, will ich gar nicht reden.
  • Manche geben kurzerhand den entsprechenden Shell-Scripten die sie ausführen wollen root-Rechte damit es mit den GPIOs klappt.
    Root-Rechte auf einem Script auf das der Webserver vermutlich schreibenden Zugriff hat…. Eine weitere saublöde Idee, Foren sind aber voll davon.
    Wenn ihr also was seht wie /etc/sudoers:
    www-data ALL=(ALL) NOPASSWD: /var/www/html/pi/script.php
    –>Finger weg
  • Es gibt noch viele weitere kreative und kuriose Lösungen für das Problem.

Jetzt oute ich mich mal als Anleitungsleser:
Der von Rasbian vorgeschlagene Weg besteht aus zwei Kommandos um  den …

GPIO-Zugriff aus PHP-Scripten sicher und sauber lösen

sudo adduser www-data gpio
sudo systemctl restart apache2

Rückgängig machen kann man’s mit:

sudo deluser www-data gpio

443 MHz Steckdosen mit dem Raspberry Pi und PHP-Webinterface steuern

Das Script erzeugt eine HTML Datei mit Buttons, die wenn man sie klickt die Steckdosen schalten:

  1. Webserver und PHP auf dem Pi installieren
  2. Das Script nach /var/www/html/index.php kopiern
  3. Die vorhandene index.html vom Apache löschen oder umbenennen
  4. Eure Ports in dass Script eintragen
  5. Script aufrufen
  6. Wenn es klickt beim Klicken -> Fertig

gpio.php




Steckdosen Control <?php $timestamp = time(); echo $timestamp; ?>
p1=$p1, p2=$p2, wert=$wert gesendet";
 
 $wert= 0;
 if ($p2==1){
 $wert= $arr_on[$p1];
 }else{
 $wert= $arr_off[$p1];
 }
 If ($p1>0 and $p1<5){
 $gpio_on = shell_exec("/home/pi/Steckdosen433/433Utils/RPi_utils/codesend $wert &");
 $arr_status[$p1]=$p2;
 }else{
 }
 print "p1=$p1, p2=$p2, wert=$wert gesendet";
}

?>


 HG Steckdosen Control V0.1: 
 
Steckdose $i"; print ""; print ""; $s=0; if (isset($arr_status[$i])){ $s=$arr_status[$i]; } if ($s==1){ $pic="LED_on.png"; }else{ $pic="LED_off.png"; } print "s=$s $pic"; } ?>

443 MHz Steckdosen mit dem Raspberry Pi und Webinterface steuern

Wenn es jetzt klickt hat alles funktioniert.

Glückwunsch zu Deinem neuen IoT Device.

Beim nächsten Mal schreiben wir ein Ajax-Interface oder einen Alexa-Skill für die Steckdosen….