Raspberry Pi Relais-Steuerung

Script zum auslösen der Relais:

#!/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

Dieses Script befindet sich bei mir in /usr/local/bin/ und heißt schalter 

 

Webseite:

<?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.

Diese Seite ist bei mir unter /var/www/html/index.php gespeichert.

Script, dass www-data etwas als root ausführen darf

#!/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

Dieses Script habe ich unter /var/sudoschalter gespeichert.

Damit das ganze funktioniert, habe ich folgende Zeile bei visudo eingefügt.

www-data ALL=NOPASSWD:/var/sudoschalter

Kommentare sind geschlossen.