Unser byteblog: Allgemeine Themen zur Netzkultur, die wir gerne teilen möchten.

Temperatur im Serverraum messen und per PHP twittern

Seit ca. einem Jahr messen wir die Temperatur in unserem Serverraum und lassen die Werte über einen geschützten und nur intern genutzten twitter Stream laufen, der nebenbei auch andere Stautswerte aus dem bytepark Netz verkündet (nicht erreichbare Server, Plattenauslastung, etc.).

Hier wollen wir nun eine Anleitung geben, wie man mit geringem Aufwand und vor allem kostengünstig (ca. 25 EUR + 0.5h Arbeitszeit) solch eine Lösung zur Temperaturmessung realisiert.

Wir benutzen zur Temperaturmessung einen USB Temperatur Sensor, der handgefertigt aus Canada kommt und für umgerechnet 25,00 EUR inkl. Versand innerhalb von ca. 10 Tagen in Deutschland ankommt.

Als Werte für den Sensor werden die folgenden Parameter gelistet. Als Genauigkeit werden also zwischen 0,5°C und 1,0°C angegeben, was für unsere Bedürfnisse vollkommen ausreicht

* Accuracy:
o Typical accuracy at 25°C: ±0.5°C
o ±1°C (max.) from -10°C to +85°C
o ±2°C (max.) from -10°C to +125°C
o ±3°C (max.) from -55°C to +125°C
* Powered by USB
* Works under Linux and MacOS X (compilation required)

Der Sensor wird einfach an einen freien USB-Anschluß an einem Server im Serverraum gsteckt und der Temperaturfühler sollte möglichst entfernt von der Abluft der Server ausgerichtet an eine freie Stelle im Serverraum positioniert werden.

Um die Werte des Sensors abzufragen, stellt der Hersteller das Paket “usbtenki” bereit. Wir nutzen es in Version 1.6. Es ist unter Linux wie gewohnt zu kompilieren.

Nach erfolgreichem Install kann man mit dem Tool usbtenkiget mit dem Sensor interagieren.

Mit dem Kommando usbtenkiget -l kann man sich auflisten lassen, ob der Sensor auch erkannt wird. Ein Tipp hierbei – das Programm muss als root ausgeführt werden, bzw. mit setuid (sicherlich ist es auch möglich entsprechende Rechte auf USB zu vergeben)

usbtenkiget -l
Found: 'USBTenki', Serial: '907081', Version 1.4, Channels: 7
Channel 0: MCP980x I2C Temperature sensor [Temperature]

Mit dem Aufruf usbtenkiget -i 0 erhält man dann letztlich die Temperatur auf der Kommandozeile.

Um diese jetzt twittern zu lassen ist nicht viel mehr als ein paar Zeilen PHP-Code notwendig (kann auch noch einfacher direkt über die Kommandezeile machen, in Kombination mit wget. Wir haben hier unsere Standardlib für twitter genutzt, die wir auch an anderer Stelle für das automatische twittern nutzen).

< ?php
/**
twitter temp
script to twitter temprature from USBtenki sensor
(c) bytepark GmbH, 2009 / code@bytepark.de / www.bytepark.de
feel free to use as you like
*/
//config - change XXX and YYY and if you installed usbtenkiget at a different path enter this as well
$t = new twitter();
$t->username = 'XXX';
$t->password = 'YYY';
$cmd = "/usr/local/bin/usbtenkiget -i 0";
// no changes below needed
$temp = exec($cmd);
if ($temp) {
$t->update('Serverraum Temperatur: '.$temp.'°C ('.date("d.m.Y H:i:s").')');
}
class twitter{
function update($status){
$this->request = 'http://twitter.com/statuses/update.xml';
$this->postargs = 'status='.urlencode($status);
return $this->process();
}
public function process(){
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $this->request);
curl_setopt ($c, CURLOPT_POST, true);
curl_setopt ($c, CURLOPT_POSTFIELDS, $this->postargs);
curl_setopt($c, CURLOPT_USERPWD, $this->username.':'.$this->password);
$contents = curl_exec($c);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
}
?>

Einzig einzutragen sind Benutzername und Kennwort des Accounts über den man twittern möchte. Das Skript selbst ist dann im regelmäßigen Abstand mittels Cronjob auszuführen (in unserem Falle senden wir stündlich einen Wert).

Wer möchte kann das Ganze natürlich noch erweitern und sich beispielsweise die Werte plotten lassen, um damit eine grafische Darstellung über die Zeit ermöglichen zu lassen.

Tags: serverraum | temperatur messen | temperatur twittern | usbtenki |

Geschrieben von fb am 12.12.2009 17:29

Kommentare

Es liegen keine Kommentare vor.

Einen Kommentar hinterlassen



drei × = 9