1-wire Wetterstation (Teil 3: Anzeige)

Nachdem man sich eine 1-wire Wetterstation nach dem Artikel 1-wire Wetterstation (Teil 1: Installation) gebaut und die Daten wie im Artikel 1-wire Wetterstation (Teil 2: Datenbank) beschrieben in einer MySQL Tabelle speichert möchte man die gesammelten Werte natürlich auch angezeigt bekommen.

Um möglichst einfach die gemessenen Werte der Wetterstation in einer Webseite anzuzeigen, habe ich die jpgraph verwendet. Diese Software darf für private Zwecke kostenlos verwendet werden. Da sie ansonsten Geld kostet ist sie nicht im Repository zu finden. Man kann sie aber unter der URL http://jpgraph.net/download runterladen. Ich habe mir von dort die aktuelle Version 3.07 geholt und in das Verzeichnis /usr/share/jpgraph3 entpackt. Danach benötigt man noch das Paket php5-gd. Diese ist im Repository enthalten und kann mit dem folgenden Befehl installiert werden.

apt-get install php5-gd

Um aus den gesammelten Wetterdaten eine Grafik mit den Werten des letzten Tages erstellen zu lassen, habe ich das Verzeichnis /var/www/grafiken angelegt und das folgenden PHP-Programm geschrieben, welches die Grafiken aus erzeugt.

<?php
//****************************************************************************
//Darstellung von Temperatur und Feuchtigkeit der letzten 24 Stunden als Graph
//14.02.2011 Kristian Purrucker
//****************************************************************************
 
include ("/usr/share/jpgraph3/jpgraph.php");
include ("/usr/share/jpgraph3/jpgraph_line.php");
include ("/usr/share/jpgraph3/jpgraph_mgraph.php");
include ("/usr/share/jpgraph3/jpgraph_date.php");
 
$DatabaseHost = "localhost";
$DatabaseUser = "root";
$DatabasePassword = "asdfgh";
$Database = "wetterstation";
$Table = "daten_min";
 
$fileName = "/var/www/grafiken/graph_daily.png";
 
//Datenbankanbindung
//******************
$DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword) or die ("Keine Verbindung moeglich");
mysql_select_db($Database, $DatabasePointer) or die ("Die Datenbank existiert nicht");
 
 
//Auslesen der letzten 1440 Zeilen (= Tag) aus der Datenbank
//**********************************************************
$ResultPointer = mysql_query("SELECT zeitstempel, temp_clara, humidity_clara, temp_simon, humidity_simon FROM $Table ORDER BY zeitstempel DESC LIMIT 1440");
 
$temp_clara_average = "";
$temp_simon_average = "";
$humidity_clara_average = "";
$humidity_simon_average = "";
 
for($i = 0, $Export = ""; $i < mysql_num_rows($ResultPointer); $i++)
{
   $Daten = mysql_fetch_object($ResultPointer);
 
   $temp_clara[] = $Daten->temp_clara;
   $temp_clara_average = $temp_clara_average + $Daten->temp_clara;
   $temp_simon[] = $Daten->temp_simon;
   $temp_simon_average = $temp_simon_average + $Daten->temp_simon;
   $humidity_clara[] = $Daten->humidity_clara;
   $humidity_clara_average = $humidity_clara_average + $Daten->humidity_clara;
   $humidity_simon[] = $Daten->humidity_simon;
   $humidity_simon_average = $humidity_simon_average + $Daten->humidity_simon;
   $xdata[] = $Daten->zeitstempel;
}
 
$temp_clara_average = round(($temp_clara_average = $temp_clara_average / 1440), 4);
$humidity_clara_average = round(($humidity_clara_average = $humidity_clara_average / 1440), 4);
$temp_simon_average = round(($temp_simon_average = $temp_simon_average / 1440), 4);
$humidity_simon_average = round(($humidity_simon_average = $humidity_simon_average / 1440), 4);
 
 
//Funktion zur Konvertierung des TimeStamp in Minuten und Sekunden
//****************************************************************
function  TimeCallback( $aVal) {
    #return Date ('H:i:s d.m Y',$aVal);
    return Date ('H:i',$aVal);
}
 
 
//Erzeugung eines Graphen fuer Claras Zimmer
//******************************************
$graph = new Graph(700,200,"auto");
$graph->SetScale('datint',"auto","auto","auto","auto");
$graph->SetY2Scale('int',"auto","auto");
$lineplot_temp_clara=new LinePlot($temp_clara, $xdata);
$lineplot_humidity_clara=new LinePlot($humidity_clara, $xdata);
 
