Systemdaten des Raspberry Pi abrufen

Teile diesen Beitrag

Damit du immer genau über die einzelnen Daten deines Smarthome Servers Bescheid weißt, zeige ich dir heute, wie du dir in wenigen Schritten eine PHP-Funktion schreiben kannst, mit der sich alle wichtigen Systemdaten des Servers abfragen lassen. Auf die Funktion kannst du dann mit der Schnittstelle zugreifen, die zu Programmierung der Smarthome-App angelegt wird.

Dieses Tutorial als Video

Folgende Werte lassen sich mit dieser Funktion abfragen:

  • Die Zeit, die der Server seit dem letzten Start läuft
  • Die aktuelle Temperatur des Prozessors
  • Die Version des Kernels
  • Das Erscheinungsdatum der benutzten Firmwareversion
  • Der benutzte Speicher in Prozent
  • Der freie Speicher, je nach Größe in kb, Mb, GB oder TB
  • Der momentan benutzte Arbeitsspeicher in Prozent
Du kannst verschiedenste Systemdaten des Raspberry auslesen.

Du kannst verschiedenste Systemdaten des Raspberry auslesen.

Berechtigungen ändern

Um bestimmte Systemdaten per vcgencmd-Befehl abfragen zu können, ist eine kleine Veränderung der Berechtigungen nötig, da vcgencmd standardmäßig nicht per PHP verfügbar ist. Um dies zu ändern ist nur ein kleiner Eintrag in der sudoers-Datei notwendig. Um diese zu bearbeiten, öffnest du einfach den Editor mit folgendem Befehl:

sudo nano /etc/sudoers

Wenn der Editor geöffnet ist, fügst du am Ende der Datei die folgende Zeile ein:

www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd

Dieser Eintrag gewährt Nutzern der Gruppe www-data nun Zugriff auf vcgencmd-Befehle, ohne sie mit einem Passwort bestätigen zu müssen.

Systemdaten abfragen und ausgeben

Jetzt wird die Funktion angelegt, die später von der Smarthome-Schnittstelle verwendet wird, um die Systemdaten auszugeben. Dazu erstellst du im Hauptverzeichnis deines Servers eine Datei namens “getSystemInfo.php” und fügst dort den folgenden Quellcode ein:

<?php

