So hier kommt nun auch mal ein Tutorial von mir.
In diesem Tutorial geht es dadrum, eine Optische Anzeige des RAM - Speichers zu bewerkstelligen. Die Anzeige besteht aus 3 LEDs (je eine in Rot, Gelb und Grün).
Die Grüne LED läuchtet solange der genug freier Speicher vorhanden ist. Die Gelbe LED läuchtet auf, sobald der Speicher unter 30% sinkt. Die Rote LED läuchtet auf, sobald weniger als 10% des Speichers noch zur Verfügung steht.
Solange das Programm im Aktiven Fenster läuft wird dadrüber hinaus noch eine Ausgabe angezeigt.
Damit dies auch auf Dauer weiterläuft und man trotzdem weiter arbeiten kann zeig ich euch noch wie man das Programm in den Hintergrund legen kann.
So erstmal vielleicht vorab ein Bild, damit man sieht wie sowas aussehen kann:
Die LEDs werden über folgendes Script angesteuert:
#!/bin/bash
# Dateiname: memwatch.sh
#GPIO Pins, können bei bedarf auch ruhig verändert werden
green=22
yellow=23
red=24
# Initialsiert die LEDs bei Start des Programms
init_leds()
{
for i in $green $yellow $red; do
gpio -g mode $i out
gpio -g write $i 0
done
}
# Schaltet die LED entspreched des Status
set_led()
{
led_status=`gpio -g read $1`
if [ "$led_status" -ne 1 ]; then
init_leds
gpio -g write $1 1
fi
}
# Setzt alles zurück auf Originalzustand bei Programmende
cleanup()
{
init_leds
exit 0
}
init_leds
trap cleanup INT TERM EXIT
# Analyse des RAM - Speichers und Schaltbefehl der entsprechenden LED geben
while :;do
total=`free | grep Mem | awk {'print $2'}`
memfree=`free | grep Mem | awk {'print $4'}`
cachefree=`free | grep cache: | awk {'print $4'}`
free=$(( memfree + cachefree ))
available=$(( free * 100 / total ))
echo -n "$available% of memory available -> "
if [ "$available" -le 10 ]; then
echo "Critical"
set_led $red
elif [ "$available" -le 30 ]; then
echo "Low"
set_led $yellow
else
echo "OK"
set_led $green
fi
sleep 10
done
Alles anzeigen
Nach dem Speichern des Scripts muss dies noch ausführbar gemacht werden mittels:
Und danach wie folgt das Script starten:
Die LEDs habe ich mit je einem Vorwiderstand von 150 Ohm ausgestattet und schalte diese über ein ULN2803 gegen 5V um die GPIO Pins nicht zu sehr zu belasten.
Das ganze sieht wie folgt aus:
Um nun das Programm in einen Dienst zu überführen muss folgendes eingegeben werde:
Um diesen Dienst wieder zu beenden muss man erstmal die PID herrausfinden und dann diese Beenden:
Natürlich wäre noch Vorteilhaft, wenn das Programm automatisch beim Neustarten gestarten wird und dies erledigt man wie folgt:
- Öffnen der Datei: /etc/rc.local mit dem Editor der Wahl
- Folgende Zeile ans Ende aber vor der Zeile "exit 0" einfügen: nohup <PfadZumScrip>/./memwatch.sh anfügen
So jetzt kommt noch der Teil mit der Webansicht des Speicherzustandes. Diese sieht vom Code her wie folgt aus und muss lediglich ins Verzeichnis des Webservs gepackt werden oder den Code in eine bestehende Homepage ein zu binden.
<?php
function led_is_on($number) {
$status = trim(@shel_exec("/user/local/bin/gpio -g read " . $number));
if ($status == "0") {
return False;
}
else {
return True;
}
}
$green = 22;
$yellow = 23;
$red = 24;
echo "<h1>Memory Usage is ";
if(led_is_on($green)) {
echo "OK";
}
elseif (led_is_on($yellow)) {
echo "Low";
}
elseif (led_is_on($red)) {
echo "Critical";
}
else {
echo "Unknown";
}
echo ".</h1>";
?>
Alles anzeigen
Ich hoffe, ich habe an alles gedacht und das interessiert den ein oder anderen.
Für dieses Tutorial habe ich folgende Quellen dazu gezogen:
- Das Buch "Raspberry Pi - Einstieg * Optimierung * Projekte" von Maik Schmidt
- Folgendes Tutorial: https://www.forum-raspberrypi.de/Thread-tutoria…s-python-script
- Folgendes Tutorial: Anwendung über SSH in den Hintergrund ?
Bitte um kleines Feedback über mein erstes Tutorial, was man ggf. verbessern könnte. Ich hoffe aber, dass es so aber im großen ganzen ganz Verständlich ist.
Michael