// Grafik Formatieren
$graph->img->SetMargin(50,50,20,60);
$graph->SetColor("#000000");
$graph->SetMarginColor("#333333");
$graph->SetShadow();
 
//Titel
$graph->title->Set("Claras Zimmer");
$graph->title->SetColor("#CCCCCC");
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->subtitle->Set("Aktuell: $temp_clara[0] C / $humidity_clara[0]%   Durchschnittlich: $temp_clara_average C / $humidity_clara_average%");
$graph->subtitle->SetColor("#CCCCCC");
 
//Legende
$graph->legend->Pos(0.50,0.95,"center","bottom");
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->SetShadow(false);
$lineplot_temp_clara->SetLegend("Lufttemperatur (C) ");
$lineplot_humidity_clara->SetLegend("Luftfeuchtigkeit ");
 
//X-Achse
$graph->xaxis->SetColor("#CCCCCC");
$graph->xaxis->title->Set("Zeit");
$graph->xaxis->SetLabelFormatCallback('TimeCallback');
$graph->xaxis->title->SetColor("#CCCCCC");
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
 
//Y-Achse
$graph->yaxis->SetColor("#FF7777");
$graph->y2axis->SetColor("#1111ee");
$graph->yaxis->title->Set("Grad Celsius");
$graph->y2axis->title->Set("% Luftfeuchtigkeit");
$graph->yaxis->title->SetColor("#CCCCCC");
$graph->y2axis->title->SetColor("#CCCCCC");
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->y2axis->title->SetFont(FF_FONT1,FS_BOLD);
 
//Linie 1
$lineplot_temp_clara->SetColor("#FF8888");
$lineplot_temp_clara->SetFillColor("#EE0000@0.6");
$lineplot_temp_clara->SetWeight(1);
 
//Linie 2
$lineplot_humidity_clara->SetColor("#8888ff");
$lineplot_humidity_clara->SetFillColor("#2222DD@0.6");
$lineplot_humidity_clara->SetWeight(1);
 
// Die Linien zu der Grafik hinzufügen
$graph->Add($lineplot_temp_clara);
$graph->AddY2($lineplot_humidity_clara);
 
//Erzeugung eines Graphen fuer Simons Zimmer
//******************************************
$graph2 = new Graph(700,200,"auto");
$graph2->SetScale('datint',"auto","auto","auto","auto");
$graph2->SetY2Scale('int',"auto","auto");
$lineplot_temp_simon=new LinePlot($temp_simon, $xdata);
$lineplot_humidity_simon=new LinePlot($humidity_simon, $xdata);
 
// Grafik Formatieren
$graph2->img->SetMargin(50,50,20,60);
$graph2->SetColor("#000000");
$graph2->SetMarginColor("#333333");
$graph2->SetShadow();
 
//Titel
$graph2->title->Set("Simons Zimmer");
$graph2->title->SetColor("#CCCCCC");
$graph2->title->SetFont(FF_FONT2,FS_BOLD);
$graph2->subtitle->Set("Aktuell: $temp_simon[0] C / $humidity_simon[0]%   Durchschnittlich: $temp_simon_average C / $humidity_simon_average%");
$graph2->subtitle->SetColor("#CCCCCC");
 
//Legende
$graph2->legend->Pos(0.50,0.95,"center","bottom");
$graph2->legend->SetLayout(LEGEND_HOR);
$graph2->legend->SetShadow(false);
$lineplot_temp_simon->SetLegend("Lufttemperatur (C) ");
$lineplot_humidity_simon->SetLegend("Luftfeuchtigkeit ");
 
//X-Achse
$graph2->xaxis->SetColor("#CCCCCC");
$graph2->xaxis->title->Set("Zeit");
$graph2->xaxis->SetLabelFormatCallback('TimeCallback');
$graph2->xaxis->title->SetColor("#CCCCCC");
$graph2->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
 
//Y-Achse
$graph2->yaxis->SetColor("#FF7777");
$graph2->y2axis->SetColor("#1111ee");
$graph2->yaxis->title->Set("Grad Celsius");
$graph2->y2axis->title->Set("% Luftfeuchtigkeit");
$graph2->yaxis->title->SetColor("#CCCCCC");
$graph2->y2axis->title->SetColor("#CCCCCC");
$graph2->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph2->y2axis->title->SetFont(FF_FONT1,FS_BOLD);
 
//Linie 1
$lineplot_temp_simon->SetColor("#FF8888");
$lineplot_temp_simon->SetFillColor("#EE0000@0.6");
$lineplot_temp_simon->SetWeight(1);
 
