Cron-Beispiele
|
Parameter |
Bedeutung |
|---|---|
|
* * * * * |
täglich jede Minute |
|
*/10 * * * * |
täglich alle 10 Minuten |
|
0 * * * * |
täglich zu Beginn jeder Stunde |
|
0 0 * * * |
täglich um 0:00 Uhr |
|
30 18 * * * |
täglich um 18:30 Uhr |
|
* * 1 * * |
an jedem Monatsersten, den ganzen Tag jede Minute |
Das Programm /var/www/alarm.php steuert alle Abläufe (Listing 15). Es schaltet zunächst alle LEDs aus, um sicherzustellen, dass das LED-Band nicht unnötig lange leuchtet (Zeile 3). Danach fragt es bei der Datenbank an, ob es Zeit zum Wecken ist (Zeilen 6 bis 8). Falls ja, spielt es den Weckton ab (Zeile 10) und startet die in light angegebene Lichtshow (Zeile 11). Den dazugehörigen Datensatz löscht es dann aus der Datenbank (Zeile 13). Eine While-Schleife (ab Zeile 16) fragt ab, ob der Taster gedrückt wurde; zur Sicherheit bricht die Schleife nach 600 Sekunden ab (Zeile 17). Falls der Taster gedrückt wurde, beendet das Skript den Musikplayer (Zeile 22).
Listing 15
<?php
$home="/home/pi/alarm/";
system($home."light/all_off" ); system($home."light/all_off");
$con=new mysqli("localhost","alarm","alarm","alarm");
if(!$con){ die ("Database Connect failed"); }
$sql="select * from alarm where ts < now() order by ts asc";
$result = $con -> query($sql);
$row = $result->fetch_assoc();
if ($row["id"]) {
system('/usr/bin/nohup /usr/bin/ogg123 '.$home."sound/".$row["sound"].'>/dev/null &' );
system('/usr/bin/nohup '.$home."light/".$row["light"].'>/dev/null &' );
exec('/usr/local/bin/gpio mode 0 in');
$sql="delete from alarm where id=".$row["id"];
$con -> query($sql);
$sts=time();
while(!system('/usr/local/bin/gpio read 0',$o)) {
if(time()> ($sts+600)) {
break;
}
}
}
system('/usr/bin/killall ogg123 ');
$con->close();
?>
Die Webseite
Bei der einfach gehaltenen PHP-Anwendung /var/www/alarm.php handelt es sich um das Herzstück der Software-Ausstattung, über das Sie alle für das Wecken nötigen Einstellungen in der MySQL-Datenbank anlegen (Abbildung 4). Die vorgestellte Variante bietet nur die nötigsten Funktionen, um einen Weckalarm anzulegen, und lässt viel Raum zur Weiterentwicklung (Listing 16).
Listing 16
<HTML>
<form action="setalarm.php" method="post">
<p>Weckzeitpunkt<br>YYYY-MM-DD HH:mm:ss<br><input type="text" name="ts"/></p>
<p>Sound<br><input type="text" name="sound"/></p>
<p>Licht<br><input type="text" name="light"/></p>
<p><input type="submit" name="save" value="Speichern" /></p>
</form>
<?php
$con=new mysqli("localhost","alarm","alarm","alarm");
if(isset($_POST['save'])) {
$ts=$_POST['ts'];
$sound=$_POST['sound'];
$light=$_POST['light'];
if(!$con){ die ("Database Connect failed"); }
$sql="insert into alarm (ts,sound,light) values('".$ts."','".$sound."','".$light."')";
if($con->query($sql)===false){echo $con->error;}
}
$sql="select * from alarm order by ts asc";
$result = $con->query($sql);
echo "<table border=1>";
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["ts"]."</td><td>".$row["sound"]."</td><td>".$row["light"]."</td></tr>";
}
echo "</table>";
$con->close();
?>
</HTML>
Mögliche Probleme
Arbeitet der Raspberry Pi in einer anderen Zeitzone als der Rest des Netzwerks, weckt er Sie zu falschen Zeiten – ein gerne übersehener Fehler.
Da das Timing für die Ansteuerung des LED-Bands sehr wichtig ist, sollten Sie darauf achten, dass möglichst wenige Programme laufen, wenn der RasPi es aktiviert: Andernfalls kann es zu Funktionsfehlern kommen, wie etwa zu einer nicht vollständigen Ansteuerung.
Weil alarm.php mit nohup arbeitet, um Software-Komponenten zu terminieren, können sich nicht sauber beendende Programme in der Prozesstabelle hängen bleiben. Arbeitet der RasPi also immer langsamer, sehen Sie am besten mit ps -ef nach, ob hier der Hase im Pfeffer liegt.
Ausblick
Wie immer möchte dieser Artikel die Grundlage für weitere, eigene Ideen schaffen. Die Webanwendung beschränkt sich auf das Nötigste und bietet viel Raum für Verbesserungen.
Eine mögliche Erweiterung wäre etwa eine Schlummerfunktion. Die Taster könnte man gegen geschickt angebrachte Bewegungsmelder austauschen, sodass sich der Wecker abstellt, sobald Sie aus dem Bett aufstehen. Auch das LED-Band bietet mehr Möglichkeiten, als nur einen Sonnenaufgang zu imitieren: Wiederum über Bewegungsmelder gesteuert, könnte es als automatisches Nachtlicht dienen.
Alles in allem handelt es sich beim RasPi-Wecker um ein Projekt mit viel Potenzial für weitere Experimente – wir wünschen dabei viel Spaß.
Infos
- Datenblatt WS2812B: https://www.adafruit.com/datasheets/WS2812B.pdf
- Wiring Pi: http://wiringpi.com
- Scons: http://www.scons.org/
- “Python hangs when trying to start communication channel on Raspberry Pi 2”: https://github.com/jgarff/rpi_ws281x/issues/32
- “Userspace Raspberry Pi PWM Library for WS281X LEDs”: https://github.com/jgarff/rpi_ws281x
- Electronic Experience Store eXs: https://www.ex-store.de






