Raspberry Pi GPIO Web Interface

Raspberry PI GPIO Relais
In einem meiner letzten Beiträge habe ich euch berichtet, wie man mit dem Raspberry Pi das Projekt  Smart-Home-Steuerung realisieren kann. Diesen Beitrag findet Ihr übrigens [hier]. Klar ist, dass man mit den dort beschriebenen python-Skripten zwar die Relais schön schalten kann, jedoch will wohl kaum jemand ständig über die Konsole Befehle ausführen bzw. Skripte starten. Wenn die ganze Familie eure Lampen bspw. ein- und ausschalten können soll, dann muss eine Bedienoberfläche her, die jedem die Steuerung ganz leicht ermöglicht. Also dann los...

Mein Android Bot Joshua dazu: "Hallo Dr. Falken wollen Sie ein Spiel spielen?"
Okay das war jetzt ein Insider ;-)

Kurz aber die Information zum Thema Sicherheit und Voraussetzungen. Ich habe natürlich auf meinem Raspberry PI eine Firewall installiert. Dort habe ich über eine entsprechende Regel definiert, dass bspw. nur das Tablet mit der IP XXX.XXX.XXX.XXY auf den Pi zugreifen kann, welches ich zur Smart-Home Steuerung an die Wand genagelt habe. Damit das in Zukunft auch störungsfrei läuft muss man seinem Router und ggf. dem Tablet natürlich noch beibringen sich die IP Adresse zu behalten. Das kann man grundsätzlich mit der Einstellung fester IP's machen oder wie bei der FritzBox! indem man diese anweist dem Tablet immer die gleiche IP Adresse zuzuweisen. So kann man die Dynamische IP Verwaltung beibehalten und es läuft dennoch. Ihr müsst auch auf eurem Raspberry noch einen Webserver (Apache2) aufsetzen und entsprechend die Rechte für den Web-Zugriff einstellen. Für diese Dinge findet Ihr im Web ausreichend Anleitungen.

Ok - nachdem also mein Raspberry Pi (Modell 3B+) nun vorbereitet ist und somit der Zugriff so sicher wie möglich ist, weil eben auch nur innerhalb meines Netzwerks zugegriffen werden kann, kann ich mich an das Thema eines Web Interface machen. Richtig! Der Zugriff von unterwegs aus dem Web geht damit nicht! Das ist nochmal ein anderes Thema.

Also mit Hilfe einer html, besser php Website über die man bspw. Lampen ein- und ausschalten kann soll es laufen. Natürlich kann man hier nun auch eine Menge Schnick-Schnack einbauen, wie bspw. Schiebeschalter oder optische Anzeigen über den Schaltzustand. Der Einfachheit halber beginnen wir aber einmal mit einer Website, die ich über die IP des Raspberry in der URL aufrufen kann.

Und so soll es aussehen:

Web Interface
Ich habe also hier meine 4 Relais abgebildet und kann per "Button" bspw. die Lampe an- oder halt ausschalten. Ihr könnt das auf verschiedene Wege machen. So könnt Ihr bspw. eure python Scripts ausführen lassen oder direkt die Shell Befehle absetzen. Ganz wie Ihr meint. Es hängt wohl im Wesentlichen davon ab, welchen Pi mit welchem Betriebssystem von euch eingesetzt wird. Ich beziehe mich hier mal auf die Linux Distribution Debian. Alles was kompliziert ist bedeutet auch letztlich Fehlerquellen erzeugen. Also halten wir es im Beispiel einfach und lassen direkt aus der Website den Shell Befehl ausführen, der das jeweilige Relais schaltet. Nun habe ich mich dazu entschlossen meine bisherigen python Skripte also zur Seite zu legen und mir eine Website mit php-Skript geschrieben. Ihr werden ggf. einige Anleitungen dazu im Web finden, doch lustiger Weise schreiben dort oft Leute Kommentare zu Nutzer-Fragen über Skripte in denen diese rein theoretisch beantwortet werden. Kein Wunder also, dass diese "Skripte" nicht funktionieren. Wenn Ihr also nicht stundenlang Fehler in einem Skript suchen wollt, dann schreibt es gleich selbst. Dazu müsst Ihr in nun mal halt in die Tasten greifen:

Relais direkt über PHP steuern!
OK - oder Ihr kopiert euch halt meins. Und gleich vorweg - bei mir funzt es einwandfrei. Ich übernehme aber keine Haftung wenn es bei euch nicht läuft oder es Probleme gibt. Meine GPIO Pins sind dabei die Pins 2, 3, 4 und 17. Siehe Belegungsplan [hier]. Ich habe eine Lampe, eine LED Lichtleiste, Weihnachtssterne und die Stromversorgung für meinen Android Bot Joshua angeklemmt.

Also hier das Script:

<!-- #pinList = [2, 3, 4, 17] Kopie von https://stskanta.blogspot.com-->
<html>
<head>
<meta charset="UTF-8" />
  <link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body background="RaspPibgrd.png">

<?php
if (isset($_POST['ON1']))
{
system ( "gpio export 2 out");
  
}

if (isset($_POST['OFF1']))
{
system ( "gpio -g write 2 1");

}

if (isset($_POST['ON2']))
{
system ( "gpio export 3 out");
  
}

if (isset($_POST['OFF2']))
{
system ( "gpio -g write 3 1");

}

if (isset($_POST['ON3']))
{
system ( "gpio export 4 out");
  
}

if (isset($_POST['OFF3']))
{
system ( "gpio -g write 4 1");

}

if (isset($_POST['ON4']))
{
system ( "gpio export 17 out");
  
}

if (isset($_POST['OFF4']))
{
system ( "gpio -g write 17 1");

}
?>
<center>
<font size="6" face="verdana" color="#66FF66"> <b>Raspberry Pi GPIO</b></font></color><hr><br>

<form method="post">
  
<button name="ON1"><font size ="5">Lampe AN</font></button>&nbsp;
<&nbsp;>
<button name="OFF1"><font size ="5">Lampe AUS</font></button>&nbsp;
<br/>
<br/>
<br/>
<br/>
<button name="ON2"><font size ="5">Sterne AN</font></button>&nbsp;
<&nbsp;>
<button name="OFF2"><font size ="5">Sterne AUS</font></button>&nbsp;
<br/>
<br/>
<br/>
<br/>
<button name="ON3"><font size ="5">LED--- AN</font></button>&nbsp;
<&nbsp;>
<button name="OFF3"><font size ="5">LED--- AUS</font></button>&nbsp;
<br/>
<br/>
<hr>
<br/>
<button name="ON4"><font size ="5">Laden AN</font></button>&nbsp;
<&nbsp;>
<button name="OFF4"><font size ="5">Laden AUS</font></button>&nbsp;
<br/>
<br/>
<hr>
</form> 


</html>

Natürlich schaltet Ihr andere Dinge, wie bspw. ich Herrnhuter Weihnachtssterne, welcher bei mir kurz  "Sterne" heißen. Und natürlich kommt es auch darauf an welche GPIO Pins Ihr für die Schaltung eurer Relais benutzt habt. Das müsst Ihr entsprechend im Script anpassen! Ist ja klar!

So viel Spaß beim ausprobieren!

Mein Bot meint gerade:"Dr. Falken let's play global terminal nuclear war" - ich glaub ich muss mal nachsehen was er da macht. Also Tschüss bis zum nächsten Beitrag!
 

Beliebte Posts aus diesem Blog

Der Blog ist umgezogen - jedenfalls teilweise