function getSystemInfo(){
	$systeminfo = array();
	
	//Systemlaufzeit abfragen
	$uptime = exec("uptime");
	
	//Rückgabestring zurechtschneiden
	$uptime = preg_replace("/[0-9][0-9]:[0-9][0-9]:[0-9][0-9] up/", "", $uptime);
	$uptime = preg_replace("/,[ ]*.[ ]user.*/", "", $uptime);
	$uptime = ltrim($uptime, " ");
	
	array_push($systeminfo, array('name' => 'Laufzeit', 'type' => 'uptime', 'value' => $uptime));
	
	//CPU-Temperatur abfragen und auf Zehntel-Grad runden
	exec("cat /sys/class/thermal/thermal_zone0/temp", $cputemp);
	$cputemp = round($cputemp[0] / 1000, 1);
	
	array_push($systeminfo, array('name' => 'CPU-Temp', 'type' => 'cputemp', 'value' => $cputemp.' &deg;C'));
	
	//Kernelversion abfragen
	$kernel = exec("uname -r");
	
	array_push($systeminfo, array('name' => 'Kernel', 'type' => 'kernel', 'value' => $kernel));
	
	//Speichernutzung abfragen
	exec("df --output=used,size", $spaceinfo);
	
	//erstes Element wird übersprungen, da es nur Text enthält
	for($i = 1; $i < sizeOf($spaceinfo); $i++){
		$info = trim($spaceinfo[$i]);
		$info = preg_replace('!\s+!', ' ', $info);
		
		$spacearray = explode(" ", $info);
		
		$usedspace += $spacearray[0];
		$totalspace += $spacearray[1];
	}
	
	//Benutzten Speicherplatz in Prozent auf ganze Zahlen runden
	$spaceusagepercent = round(($usedspace / $totalspace)*100)."%";
	
	array_push($systeminfo, array('name' => 'Speichernutzung', 'type' => 'spaceusage', 'value' => $spaceusagepercent));
	
	//Freien Speicherplatz berechnen
	$freespace = $totalspace - $usedspace;
	
	//Zählen, wie oft freier Speicher durch 1024 geteilt werden kann
	while($freespace >= 1024){
		$counter++;
		$freespace /= 1024;
	}
	
	//Anhand der Anzahl der durchgeführten Divisionen Größenordnung der Nachkommastellen bestimmen
	switch($counter){
		case 1:
			$sizetext = " Mb";
			$decimal = 1;
			break;
		case 2:
			$sizetext = " GB";
			$decimal = 1;
			break;
		case 3:
			$sizetext = " TB";
			$decimal = 2;
			break;
		default:
			$sizetext = " kb";
			$decimal = 0;
			break;
	}
	
	//Freien Speicherplatz angemessen runden (GB und Mb auf 1 Nachkommastelle, TB auf 2, kb garnicht runden)
	$freespace = round($freespace, $decimal);
	array_push($systeminfo, array('name' => 'Freier Speicher', 'type' => 'freespace', 'value' => $freespace.$sizetext));
	
	//Arbeitsspeicher-Info abfragen
	exec("free", $raminfo);
	
	//RAM-Auslastung aus Ausgabe herauslesen
	$info = trim($raminfo[1]);
	$info = preg_replace('!\s+!', ' ', $info);
	$ramarray = explode(" ", $info);
	
	$totalram = $ramarray[1];
	$usedram = $ramarray[2];
	
	//RAM-Auslastung in Prozent auf ganze Zahlen runden
	$ramusage = round(($usedram / $totalram)*100)."%";
	
	array_push($systeminfo, array('name' => 'RAM-Nutzung', 'type' => 'ramusage', 'value' => $ramusage));
	
	//Firmwareversion des Betriebssystems abfragen
	//Die Versionsinfo ist ein Array mit 3 Werten: Erscheinungsdatum, Copyright-Hinweis, Versionsnummer
	exec("sudo /opt/vc/bin/vcgencmd version", $firmwareversion);
	
	//Ausgegeben wird nur das erste Element mit dem Erscheinungsdatum der Versionsinfo
	$firmwareversion = $firmwareversion[0];
	
	array_push($systeminfo, array('name' => 'Firmware', 'type' => 'firmware', 'value' => $firmwareversion));
	
	//JSON-Objekt erstellen und zurückgeben
	return json_encode(array('systeminfo' => $systeminfo));
}

?>

Erklärung des Codes

Die Funktion liest einige Systemdaten des Raspberry aus, verarbeitet sie gegebenenfalls (zb. wandelt Werte in lesbares Format um) und schreibt sie anschließend in ein JSON-Objekt, welches dann auch zurückgegeben wird. Die Smarthome-App, die noch programmiert wird, liest dieses JSON-Objekt aus und stellt die Daten dann übersichtlich dar, damit man auf einem Blick über die wichtigen Werte des Servers informiert wird.

Teile diesen Beitrag
, , ,
Vorheriger Beitrag
Datenserver mit RAID 1 auf dem Raspberry Pi
Nächster Beitrag
Schnittstelle für Android App erstellen

Ähnliche Beiträge

Menü

Wir nutzen Cookies, um dir passende Inhalte zu präsentieren und dein Surfvergnügen zu optimieren, aktivieren Cookies aber erst, wenn du auf akzeptieren klickst. Weitere Informationen

Wir benutzen Google Analytics, um zu ermitteln, welche Inhalte unsere Besucher sehen wollen und welche nicht. Eingebettete YouTube-Videos helfen dir mittels Cookies nur die Videos zu sehen, die du sehen willst.

Schließen