//Linie 2
$lineplot_humidity_simon->SetColor("#8888ff");
$lineplot_humidity_simon->SetFillColor("#2222DD@0.6");
$lineplot_humidity_simon->SetWeight(1);
 
// Die Linien zu der Grafik hinzufügen
$graph2->Add($lineplot_temp_simon);
$graph2->AddY2($lineplot_humidity_simon);
 
//Graphen zusammen bauen
//**********************
$mgraph = new MGraph(700,400,"auto");
$mgraph->SetMargin(2,2,2,2);
$mgraph->Add($graph,0,0);
$mgraph->Add($graph2,0,200);
$mgraph->Stroke($fileName);
?>

Anschließend habe ich zum anzeigen der Grafiken die folgende, einfache HTML-Seite geschrieben und in das Verzeichnis /var/www gelegt.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Herzlich Willkommen bei preetz.dnsalias.net!</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link rel="shortcut icon" href="/favicon.ico" />
    <meta name="robots" content="noindex" />
        <style type="text/css"><!--
    body {
        color: #444444;
        background-color: #EEEEEE;
        font-family: 'Trebuchet MS', sans-serif;
        font-size: 80%;
    }
    h1 {}
    h2 {
        font-size: 1.2em;
        text-align: center;
    }
    p.center { text-align: center; }
    #page{
        background-color: #FFFFFF;
        width: 60%;
        margin: 24px auto;
        padding: 12px;
    }
    #header{
        padding: 6px ;
        text-align: center;
    }
    .header{ background-color: #997; color: #FFFFFF; }
    #content {
        padding: 4px 0 24px 0;
    }
    #footer {
        color:#666666;
        background: #f9f9f9;
        padding: 10px 20px;
        border-top: 5px #efefef solid;
        font-size: 0.8em;
        text-align: center;
    }
    #footer a {
        color: #999999;
    }
    --></style>
</head>
<body>
    <div id="page">
        <div id="header" class="header">
            <h1>Herzlich Willkommen bei <!--ADRESSE//-->preetz.dnsalias.net!<!--ADRESSE//--></h1>
        </div>
        <div id="content">
            <h2>Hier finden Sie die aktuellen Wetterdaten aus Preetz</h2>
            <p class="center"><img src="grafiken/graph_daily.png" alt="Daily Graph"></p>
        </div>
        <div id="footer">
            <p>Powered by <a href="http://www.isilife.de">Isilife GbR</a></p>
        </div>
    </div>
</body>
</html>

Das Ergebnis sieht dann ungefähr so aus:

Posted in Computer & Technik, Hersteller, Kommunikationstechnik, Linux | Tagged , , , , , , , , , | 3 Comments

Grafikkartentreiber für VMware-Gäste bei Windows 2008R2

Bei älteren Windows Versionen wurde bei der Installation der VMware-Tools automatisch ein spezieller Grafikkartentreiber aktiviert. Dieser sorgt dafür das die Maus nicht mehr so nachzieht. Bei Windows 2008R2 wird dieser zwar noch in das Verzeichnis C:\Program Files\Common Files\VMware\Drivers\wddm_video kopiert, aber nicht mehr installiert und aktiviert. Man sollte bei Windows 2008R2 Servern also darauf achten, dass man diesen Treiber hinterher von Hand installiert und aktiviert.

Posted in Computer & Technik, Hersteller, Linux, Windows | Tagged , , , , , | Leave a comment

(SP1)-Installationsfehler: 0x800F0A13 bei der Installation des SP1 für Windows 2008R2

Ich bin extra am Wochenende in die Firma gefahren, um eine Datensicherung eines Windows 2008R2 Servers zu machen und das ServicePack 1 zu installieren. Leider stieg die Installation gleich am Anfang mit folgender Meldung aus:

(SP1)-Installationsfehler: 0x800F0A13

Laut Microsoft Hilfe und Support kann der Fehler durch folgenden, vier Gründe verursacht werden, die bei mir aber nicht zutrafen:

  1. Während des Setup wird die Systempartition nicht automatisch eingebunden bzw. für Windows zugänglich gemacht.
  2. Die Festplatte, auf der sich die Systempartition befindet, wurde vor der Installation von SP1 entfernt.
  3. Windows wird in einem Storage Area Network (SAN) ausgeführt, und der Zugriff auf die Systempartition wurde deaktiviert.
  4. Ein Tool zur Datenträgerverwaltung eines anderen Softwarehersteller wurde zum Kopieren (oder Klonen) des Datenträgers oder der Partition verwendet, auf dem bzw. der SP1 installiert werden soll.

Nachdem ich Google befragt habe, bin ich aber auch auf einen Post im Technet-Blog von joscon gestoßen, der empfahl zuerst das Systemupdate-Vorbereitungstool auszuführen. Falls die Installation danach immer noch nicht funktioniert, gibt es dort auch noch einige andere Lösungsvorschläge. Jedoch keiner dieser Vorschläge hat geholfen.

Die Lösung brachte letztendlich ein Heise Artikel. Nachdem ich wie in den Artikel beschrieben die aktive Partition gesetzt hatte und den Server neu gebootet hatte, funktionierte die Installation des ServicePacks.

Update:
Bei einem anderen Windows 2008R2 Server lief die Installation erst, nachdem ich der vom System reservierten 100 MB Partition einen Laufwerksbuchstaben gegeben hatte. Dazu wurde im Technet Forum geraten.

Posted in Computer & Technik, Hersteller, Windows | Tagged , , , , | Leave a comment

1-wire Wetterstation (Teil 2: Datenbank)

Nachdem man sich eine 1-wire Wetterstation nach dem Artikel 1-wire Wetterstation (Teil 1: Installation) gebaut hat, ist es sinnvoll die gesammelten Daten in einer Datenbank zu speichern. Dazu habe ich mir eine MySQL-Datenbank angelegt.

mysql -u root -p
CREATE DATABASE wetterstation;
quit

In der Datenbank wird danach noch eine Tabelle für die Werte der 1-wire Sensoren benötigt. Da ich pro Minute einen Wert festhalten will habe ich diese daten_min genannt.

mysql -u root -p
connect wetterstation; 
CREATE TABLE daten_min ( 
zeitstempel int UNSIGNED, 
temp_clara FLOAT(7,4) NOT NULL, 
humidity_clara FLOAT(7,4) NOT NULL, 
temp_simon FLOAT(7,4) NOT NULL, 
humidity_simon FLOAT(7,4) NOT NULL, 
PRIMARY KEY (`zeitstempel`));
quit

Zum Schluss habe ich mir dann noch ein PHP-Programm geschrieben, dass die Werte der Sensoren abfragt und in die Tabelle schreibt. Dieses habe ich in der Datei /usr/local/sbin/datensammeln.php gespeichert.

<?php
$DatabaseHost = "localhost";
$DatabaseUser = "root";
$DatabasePassword = "geheim";
$Database = "wetterstation";
$Table = "daten_min";
 
// Aktuelle UNIX-Zeit abfagen
date_default_timezone_set("Europe/Berlin");
$zeitstempel = date("U");
 
// ##### Werte der Sensoren abfragen #####
// Claras Zimmer
$temp_clara = file_get_contents("/var/1wire/26.7ECCCF000000/temperature");
$humidity_clara = file_get_contents("/var/1wire/26.7ECCCF000000/humidity");
 
// Simons Zimmer
$temp_simon = file_get_contents("/var/1wire/26.A0AECF000000/temperature");
$humidity_simon = file_get_contents("/var/1wire/26.A0AECF000000/humidity");
 
// ##### Daten in die Datenbank schreiben #####
$DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword) or die ("Keine Verbindung moeglich");
mysql_select_db($Database, $DatabasePointer) or die ("Die Datenbank existiert nicht");
$ResultPointer = mysql_query("INSERT INTO $Table (
     zeitstempel, temp_clara, humidity_clara, temp_simon, humidity_simon
   ) VALUES (
     '$zeitstempel', '$temp_clara', '$humidity_clara', '$temp_simon', '$humidity_simon'
   )");
?>

Damit man php in der Shell laufen lassen kann wird übrigens das Paket php5-cli benötigt. Dieses kann man mit dem folgenden Befehl installieren

apt-get install php-cli

Zum Schluss habe ich einen Cronjob angelegt, der alle 60 Sekunden das PHP-Script ausführt.

Posted in Computer & Technik, Kommunikationstechnik, Linux | Tagged , , , , , , , , , , | 4 Comments

Ubuntu: WLAN beim booten automatisch starten

Bei Ubuntu wird das WLAN-Interface normaler Weise über den Networkmanager gestartet. Dies bedeutet, dass man sich mit einem Benutzer an der grafischen Oberfläche anmelden muss, damit sich das WLAN aktiviert. Bei Servern und anderen Gräten ohne grafische Oberfläche möchte man aber oft sofort nach dem Booten ein funktionierendes WLAN. In diesem Fall sollte man wpa_supplicant installieren und konfigurieren. Eine Anleitung dazu findet man auf der Webseite wiki.ubuntuusers.de.

Posted in Computer & Technik, Kommunikationstechnik, Linux | Tagged , , , , | Leave a comment

Ubuntu als Router verwenden

Bei einer Standard-Installation von Ubuntu ist das Routing bzw. IP-Forwarding deaktiviert. Das IP-Forwarding kann aber mit dem folgenden Befehl temporär aktiviert werden:

sudo sysctl -w net.ipv4.ip_forward=1

Wenn man es dauerhaft einschalten möchte muss in der Datei /etc/sysctl.conf die Variable net.ipv4.ip_forward auf 1 gesetzt werden. Die Zeile sollte dann wie folgt aussehen:

net.ipv4.ip_forward=1
Posted in Computer & Technik, Hersteller, Linux | Tagged , , | Leave a comment

OMSA unter Ubuntu für den Dell PERC H700 einrichten

In den Dell PowerEdge Servern wird aktuell häufig der PERC H700 RAID-Controler verbaut. Als ich Heute bei einem solchen Server – der mit der aktuellen “Long Term Support” Ubuntu-Version “10.04 LTS” läuft – den OMSA (OpenManage Server Administrator) installierte, überraschte mich dieser gleich mit der Warnung: Controller 0 [PERC H700 Integrated]: Driver '00.00.04.01' is out of date.

Nach ein wenig Recherche im Internet zeigte sich, dass der Treiber 00.00.04.01 eigentlich o.k. ist. Da bei RedHat und SuSe aber inzwischen neuere Treiber verwendet werden, verlangt der OMSA hier den neuen.

Da mich die Warnung in der Überwachung stört, habe ich diese einfach abgeschaltet. Dazu ändert man einfach die Datei lsiver.cfg entsprechend ab. Wenn man das OMSA 6.4 Paket von Dell installiert hat (dieses finde man unter der URL: http://linux.dell.com/repo/community/deb/), liegt diese Datei in dem Verzeichnis /opt/dell/srvadmin/etc/srvadmin-storage/.

In der Datei lsiver.cfg gibt es einen Abschnitt der wie folgt beginnt:

ID=0x1F17
VENDORID=4
NAME=PERC H700 Integrated

In diesem Abschnitt steht etwas weiter unten die Zeile:

DEF-LX26-64=00.00.04.27

Wenn man hier die 27 in 01 ändert und alle OMSA Services (am besten den ganzen Server) neu startet ist der Alarm weg.

Posted in Computer & Technik, Hersteller, Linux | Tagged , , , , , , | Leave a comment

Aus der Dell OMSA Live-CD einen Live-USB-Stick machen

Bei heutigen Server kommt es oft vor, dass man kein CD-ROM oder DVD Laufwerk mehr hat. In diesem Fall kann es sehr nützlich sein, anstelle einer Live-CD einen Live-USB-Stick zu haben. Dazu benötigt man nur das Image der OMSA Live-CD von dem Webserver von Dell (die aktuelle Version ist die OMSA Lice-CD 6.4) und den liveusb-creator. Und schon kann man sich innerhalb von wenigen Minuten einen Dell OMSA Live-USB-Stick erstellen.

Posted in Computer & Technik, Hersteller, Linux | Tagged , , , | Leave a comment

Broadcom NetXtreme II Firmware unter Debian

Ab Debian 5 ist die Firmware für die Broadcom NetXtreme II Netzwerkkarte (diese ist z.B. bei HP DL3xx und Dell PowerEdge Servern verbaut) in die non-free Paketquellen verschoben worden. Wenn man einen Server neu installiert oder aktualisiert hat muss man diese gegebenenfalls wie folgt nachinstallieren:

apt-get install firmware-bnx2

Die Voraussetzung ist natürlich, dass die non-free Paketquellen eingebunden sind.

Posted in Computer & Technik, Hersteller, Linux | Tagged , , , , , , | 1 Comment

Dell OMSA 6.3 Live CD

Wie gewohnt hat Dell mal wieder eine aktualisierte Live CD mit dem OMSA (Open Manage Server Agent) 6.3 auf Basis von CentOS bereit gestellt. Man findet diese auf einem FTP-Server von Dell unter der folgenden URL: http://linux.dell.com/files/openmanage-contributions/omsa-63-live/

In der Vergangenheit hatte Dell bereit regelmäßig solche Live CDs veröffentlicht. darüber habe ich bereit in dem Post OMSA 5.5 LiveCD mit vielen Dell-Treibern und Diagnose-Tools berichtet.

Posted in Computer & Technik, Hersteller, Linux | Tagged , , , | Leave a comment