Inspiriert von einem gestrigen Thread habe ich zugegebenermaßen zuerst Google bemüht um eine Vorlage zu finden, aber da ich nichts vernünftiges gefunden habe, setzte ich mich kurzerhand hin und programmierte selbst einen Webbased Wecker
Auf dem Raspberry Pi wird ein Webserver (apache2, nginx o.ä.) benötigt. Es bedarf nur eine einzige PHP Datei für diesen Wecker.
Diese Datei wird über den Browser (Desktop oder Smartphone) aufgerufen. Danach kann eine Weckzeit bestimmt werden. Die Weckzeiten werden in eine Textdatei gespeichert. Es können quasi unendlich viele Wecker erstellt werden.
Die selbe PHP Datei trägt man auch entsprechend in Crontab ein sodass es jede Minute ausgeführt wird.. Die Textdatei wird also jede Minute verarbeitet und prüft ob ein Alarm anliegt. Wurde ein Alarm ausgelöst wird dieser aus der Textdatei gelöscht.
Das PHP Script funktioniert soweit schon, es muss nur noch die jeweilige Aktion eingefügt werden - also das was passieren soll wenn ein Alarm ansteht: Zeile 30 ... In dem Abschnitt wo das Kommentar // ALART! :) steht. Ich wollte eigentlich noch einbauen zwischen Funksteckdose, MP3 oder Internetradio wählen zu können... Aktuell kann auch nur eine Zeit für heute oder morgen genutzt werden. Ein Datum ist aber bereits vorbereitet (um auch Weckzeiten weiter in der Zukunft einstellen zu können) Oben rechts wird auch die aktuelle Uhrzeit angezeigt (Javascript, läuft also Clientseitig und belastet somit nicht den Pi) In den beiden Eingabefeldern für Stunde und Minute sind am rechten Rand Richtungsgeber um die Zahl hoch oder runter zu stellen. Für Stunde ist das Maximum 23 und für Minute 59. Man muss zumindest Stunde angeben, wird Minute nicht angegeben verwendet das Script 00. Stay Tune.
Installation:
/var/www/html/wecker/index.php
sudo crontab -e
<?php
/*
Version: 0.2
Creator: meigrafd
Copyright (C) 2016 by meiraspi@gmail.com published under the MIT License
*/
$WeckZeitenDatei = "/tmp/.weckerzeiten";
//------------------------------------------------------
error_reporting(E_ALL);
ini_set('track_errors', 1);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
//------------------------------------------------------
// Alarm cronbot
if (isset($argv[1]) AND (!empty($argv[1]) AND $argv[1] == "cron")) {
if (!file_exists($WeckZeitenDatei)) { exit(); }
$HOUR = date("H"); $MINUTE = date("i"); $DAY = date("d"); $MONTH = date("m");
$AlarmData = file($WeckZeitenDatei);
foreach($AlarmData AS $line_num => $line) {
if ($line == "") { continue; }
// Format: 23:59 31.12
$lineData = str_replace(PHP_EOL, '', explode(" ", $line));
$Time = explode(":", $lineData[0]);
$Date = explode(".", $lineData[1]);
if ($Date[0] == $DAY AND $Date[1] == $MONTH) {
if ($Time[0] == $HOUR AND $Time[1] == $MINUTE) {
// ALART! :)
echo "Alarm!\n";
// Delete Alert.
deleteLine($WeckZeitenDatei, $line_num);
}
}
}
exit();
}
//------------------------------------------------------
function deleteLine($file, $lineNum) {
$NewLines = array();
$lines = file($file);
foreach($lines AS $lnum => $line) {
if ($lnum != $lineNum) {
$NewLines[] = $line;
}
}
$handle = fopen($file, "w");
//flock($handle, LOCK_EX);
foreach($NewLines as $line) { fwrite($handle, $line+"\n"); }
//flock($handle, LOCK_UN);
fclose($handle);
}
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="de">
<head>
<title>Wecker</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="DISALLOW">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<style type="text/css">
body {
background-color: #000000;
color: white;
}
.wrapButtons {
text-align: center;
font-size: 60px;
font-family: "Verdana";
}
.Button1 {
width: 760px;
height: 200px;
color: black;
background-color: #FAFAFA;
border-radius: 80px;
font-size: 45px;
}
.Button2 {
width: 300px;
height: 150px;
color: black;
background-color: #FAFAFA;
border-radius: 80px;
font-size: 45px;
}
.Button3 {
width: 110px;
height: 110px;
color: black;
background-color: #FAFAFA;
border-radius: 20px;
font-size: 45px;
}
input[type="number"] {
font-size: 100%;
text-align: center;
}
.currentClock {
font-size: 25px;
font-weight: 600;
padding-right: 15px;
}
.newAlarm {
font-size: 45px;
text-align: center;
}
.currentAlarms {
font-size: 30px;
text-align: center;
}
</style>
<script type="text/javascript">
function wr_Clock() {
time = new Date();
time_hour = time.getHours();
time_min = time.getMinutes();
time_sec = time.getSeconds();
time_wr = ((time_hour<10)?"0":"") + time_hour;
time_wr += ":";
time_wr += ((time_min<10)?"0":"") + time_min;
time_wr += ":";
time_wr += ((time_sec<10)?"0":"") + time_sec;
document.getElementById("currentClock").innerHTML = time_wr;
}
setInterval(function(){ wr_Clock() }, 1000);
</script>
</head>
<body onLoad="wr_Clock();">
<nobr>
<div style="float:right; margin-top:-4px;">
<span id="currentClock" class="currentClock"></span>
</div>
<br/>
<hr noshade size="5">
<p class="newAlarm"><span><strong>Neue Weckzeit einstellen:</strong></span></p>
<?php
// Schreibe neue Weckzeit in Datei
if (isset($_GET['hour'])) {
$HOUR = sprintf("%02d", $_GET['hour']);
if (!isset($_GET['min'])) { $MINUTE = 00; } else { $MINUTE = sprintf("%02d", $_GET['min']); }
if (!isset($_GET['day'])) { $DAY = date('d'); } else { $DAY = sprintf("%02d", $_GET['day']); }
if (!isset($_GET['mon'])) { $MONTH = date('m'); } else { $MONTH = sprintf("%02d", $_GET['mon']); }
file_put_contents($WeckZeitenDatei, "$HOUR:$MINUTE $DAY.$MONTH\n", FILE_APPEND);
}
?>
<!-- Wecker Erstellen -->
<form method="GET" action="">
<div class="wrapButtons">
<input type="number" min="0" max="23" class="Button3" name="hour" required="required"> : <input type="number" min="0" max="59" class="Button3" name="min">
</div>
<br/><br/><br/>
<div class="wrapButtons">
<input type="Submit" class="Button1" name="" value="Wecker stellen">
</div>
</form>
<br/><br/>
<hr noshade size="5">
<br/><br/>
<!-- Alle Wecker beenden -->
<?php
if (isset($_POST['ALL'])) {
// Alle WeckZeiten loeschen
@unlink($WeckZeitenDatei);
}
?>
<form method="POST" action="">
<input type="hidden" name="ALL">
<div class="wrapButtons">
<input type="submit" class="Button1" value="Alle Wecker ausschalten">
</div>
</form>
<!-- Aktuelle Weckzeit(en) ausgeben -->
<?php
if (file_exists($WeckZeitenDatei)) {
$AlarmData = file($WeckZeitenDatei);
$Entries = count($AlarmData);
if ($Entries > 0) {
echo "<br/><br/>\n";
echo "<p class='currentAlarms'><span><strong>Aktuelle Weckzeit(en): ".$Entries."</strong></span><br/><br/>\n";
foreach ($AlarmData AS $line_num => $line) {
echo $line."<br/>\n";
}
echo "</p>\n";
}
}
?>
</nobr>
</body>
</html>
Alles anzeigen
Aber jetzt erst mal