Good to Know Database

Raspbian Wheezy: Systeminformationen auf einer Webseite bereitstellen


Die folgende Anleitung soll Ihnen zeigen wie Sie mit Hilfe des xinetd Systeminformationen über einen Netzwerk-Service zur Verfügung stellen und diese auf einer Webseite mit PHP auslesen und anzeigen können. Es wird hierbei davon ausgegangen, dass Sie auf Ihrem Raspberry Pi als Betriebssystem Raspbian einsetzen.

Abhängigkeiten installieren

Sollten Sie den xinetd und den Basic Calculator bc noch nicht installiert haben, sollten Sie dies jetzt nachholen.

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install xinetd bc

Shell-Skript zum Ermitteln der Informationen

Erstellen Sie anschließend ein Shell-Skript welches die gewünschten Informationen zusammensammelt und auf der Standardausgabe zurückgibt.

pi@raspberrypi ~ $ sudo vi /usr/bin/systemdata.sh

Das Skript könnte wie folgt aussehen. Das folgende Skript liefert die Uptime in Sekunden, die CPU und GPU Temperatur des Raspberry Pi's, die Firmware Version und die aktuelle CPU-Auslastung.

###########################################################################
##                                                                       ##
##                          Collect System Data                          ##
##                                                                       ##
## Creation:    17.02.2013                                               ##
## Last Update: 15.06.2013                                               ##
##                                                                       ##
## Copyright (c) 2013 by Georg Kainzbauer <http://www.gtkdb.de>          ##
##                                                                       ##
## This program is free software; you can redistribute it and/or modify  ##
## it under the terms of the GNU General Public License as published by  ##
## the Free Software Foundation; either version 2 of the License, or     ##
## (at your option) any later version.                                   ##
##                                                                       ##
###########################################################################
#!/bin/bash

# Read uptime in seconds
echo -n "Uptime: "
cat /proc/uptime | awk -F '.' '{print $1}'

# Read current CPU temperature
echo -n "CPU Temperature: "
echo "scale=1; $(cat /sys/class/thermal/thermal_zone0/temp | awk -F ' ' '{print $1}') / 1000" | bc -l

# Read current GPU temperature
echo -n "GPU Temperature: "
/opt/vc/bin/vcgencmd measure_temp | sed -e "s/temp=//" -e "s/'C//g"

# Read firmware version
echo -n "Firmware: "
/opt/vc/bin/vcgencmd version | grep version | awk '{print $2}'

# Read CPU usage
echo -n "CPU Usage: "
top -b -n2 -d1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}' | tail -n1

exit 0

Nachdem Sie das Shell-Skript erstellt haben, müssen Sie die Zugriffsrechte anpassen.

pi@raspberrypi ~ $ sudo chmod 0755 /usr/bin/systemdata.sh

Zum Überprüfen ob das Shell-Skript auch alle Daten ermittelt rufen Sie dieses einfach auf.

pi@raspberrypi ~ $ /usr/bin/systemdata.sh
Uptime: 14503
CPU Temperature: 46.5
GPU Temperature: 47.1
Firmware: 367974
CPU Usage: 5.1%

xinetd konfigurieren

Erstellen Sie jetzt eine neue Konfigurationsdatei für den xinetd.

pi@raspberrypi ~ $ sudo vi /etc/xinetd.d/systemdata

Diese sollte wie folgt aussehen. Diese Konfigurationsdatei sorgt dafür, dass bei einer Anfrage an den TCP-Port 5180 das soeben erstellte Shell-Skript ausgeführt wird und die ermittelten Daten zurückgeschickt werden.

service systemdata
{
  disable         = no
  socket_type     = stream
  port            = 5180
  protocol        = tcp
  wait            = no
  user            = root
  server          = /bin/sh
  server_args     = /usr/bin/systemdata.sh
  log_on_failure  += USERID
}

Jetzt müssen Sie in der /etc/services den TCP-Port 5180 noch mit dem Servicenamen systemdata verknüpfen.

pi@raspberrypi ~ $ sudo vi /etc/services

Fügen Sie am Ende der Datei die folgende Zeile ein.

systemdata      5180/tcp

Da jetzt alle Änderungen an der Konfiguration durchgeführt wurden, starten Sie mit folgendem Befehl den xinetd neu.

pi@raspberrypi ~ $ sudo /etc/init.d/xinetd restart
[ ok ] Stopping internet superserver: xinetd.
[ ok ] Starting internet superserver: xinetd.

Funktionstest

Ob soweit alles wie erwartet funktioniert können Sie mit Telnet auf einem zweiten Rechner überprüfen.

[georg@centos6 ~]$ telnet raspberrypi.home.lan 5180
Trying 192.168.10.52...
Connected to raspberrypi.home.lan.
Escape character is '^]'.
Uptime: 15276
CPU Temperature: 46.5
GPU Temperature: 46.5
Firmware: 367974
CPU Usage: 3.7%
Connection closed by foreign host.

Alternativ können Sie dies auch lokal mit Netcat überprüfen.

pi@raspberrypi ~ $ nc localhost 5180
Uptime: 15279
CPU Temperature: 46.5
GPU Temperature: 46.5
Firmware: 367974
CPU Usage: 3.9%

Sollten Sie eine Firewall auf Ihrem Raspberry Pi einsetzen, müssen Sie hier den TCP-Port 5180 öffnen. Wollen Sie aus dem Internet auf den soeben erstellten Service zugreifen und befinden sich hinter einem Router, dann müssen Sie die Router-Firewall entsprechend konfigurieren und das Portforwarding für den TCP-Port 5180 einrichten.

Informationen in PHP verarbeiten

Wenn Sie die über den Service systemdata bereitgestellten Informationen in PHP einlesen und verarbeiten wollen, hilft Ihnen eventuell der folgende Beispiel-Code.

<?php
  $fp = fsockopen("raspberrypi.home.lan",5180);
  while($string = fgets($fp))
  {
    if(substr_compare($string,"Uptime",0,6)==0)
    {
      $array = explode(" ",$string);
      $days = floor($array[1] / 86400);
      $carry = $array[1] - $days * 86400;
      $hours = floor($carry / 3600);
      $carry = $carry - $hours * 3600;
      $minutes = floor($carry / 60);
      $carry = $carry - $minutes * 60;
      $seconds = $carry;
      echo "Uptime: " . $days . " Tag(e) " . $hours . " Stunde(n) " . $minutes . " Minute(n) " . $seconds . " Sekunde(n)<br />";
    }
    else if(substr_compare($string,"CPU Temperature",0,15)==0)
    {
      $array = explode(" ",$string);
      echo "CPU Temperature: " . $array[2] . " °C<br />";
    }
    else if(substr_compare($string,"GPU Temperature",0,15)==0)
    {
      $array = explode(" ",$string);
      echo "GPU Temperature: " . $array[2] . " °C<br />";
    }
    else if(substr_compare($string,"Firmware",0,8)==0)
    {
      $array = explode(" ",$string);
      echo "Firmware Version: " . $array[1] . "<br />";
    }
    else if(substr_compare($string,"CPU Usage",0,9)==0)
    {
      $array = explode(" ",$string);
      echo "CPU Usage: " . $array[2] . "<br />";
    }
  }
?>


Dieser Eintrag wurde am 17.02.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_2105.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer