Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Kleiner Webserver auf dem Raspberry Pi
Heyho,
letztes Wochenende habe ich (erfolgreich) meinen Webserver auf dem Raspberry Pi zum laufen bekommen. Wichtig ist allerdings....das Ding hat noch KEINEN Passwortschutz. Wenn ihr den also ans Internet anbindet (per DynDNS + Router), solltet ihr das Passwort auf dem Pi ändern und am besten genau schauen was ihr da runterladet....nicht das euch irgendeiner ein Virenverseuchtes File auf das Pi hochlädt und ihr es euch auf den PC übertragt.
Wie die Anbindung ans Internet geschieht kann ich auch gerne erklären (falls Interesse besteht).
Das ganze sieht (bisher) so aus:
http://img696.imageshack.us/img696/719/unbenanntzji.png
(http://imageshack.us/photo/my-images/696/unbenanntzji.png/)
--------------------------------------------------------------------------------------
http://img822.imageshack.us/img822/6023/unbenanntqsk.png (http://imageshack.us/photo/my-images/822/unbenanntqsk.png/)
Ich möchte euch hier mal kurz zusammenfassen wie ihr einen Webserver auf euerm Raspberry Pi installiert und einrichtet.
Als Webserver verwende ich "Lighttpd".
Dieser installiert sich wie folgt:
$ sudo mkdir /var/www
$ sudo groupadd www-data
$ sudo adduser www-data www-data
$ sudo usermod -a -G www-data www-data
$ sudo chown -R www-data:www-data /var/www
$ sudo apt-get update
$ sudo apt-get install lighttpd
$ sudo apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php5-fpm php5-cgi php5-cli php5-common php5-suhosin
Wenn diese Zeilen ausgeführt worden sind, müsst ihr noch das Config-File anpassen.
Dafür erstellt ihr einfach mittels Texteditor eine Datei und nennt diese "lighttpd.conf".
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm",
" index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
include_shell "/usr/share/lighttpd/use-ipv6.pl"
dir-listing.encoding = "utf-8"
server.dir-listing = "enable"
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/x-javascript", "text/css", "text/html", "text/plain" )
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
$HTTP["url"] =~ "^/($|/)" {
dir-listing.activate = "disable"
}
$HTTP["url"] =~ "^/owncloud/data/" {
url.access-deny = ("")
}
Diese Datei ladet ihr anschließend mittels FileZilla o.ä. hoch und speichert diese unter "/etc/lighttpd".
Danach müsst ihr mit
$ sudo /etc/init.d/lighttpd force-restart
das Config-File neu laden.
Anschließend sollte euer Raspberry Pi mittels Browser über die normale IP-Adresse des Moduls erreichbar sein. Wenn es nicht funktioniert, probiert
IP-Adresse/index.lighttpd.html
Der Server ist nun bereit um PHP und HTML Seiten zu verarbeiten.
Alle Seiten die ihr erstellt habt, müsst ihr unter "/var/www" speichern. Die Seiten sind anschließend über IP-Adresse/Seitenname + Endung zu erreichen.
Was ich festgestellt habe ist, das PHP im Safe-Mode läuft. Das bereitet z.B. bei dem Dateiupload Probleme. Wenn ihr den Benutzer und die Gruppenzugehörigkeit eurer Uploadseite nicht auf www-data ändert, blockt PHP die Ausführung dieser Seite. Dies soll verhindern das dort ohne weiteres Schadcode etc. ausgeführt werden kann.
Um den Benutzer zu ändern, nutzt ihr folgenden Befehl:
$ chown www-data.www-data /var/www/Dateiname + Endung
Sobald ihr dies gemacht habt, werden auch PHP Files die ihr z.B. mit FileZilla unter dem Namen "xyz" hochgeladen habt, ausgeführt.
Die Uploadseite sieht wie folgt aus. Wichtig ist, dass ihr euch in dem Pfad "/var/www" einen Ordner Namens "Uploads" macht (oder ein anderer Name aber dann müsst ihr das in dem PHP-File anpassen).
Einmal die HTML-Seite:
<html>
<head>
<title>
Raspberry Pi Webserver
</title>
</head>
<h1>
<font color="red">
Raspberry Pi Webserver
</font>
</h1>
<body>
<form action="Uploadpfad.php" method="post" enctype="multipart/form-data">
<p>Wählen Sie eine Textdatei (txt, html usw.) von Ihrem Rechner aus:<br>
<input name="file" type="file" size="50" maxlength="100000" accept="text/*">
</p>
<input type="submit" name="submit" value="Upload" />
</br>
</br>
<a href="/index.html">Zurück</a>
</body>
</html>
Und einmal das dazugehörige PHP-File, welches gleich genannt werden muss wie der rot markierte Bereich:
<html>
<head>
<title>
Raspberry Pi Webserver
</title>
</head>
<h1>
<font color="red">
Raspberry Pi Webserver
</font>
</h1>
<body>
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
move_uploaded_file($_FILES["file"]["tmp_name"],
"/var/www/Uploads/". $_FILES["file"]["name"]);
echo "<p>Upload successful: " . $_FILES["file"]["name"] . "</p>";
}
?>
<a href="/Upload.html">Zurück</a>
</html>
Achja.....das Raspberry Pi Bild von der HTML Seite gibt es hier:
http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Raspberry_Pi_Photo.jpg/300px-Raspberry_Pi_Photo.jpg
Umgang mit der Seite ist ganz einfach.....
Browser öffnen, IP-Adresse/Namen von dem HTML-File eingeben, Datei über "Durchsuchen" auswählen, "Upload" drücken, im Ordner "/var/www/Euer Uploadordner" nachschauen, über den erfolgreichen Upload freuen ;)
Kleiner Nachtrag:
Habe mal das dafür notwendige Config-File eingefügt.
Für alle die gerne eine Cloud auf ihrem Raspberry laufen lassen möchten, ist ein Beitrag weiter unten eine Seite gelinkt wo die Installation sehr gut beschrieben wird.
Anschließend muss das Config-File für lighttpd am Ende noch mit
$HTTP["url"] =~ "^/owncloud/data/" {
url.access-deny = ("")
}
erweitert werden. Dies sorgt dafür das man nicht direkt auf den Ordner zugreifen kann wo die Daten liegen.
Danke nochmal an Schumi, DanielSan und TheDarkRose für die Hinweise!
-schumi-
12.07.2012, 12:35
Wie währs mit OwnCloud?
Ist OpenSource
Sieht super aus
Mehrbenutzerverwaltung (Auch mit Sharen von Files, Files öffentlich zugänglich machen etc)
Dateien Online bearbeiten
Kalender
Kontakte
Bildergalerie
Anbindung an Dateimanager auf Client problemlos möglich
Demo: http://demo.owncloud.org/
Homepage: http://owncloud.org/
Viele Grüße
-schumi-
DanielSan
12.07.2012, 13:52
Sehr guter Beitrag!
Damit kann ich auf jeden Fall was anfangen. Lighttpd kannte ich noch garnicht ich hab bis jetzt meine Webserver immer mit Apache aufgesetzt.
Wie würdest du eine Datenbank (MySQL o.ä.) realisieren?
Owncloud kannte ich auch noch nicht! Das kann ich sehr gut für ein aktuelles Projekt von mir gebrauchen.
Gruß Daniel
TheDarkRose
12.07.2012, 15:41
Würde auf dem Pi eher auf sqlite zurückgreifen!
Sehr guter Beitrag!
Damit kann ich auf jeden Fall was anfangen. Lighttpd kannte ich noch garnicht ich hab bis jetzt meine Webserver immer mit Apache aufgesetzt.
Wie würdest du eine Datenbank (MySQL o.ä.) realisieren?
Owncloud kannte ich auch noch nicht! Das kann ich sehr gut für ein aktuelles Projekt von mir gebrauchen.
Gruß Daniel
Own-Cloud kann ich auch mal ausprobieren ;)
Bei LightTPD kannst du auch MySQL realisieren und auch andere Sachen.
Ich meine ich hätte mal gelesen das Apache bisl zu für das Raspberry Resourcenfressend ist.
Aber so wie ich das verstehe ist OwnCloud wirklich NUR eine Cloud. Der Vorteil an LightTPD ist halt auch das du das Raspberry Pi via Web steuern kannst (über PHP z.B.)
TheDarkRose
13.07.2012, 18:24
Alsoooo: lighttp (das TPD schreibt man nicht groß!) ist ein reiner Webserver. Dieser wird benötigt um eben auch owncloud laufen lassen zu können. Genauso wie der Apache wird auch MySQL zu ressourcenfressend sein. Aber da gibts ja Abhilfe: sqlite, welches auch von owncloud unterstützt wird. Wenn man Dateien auf dem Pi ablegen möchte, oder einen stromsparenden Kalendar, ist Owncloud das richtige. Man kann ja nebenbei immer noch eigene PHP-Sachen laufen lassen um I/Os zu steuern.
Alsoooo: lighttp (das TPD schreibt man nicht groß!) ist ein reiner Webserver. Dieser wird benötigt um eben auch owncloud laufen lassen zu können. Genauso wie der Apache wird auch MySQL zu ressourcenfressend sein. Aber da gibts ja Abhilfe: sqlite, welches auch von owncloud unterstützt wird. Wenn man Dateien auf dem Pi ablegen möchte, oder einen stromsparenden Kalendar, ist Owncloud das richtige. Man kann ja nebenbei immer noch eigene PHP-Sachen laufen lassen um I/Os zu steuern.
Ah danke für das richtig stellen :)
TheDarkRose
13.07.2012, 19:02
Kein Problem, Server und so Zeugs, damit verdien ich mein Geld ;)
Hätte ich meinen Pi schon, wär ich hier eh noch aktiver ^^
Kein Problem, Server und so Zeugs, damit verdien ich mein Geld ;)
Hätte ich meinen Pi schon, wär ich hier eh noch aktiver ^^
Ja wie man vielleicht merkt bin ich noch absoluter Linux-Neuling :D
Ich hab davon leider noch gar keinen peil :)
DanielSan
13.07.2012, 20:38
Also ich habe gerade mal auf mein Kubuntu 12.04 Lighttpd, php5, sqlite und owncloud installiert. Owncloud ist echt schick!
Als kleine ergänzung für Lighttpd:
Directory listing unterbinden:
$HTTP["url"] =~ "^/($|/)" {
dir-listing.activate = "disable"
}
Verzeichniss sperren: (Lighttpd kennt kein .htaccess)
$HTTP["url"] =~ "^/owncloud/data/" {
url.access-deny = ("")
}
Die beiden Sachen muss man in die /etc/lighttpd/lighttpd.conf schreiben. Einfach ganz am ende anhängen. Das sind zwei notwendige Schritte wenn man Owncloud verwenden möchte.
Also ich habe gerade mal auf mein Kubuntu 12.04 Lighttpd, php5, sqlite und owncloud installiert. Owncloud ist echt schick!
Als kleine ergänzung für Lighttpd:
Directory listing unterbinden:
Verzeichniss sperren: (Lighttpd kennt kein .htaccess)
Die beiden Sachen muss man in die /etc/lighttpd/lighttpd.conf schreiben. Einfach ganz am ende anhängen. Das sind zwei notwendige Schritte wenn man Owncloud verwenden möchte.
Was bewirken die den?
TheDarkRose
13.07.2012, 20:55
Directory Listing bedeutet, wenn keine index.htm/index.php vorhanden ist, wird vom Webserver der Inhalt des Ordners angezeigt.
Den Zugriff auf das Dataverzeichnis von owncloud sollte verhindert werden. Sonst wird der Zugriffsschutz von Owncloud ausgehebelt. Am Besten legt man das Datadir überhaupt außerhalb des Document Roots
Ah ok.
Sieht ja doch recht gut aus mit der OwnCloud :)
Dank dir nochmal Schumi für den Hinweis!
Ist denke ich mal eine schöne alternative zu anderen Clouds ;)
Edit:
Kann man für die OwnCloud auch eine eigene Festplatte als speicher nehmen?
Ich würde die Daten nämlich gerne auf einem Speichermedium speichern welches nicht gleichzeitig der Speicher des Betriebssystems ist :D
Laut Internet kann man an das RPi beliebige USB-Platten anschließen, nur die Stromversorgung muss ggf. extern realisiert werden. Würde mich aber stark wundern, wenn man bei owncloud den Speicherort nicht beliebig wählen kann.
DanielSan
13.07.2012, 22:09
Ja das geht! Ich weiss zwar jetzt nicht konkret wie aber ich hab das vorhin irgendwo gelesen. Muss ich morgen mal raussuchen.
TheDarkRose
13.07.2012, 22:23
Bei der Installation von Owncloud kann man das Datadir angeben. Einfach ein anderes Verzeichnes angeben, auf das lighttp (www-data:www-data) Schreibrechte hat.
-schumi-
13.07.2012, 23:34
Man könnte auch einfach die externe HDD oder nen USBStick oder sonst was nach /var/www mounten. Viele Wege führen nach Rom :-D
(Ich hab das mal gemacht: OwnCloud auf USBStick und die HDD des Rechner automatisch nach 10Min inaktivität abschalten. Hatte gehofft, dass dann alles was das OS braucht im Ram ist und da ja die Webseite auf dem Stick liegt, die HDD nicht mehr anfährt. Hat aber leider nicht funktioniert..)
Sodele auch mein erster Entwurf für die I/O Steuerung ist fertig.....zwar noch nicht ganz so schön und man muss viel manuell machen (und aus irgendeinem Grund kann ich die I/Os noch nicht setzen)......ABER dafür das ich von PHP keine Ahnung habe finde ich es schön :D :D :D :D :D
http://kampi.homedns.org/IO.php
BastelWastel
18.07.2012, 20:12
Soll ich mal über deinen Code schauen?
Hey,
ja das wäre nett.
Der Code ist der hier:
<html>
<head>
<title>
Raspberry Pi Webserver
</title>
</head>
<h1>
<font color="red">
Raspberry Pi Webserver
</font>
</h1>
<body>
<form action="IO.php" method ="post">
<input type="Checkbox" name="gpio0" value="0">GPIO 0<br>
<input type="Checkbox" name="gpio1" value="1">GPIO 1<br>
<input type="Checkbox" name="gpio4" value="4">GPIO 4<br>
<input type="Checkbox" name="gpio7" value="7">GPIO 7<br>
<input type="Checkbox" name="gpio8" value="8">GPIO 8<br>
<input type="Checkbox" name="gpio9" value="9">GPIO 9<br>
<input type="Checkbox" name="gpio10" value="10">GPIO 10<br>
<input type="Checkbox" name="gpio11" value="11">GPIO 11<br>
<input type="Checkbox" name="gpio14" value="14">GPIO 14<br>
<input type="Checkbox" name="gpio15" value="15">GPIO 15<br>
<input type="Checkbox" name="gpio17" value="17">GPIO 17<br>
<input type="Checkbox" name="gpio18" value="18">GPIO 18<br>
<input type="Checkbox" name="gpio21" value="21">GPIO 21<br>
<input type="Checkbox" name="gpio22" value="22">GPIO 22<br>
<input type="Checkbox" name="gpio23" value="23">GPIO 23<br>
<input type="Checkbox" name="gpio24" value="24">GPIO 24<br>
<input type="Checkbox" name="gpio25" value="25">GPIO 25<br>
<p>
<input type="Submit" name="IO abfragen" value="I/O Status">
<input type="Submit" name="IO setzen" value="I/O setzen">
</form>
<?php
if (isset($_REQUEST['IO abfragen']));
{
if (isset($_POST["gpio0"]))
{
$val_gpio0 = trim(@shell_exec("cat /sys/class/gpio/gpio0/value"));
$dir_gpio0 = trim(@shell_exec("cat /sys/class/gpio/gpio0/direction"));
echo "<u>GPIO 0: </u><br/>";
if ($val_gpio0 == 0)
{
echo('<img src="LED_off.png" alt="LED_off_GPIO0">');
}
elseif ($val_gpio0 == 1)
{
echo('<img src="LED_on.png" alt="LED_on_GPIO0">');
}
echo "<br/>";
echo "Value: ", $val_gpio0;
echo "<br/>";
echo "Direction: ", $dir_gpio0;
echo "<br/>";
}
if (isset($_POST["gpio1"]))
{
$val_gpio1 = trim(@shell_exec("cat /sys/class/gpio/gpio1/value"));
$dir_gpio1 = trim(@shell_exec("cat /sys/class/gpio/gpio1/direction"));
echo "<u>GPIO 1: </u><br/>";
if ($val_gpio1 == 0)
{
echo('<img src="LED_off.png" alt="LED_off_GPIO0">');
}
elseif ($val_gpio1 == 1)
{
echo('<img src="LED_on.png" alt="LED_on_GPIO0">');
}
echo "<br/>";
echo "Value: ", $val_gpio1;
echo "<br/>";
echo "Direction: ", $dir_gpio1;
echo "<br/>";
}
if (isset($_POST["gpio4"]))
{
$val_gpio4 = trim(@shell_exec("cat /sys/class/gpio/gpio4/value"));
$dir_gpio4 = trim(@shell_exec("cat /sys/class/gpio/gpio4/direction"));
echo "<u>GPIO 4: </u><br/>";
if ($val_gpio4 == 0)
{
echo('<img src="LED_off.png" alt="LED_off_GPIO0">');
}
elseif ($val_gpio4 == 1)
{
echo('<img src="LED_on.png" alt="LED_on_GPIO0">');
}
echo "<br/>";
echo "Value: ", $val_gpio4;
echo "<br/>";
echo "Direction: ", $dir_gpio4;
echo "<br/>";
}
}
if (isset($_REQUEST['IO setzen']));
{
if (isset($_POST["gpio0"]))
{
shell_exec("echo \"1\" > /sys/class/gpio/gpio0/value");
}
}
?>
</body>
</html>
Und diese Zeile macht Probleme:
if (isset($_REQUEST['IO setzen']));
{
if (isset($_POST["gpio0"]))
{
shell_exec("echo \"1\" > /sys/class/gpio/gpio0/value");
}
}
Shell_exec funktioniert....verwende es ja oben. Aber wieso geht die LED dann nicht an >.<?
BastelWastel
18.07.2012, 20:44
Ahjaja..
zum einen würde ich den php-code vor die Form setzen, dann kannst die die Checkboxen direkt entsprechend dem aktuellen Hardwarestatus darstellen..
Du hast 2 submit Buttons, ich bin mir gerade nicht wirklich sicher ob deren name mit im post ist, selbst wenn, würde ich in name-Feldern keine Leerzeichen oder '_', höchstens '-' verwenden (Alte Angewohnheit, glaub ich hab mal gelesen dass CSS mit underscores n problem hatte).
<input type="Submit" name="IO abfragen" value="I/O Status">
<input type="Submit" name="IO setzen" value="I/O setzen">
Ausserdem braucht es nach dem if kein ';'
Mach mal...
if (isset($_REQUEST['IO setzen'])) {
echo "IO setzen = ok";
}
if (isset($_REQUEST['IO abfragen'])) {
echo "IO abfragen = ok";
}
..um zu sehen ob die if-Bedinung überhaupt ausgeführt wird..und falls es nicht klappt versuch es mit geänderten name Feldern z.B. 'io-setzen'
Du verwendest kein WirngPi? Hat dein www-data user Rechte auf den GPIO files?
Erstmal danke für die Tipps.
Das IO setzen wird richtig ausgegeben. Aber die LED leuchtet immer noch nicht :(
Kann ich die Checkboxen nicht so wie die jetzt im Programm sind setzen (also je nach Pinstatus).
Weil den PHP-Teil vor die Form setzen gefällt mir nicht so gut, weil dann die Checkboxen immer hoch und runter rutschen ;)
BastelWastel
18.07.2012, 21:02
Erstmal danke für die Tipps.
Das IO setzen wird richtig ausgegeben. Aber die LED leuchtet immer noch nicht :(
Sind die GPIOs als Ausgang definiert? Die GPIO Konfiguration ist nicht remanent..nach nem powercycle sind die wieder Eingänge..
Kann ich die Checkboxen nicht so wie die jetzt im Programm sind setzen (also je nach Pinstatus).
Via Javascript vllt..aber ich lese lieber zuerst den Hardware Status und schreibe dem entsprechend einfach 'checked' mit in den input-tag.
Weil den PHP-Teil vor die Form setzen gefällt mir nicht so gut, weil dann die Checkboxen immer hoch und runter rutschen ;)
Was? Wie? :D
Was? Wie? :D
Egal ^.^
Ist ein optischer Grund ^.^
Ja die GPIOs sind als Ausgang definiert.
Wenn ich mittels PuTTY "echo "1" > /sys/class/gpio/gpio0/value" schreibe geht die LED auch an.
Das was im Programm steht sollte ja dasselbe in PHP sein.
BastelWastel
18.07.2012, 21:07
Mh..mach mal
su www-data
und schau ob es dann auch geht..
@shell_exec() greift auf die shell mit dem selben user zu mit dem lighhtpd läuft.
BastelWastel
18.07.2012, 21:17
Siehste mal gugg, da ham wir den Hund schon ;)
Darum nehm ich da einfach WiringPi (bin leider nicht fit mit unix usern und gruppen :( )
Ok Problem gelöst.
Tipp kam von nem Kollegen.
Um auf diese virtuellen Dateien für die Ports zugreifen zu dürfen braucht man root Rechte.
Lighttpd hat aber keine root-Rechte und dementsprechend muss man die Zugriffsrechte der Datei /sys/class/gpio0/value und /direction ändern.
BastelWastel
18.07.2012, 21:28
Ja, nur mußt du das nach jedem Systemstart erneut machen.
Wenn du das so beibehalten willst lohnt sich vllt ein shellscript mit autostart beim booten.
Btw..löblich dass du das Standardpasswort geändert hast ;)
Ja, nur mußt du das nach jedem Systemstart erneut machen.
Wenn du das so beibehalten willst lohnt sich vllt ein shellscript mit autostart beim booten.
Ich bastel gerade an nem Button wo man die I/Os aktivieren kann.
Aber ein Shellscript ist eigtl noch ne Nummer besser.....
Wie mache ich den sowas?
PS:
Ja wo ich das Pi über DynDns ans Internet angebunden habe, dachte ich es wäre sinnvoller das Standardpasswort zu ändern :P
BastelWastel
18.07.2012, 21:45
Mach nen neuen file mit nano.. 'filenamexyz.sh'
In der ersten Zeile befindet sich der shebang, ein spezieller Kommentar der angibt mit welchen Programm das Script ausgeführt wird..
#!/bin/bash
Und danach schreibst du deine shell Befehle, sprich zuerst den export für deine GPIOs und dann wie von deinem Kollegen beschrieben für jeden GPIO die Zugriffsrechte ändern.
Das Sript ausführbar machen
chmod +x filenamexyz.sh
Ausführen kannst du das script via
./filenamexyz.sh
Angaben von nem Linuxanfänger aus dem Kopf..also..keine Garantie auf nix ;)
Wie du das ganze in nen autostart bekommst is die große Preisfrage..google wird dir helfen..
Wenns klappt kannst du's direkt posten, dann steig ich von WiringPi wieder um.
Mach nen neuen file mit nano.. 'filenamexyz.sh'
In der ersten Zeile befindet sich der shebang, ein spezieller Kommentar der angibt mit welchen Programm das Script ausgeführt wird..
#!/bin/bash
Und danach schreibst du deine shell Befehle, sprich zuerst den export für deine GPIOs und dann wie von deinem Kollegen beschrieben für jeden GPIO die Zugriffsrechte ändern.
Das Sript ausführbar machen
chmod +x filenamexyz.sh
Ausführen kannst du das script via
./filenamexyz.sh
Angaben von nem Linuxanfänger aus dem Kopf..also..keine Garantie auf nix ;)
Wie du das ganze in nen autostart bekommst is die große Preisfrage..google wird dir helfen..
Wenns klappt kannst du's direkt posten, dann steig ich von WiringPi wieder um.
Danke aber ich habs gerade schon gefunden ^.^
Ja ich poste es wenn es funktioniert.
Sodele
mein Script sieht so aus:
#!/bin/sh
echo "0" > /sys/class/gpio/export
echo "1" > /sys/class/gpio/export
echo "4" > /sys/class/gpio/export
echo "7" > /sys/class/gpio/export
echo "8" > /sys/class/gpio/export
echo "9" > /sys/class/gpio/export
echo "10" > /sys/class/gpio/export
echo "11" > /sys/class/gpio/export
echo "14" > /sys/class/gpio/export
echo "15" > /sys/class/gpio/export
echo "17" > /sys/class/gpio/export
echo "18" > /sys/class/gpio/export
echo "21" > /sys/class/gpio/export
echo "22" > /sys/class/gpio/export
echo "23" > /sys/class/gpio/export
echo "24" > /sys/class/gpio/export
echo "25" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio0/direction
echo "out" > /sys/class/gpio/gpio1/direction
echo "out" > /sys/class/gpio/gpio4/direction
echo "out" > /sys/class/gpio/gpio7/direction
echo "out" > /sys/class/gpio/gpio8/direction
echo "out" > /sys/class/gpio/gpio9/direction
echo "out" > /sys/class/gpio/gpio10/direction
echo "out" > /sys/class/gpio/gpio11/direction
echo "out" > /sys/class/gpio/gpio14/direction
echo "out" > /sys/class/gpio/gpio15/direction
echo "out" > /sys/class/gpio/gpio17/direction
echo "out" > /sys/class/gpio/gpio18/direction
echo "out" > /sys/class/gpio/gpio21/direction
echo "out" > /sys/class/gpio/gpio22/direction
echo "out" > /sys/class/gpio/gpio23/direction
echo "out" > /sys/class/gpio/gpio24/direction
echo "out" > /sys/class/gpio/gpio25/direction
chmod 666 /sys/class/gpio/gpio0/value
chmod 666 /sys/class/gpio/gpio1/value
chmod 666 /sys/class/gpio/gpio4/value
chmod 666 /sys/class/gpio/gpio7/value
chmod 666 /sys/class/gpio/gpio8/value
chmod 666 /sys/class/gpio/gpio9/value
chmod 666 /sys/class/gpio/gpio10/value
chmod 666 /sys/class/gpio/gpio11/value
chmod 666 /sys/class/gpio/gpio14/value
chmod 666 /sys/class/gpio/gpio15/value
chmod 666 /sys/class/gpio/gpio17/value
chmod 666 /sys/class/gpio/gpio18/value
chmod 666 /sys/class/gpio/gpio21/value
chmod 666 /sys/class/gpio/gpio22/value
chmod 666 /sys/class/gpio/gpio23/value
chmod 666 /sys/class/gpio/gpio24/value
chmod 666 /sys/class/gpio/gpio25/value
chmod 666 /sys/class/gpio/gpio0/direction
chmod 666 /sys/class/gpio/gpio1/direction
chmod 666 /sys/class/gpio/gpio4/direction
chmod 666 /sys/class/gpio/gpio7/direction
chmod 666 /sys/class/gpio/gpio8/direction
chmod 666 /sys/class/gpio/gpio9/direction
chmod 666 /sys/class/gpio/gpio10/direction
chmod 666 /sys/class/gpio/gpio11/direction
chmod 666 /sys/class/gpio/gpio14/direction
chmod 666 /sys/class/gpio/gpio15/direction
chmod 666 /sys/class/gpio/gpio17/direction
chmod 666 /sys/class/gpio/gpio18/direction
chmod 666 /sys/class/gpio/gpio21/direction
chmod 666 /sys/class/gpio/gpio22/direction
chmod 666 /sys/class/gpio/gpio23/direction
chmod 666 /sys/class/gpio/gpio24/direction
chmod 666 /sys/class/gpio/gpio25/direction
und dann fügst du einfach unter
/etc/init.d/rc.local
am Ende ./Pfad + Name deines Shellscripts ein.
BastelWastel
18.07.2012, 23:33
Ah, cool..danke :)
Werd ich gleich mal testen
BastelWastel
19.07.2012, 00:13
Klappt 1a, danke..
Sollen wir das Script vllt noch mit ins wiki nudeln, unter GPIO ansteuerung?
Das hatte ich noch vor ja. Aber ich will dich nicht aufhalten ;)
BastelWastel
19.07.2012, 00:24
Mach ruhig, ich bau erst mal mein PHP Script entsprechend um. ^_^
Ok ^.^
Am Wochenende schreibe ich mal ein paar Zeilen dazu.
Aber mal ne theoretische Frage.....
Wenn ich ein I²C Device auslesen will z.B. eine RTC kann ich ja ein C-Programm schreiben, welches die Kommunikation mit der RTC über I²C bewerkstelligt.
Die Uhrzeit kann ich dann ja mittels "Print"-Funktion in der Shell ausgeben lassen.
Nun kann ich in PHP ja auch über Shell_exec einen Befehl in der Shell ausführen lassen, sprich ich kann mittels PHP mein Programm zum auslesen der RTC starten und das was normalerweise per "Print" auf der Shell ausgegeben wird in eine Variable speichern und diese Variable dann mittels PHP im Browser anzeigen lassen.
Sehe ich das so richtig, dass das theoretisch funktionieren würde?
Oder ist da irgendwo ein Haken von dem ich gerade nichts weiß?
BastelWastel
19.07.2012, 09:20
Wenn dein www-data das Recht fuer die Datei bekommt sollte das so klappen.
Ja von den Rechten erstmal abgesehen :)
Die RTC ist vielleicht ein doofes Beispiel.....wobei man so die Uhr im Raspberry Pi wenigstens mal brauchbar machen könnte ^.^
Aber das geht notfalls auch per Web......PTB z.B.
Ich dachte da eigentlich erstmal vielmehr an meinen CAN-Bus, sprich MCP2515 auslesen und die Werte via Web ausgeben.
Ist zwar kein I²C sondern SPI aber da tut sich ja nicht viel bei.
Das Prinzip sollte ja übertragbar sein :D
Mal schauen ob ich am Wochenende mal Lust habe das auszuprobieren oder ob ich was anderes finde ^.^
So da ich nun mein Padfone habe suche ich ein gutes SSH Programm.
ConnectBot habe ich schon ausprobiert aber da funktioniert die Hardwaretastatur offenbar nicht richtig. Er erkennt Shift + eine Taste nicht und Strg + nen Buchstaben funktioniert auch noch.
In normalen Textverarbeitungsprogrammen funtioniert es problemlos nur leider nicht bei ConnectBot.
erik_wolfram
08.10.2013, 22:13
Hallo,
ich habe die Projekte auf deiner Homepage mit Spannung verfolgt und wollte jetzt, da ich besitzer eines Raspberries bin, auch einiges probieren. Leider scheitere ich bei der Anbindung zum Internet. Es wäre schön, wenn du hierzu mal etwas öffentlich schreiben könntest wenn es möglich ist.
Mein Problem sieht wie folgt aus:
Ich kann im Netztwerk auf das Raspberry zugreifen, die Anwahl der HTML-Seite funktioniert via der statischen IP "192.168.178.103" problemlos; auch der Upload klappt.
Aber ich schaffe es nicht, von Außen, d.h durch den Router auf das Raspberry zuzugreifen - es scheint so, als ob das Raspberry auf diese Anfragen nicht reagiert.
Die Verbindung durch den Router scheint zu funktionieren...
Wie bin ich vorgegangen:
Das Raspberry hat eine statische IP und ist direkt Kabelgebunden mit dem Router verbunden.
Im Router (O2 classic Router) ist eine direkte Portweiterleitung (NAT) über den Port 80 zum Raspberry eingerichtet.
Die Firewall ist für diese Route in beide Richtungen komplett freigegeben und wurde testweise komplett deaktiviert.
Ich habe mit die jeweils aktuelle Addresse des Routers aus dem Internet gesucht und angewendet - der Router war bei entsprechender Port-Anwahl über das Internet erreichbar.
Testprogramme zur Portanalyse zeigen mir, dass der Port 80 offen ist.
Laut der Config-Datei verwendet das Raspberry auch diesen Port 80.
Laut Internet-Explorer antwortet die Gegegenstelle (Raspberry) nicht. Firefox meldet mir, dass die Seite nicht erreichbar ist.
Wenn ich die Router-Addresse (mit der Weiterleitung zum Raspberry) anpinge bekomme ich ein gültiges Signal.
Wo könnte nun der Fehler liegen? Ich habe mehrere Tutoriale zur Einrichtung der Internetanbindung angeguckt und Nachvollzogen - leider ohne Erfolg.
Was könnte ich vergessen haben?
Gruß Erik
Hey,
wenn du von außen, sprich von einem anderen Netzwerk auf deinen Router zugreifen willst, brauchst du eine Domain (z.B. von DynDNS) und du musst den Router dem entsprechend konfigurieren. Diese Domain wird dann mit der IP-Adresse deiner Internetverbindung nach außen gekoppelt und wenn du dann die Domain aufrufst, wirst du zum Router weiter geleitet, der dich zu dem Raspberry weiter leitet.
erik_wolfram
09.10.2013, 18:12
Danke für die Antwort!
Es tut mir leid, dass ich fragen musste, aber der Fehler hat sich gefunden. Der Router hat sich nach dem Neustart (zum Übernehmen der Einstellungen) aufgehängt und die Weiterleitung unterbunden. Als er heute morgen komplett rumgesponnen hat habe ich ihn nochmals resetet und alles ging problemlos!
Die Öffentliche IP die einem vom DNS-Server vergeben wurde habe ich entweder über IP-Testseiten oder im Routermenü ermittelt. Diese wechselt zwar nach jedem Routerneustart, aber zum rumspielen ist sie erstmal ausreichen.
Dein Tutorial und den Nutzen finde ich so praktisch, dass ich mir vermutlich einen kleinen Server aufsetzten werde. Einfacher und günstiger geht es ja kaum.
Dafür werde ich mir aber sicher eine Domain beschaffen - mal gucken wo...
Aber auf jeden Fall muss ich deine Homepage loben - sehr schön und sehr nützlich :)
Hey,
klasse das es nun doch funktioniert und danke für das Lob :)
Freue mich immer über Kritik zu der Page und/oder den Artikeln!
erik_wolfram
02.12.2013, 11:07
Hallo,
mittlerweile habe ich das Projekt ein bisschen weiter gebracht.
Nun ist am Raspberry ein Temperatursensor angebracht (Plug&Play - supereinfach) und ein Vodafon UMTS-STick installiert so das Raspberry E-Mails mit den aktuellen Temperaturen verschickt. (Das ganze ist ein Projekt für einen Freund der eine Temperaturüberwachung im Garten benötigt.)
Der Stick läuft unter sakis3g seid ein paar Tagen. Nun das Problem: er stellt sich plötzlich quer und baut keine Verbindung auf so, dass keine E-Mails mehr verschickt werden können. Bevor ich da nun morgen hintucker wollte ich mir einen Kopf machen wo der Fehler liegt....
Ich hatte schon festgestellt, dass der Stick die VErbindung nach mehreren Stunden unterbricht. Aus diesem Grund habe ich vor der Übertragung eine zwangsweise neu-verbindung eingefügt. Das hat ja auch ein paar Tage funktioniert...
Hat hier vielleicht jemand eine Idee oder schon ähnliche Probleme gehabt?
Sobald das ganze fertig ist, stelle ich es gerne zur Verfügung. (Script, Aufbau, etc)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.