Script zum auslösen der Relais:
Dieses Script befindet sich bei mir in /usr/local/bin/
und heißt schalter
#!/bin/bash
unset schalternummer \
PIN
schalternummer=$1
schalter() {
PIN=$1
gpio mode $PIN out
sleep 0.3
gpio mode $PIN in
exit 0
}
hardreset () {
PIN=1
gpio mode $PIN out
sleep 6.0
gpio mode $PIN in
sleep 10
schalter $PIN
exit 0
}
case $schalternummer in
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 )
schalter $schalternummer ;;
hardreset )
hardreset;;
*)
echo "ERROR: Wrong command." >&2
exit 1 ;;
esac
Webseite:
Diese Seite ist bei mir unter /var/www/html/index.php
gespeichert.
<?php
function get_ip_address() {
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]) && ip2long($_SERVER["HTTP_X_FORWARDED_FOR"]) !== false) {
$ipadres = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isset($_SERVER["HTTP_CLIENT_IP"]) && ip2long($_SERVER["HTTP_CLIENT_IP"]) !== false) {
$ipadres = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ipadres = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR') && ip2long(getenv('HTTP_X_FORWARDED_FOR')) !== false) {
$ipadres = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_IP') && ip2long(getenv('HTTP_CLIENT_IP')) !== false) {
$ipadres = getenv('HTTP_CLIENT_IP');
} else {
$ipadres = getenv('REMOTE_ADDR');
}
}
return $ipadres;
}
$aktUhrzeit = date("H:i:s");
if (isset($_GET['NAME'])){
$SudoSchalter = "/var/sudoschalter";
if (isset($_POST) AND !empty($_POST)) {
foreach ($_POST AS $what => $arg) {
if ($what == "button") {
exec("sudo ".$SudoSchalter." ".$arg." >/dev/null 2>&1", $output, $return_var);
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TITEL</title>
<style type="text/css">
.body {
background-color: #000000;
color: white;
}
.wrapButtons {
text-align: center;
font-size: 60px;
font-family: "Verdana";
}
.Button {
width: 760px;
height: 220px;
color: black;
background-color: #FAFAFA;
border-radius: 80px;
font-size: 45px;
}
.Button2 {
width: 370px;
height: 120px;
color: black;
background-color: #FAFAFA;
border-radius: 50px;
font-size: 45px;
}
</style>
</head>
<body>
<nobr>
<b>
<form action="" method="post">
<h1 align="center">Fred-PC</h1>
<hr noshade size="20">
<br/>
<div class="wrapButtons">
<button class="Button" type="submit" name="button" value="0">Reset</button>
</div>
<br/>
<div class="wrapButtons">
<button class="Button" type="submit" name="button" value="1">Power</button>
</div>
<br/>
<div class="wrapButtons">
<button class="Button" type="submit" name="button" value="hardreset">Hardreset</button>
</div>
<br/>
<form>
</b>
</nobr>
</body>
</html>
<?php
echo "<p></p>";
echo "<p></p>";
echo "<p></p>";
echo "<span style=\"font-size: 36pt;\">Deine IP-Adresse ist: ".get_ip_address()."</span>";
}
else {
echo "<p><span style=\"font-size: 36pt;\">aktuelle Uhrzeit: $aktUhrzeit</span></p>";
echo "<span style=\"font-size: 36pt;\">Deine IP-Adresse ist: ".get_ip_address()."</span>";
$url=$_SERVER['REQUEST_URI'];
header("Refresh: 5; URL=$url");
}
?>
Name und Title könnt ihr selbst definieren.
Aufgerufen wird das ganze dann über: example.com/?NAME oder IP xxx.xxx.xxx.xxx/?NAME
Ich persönlich habe noch als Sicherheit den Port geändert. Also meine_domain.de:12345/?NAME
Somit kann niemand aus versehen auf diese Seite zugreifen und meinen Rechner ein-/ausschalten. Man muss den Port und den NAME wissen, sonst zeigt die Seite nur die aktuelle Zeit und die IP-Adresse vom anfragenden Gerät an.
Script, dass www-data etwas als root ausführen darf
Dieses Script habe ich unter /var/sudoschalter
gespeichert.
#!/bin/bash
case "$1" in
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | hardreset )
sudo /usr/local/bin/schalter $1;;
*) echo "ERROR: invalid parameter: $1 (for $0)"; exit 1 ;;
esac
exit 0
Damit das ganze funktioniert, habe ich folgende Zeile bei visudo
eingefügt.
www-data ALL=NOPASSWD:/var/sudoschalter