Temperatur-Überwachung – Cron-Scripte to MySQL

Nächster Schritt: regelmässiges Schreiben der Sensoren-Werte in eine MySQL-Datenbank.

Und wenn ich schon mit einer Datenbank anfange, wird auch die „sensoren.db“ aus dem vorherigen Post in die Datenbank verschoben.

Schritt 1: Datenbank erstellen: Name ‚templog‘

2 Tabellen:

CREATE TABLE `templog`.`Sensoren` (
`ID` VARCHAR(16) NOT NULL ,
`Name` VARCHAR(50) NOT NULL ,
`Temp_Max` INT NOT NULL ,
`Temp_Min` INT NOT NULL
) ENGINE = InnoDB CHARSET=utf8 COLLATE utf8_german2_ci;

Die Spalten Temp_Max und Temp_Min werden vorläufig nicht gebraucht, for future use…

CREATE TABLE `logging` (
`ID` varchar(16) NOT NULL,
`Temperatur` int(11) NOT NULL,
`datetime` datetime NOT NULL
) ENGINE = InnoDB CHARSET=utf8 COLLATE=utf8_german2_ci;

ggfs. kann man noch Primärschlüssel und/oder Indizes anlegen. Das ist aber vorläufig nicht notwendig.

Jetzt geht’s an das PHP-script, das die Werte in die Datenbank schreibt.

Version1: Sensoren aus Datenbank einlesen

//Alle Fehlermeldungen einschalten
error_reporting(E_ALL);

//Definition der Verbindungsdaten
define ( 'MYSQL_HOST','NAME/ADRESSE-MYSQL-SERVER');
define ( 'MYSQL_BENUTZER', 'USERNAME' );
define ( 'MYSQL_KENNWORT', 'PASSWORD' );
define ( 'MYSQL_DATENBANK', 'templog' );

//Verbindung herstellen
$link = mysqli_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);
if ( !$link ) //Fehlerbehandlung
{ die('Verbindung fehlgeschlagen: ' . mysqli_error()); }
mysqli_set_charset($link, 'utf8');

//Einlesen aller Sensoren
$sql = "SELECT * FROM Sensoren";
$result = mysqli_query( $link, $sql );
if ( ! $result ) //Fehlerbehandlung
{ die('Fehler bei Abfrage: ' . mysqli_error()); }

//Durchlaufen aller Sensoren
while ($z = mysqli_fetch_array( $result, MYSQLI_ASSOC))
{ //Auslesen der Temperatur aus den Sensoren
$filename="/sys/bus/w1/devices/".$z['ID']."/w1_slave";
$lines=file($filename);
$temp=substr($lines[1],strpos($lines[1],"t=")+2,5);
//echo $z['ID'].";".$z['Name'].";".$z['Temp_Max'].";".$z['Temp_Min'].";".($temp/1000.0).";".date("Y-m-d H:i:s")."\n"

//Schreiben der aktuellen Temperatur in die Datenbank
$sql="INSERT INTO logging (ID, Temperatur, datetime) Values ('".$z['ID']."', '".$temp."', '".date("Y-m-d H:i:s")."')";
$write_result = mysqli_query( $link, $sql );
if ( ! $write_result ) //Fehlerbehandlung
{ die('Fehler bei Abfrage: ' . mysqli_error()); }
}
mysqli_free_result( $result );
mysqli_close($link);

Version2: Sensoren aus Device-Tree einlesen

//Alle Fehlermeldungen einschalten
error_reporting(E_ALL); 

//Definition der Verbindungsdaten
define ( 'MYSQL_HOST','NAME/ADRESSE-MYSQL-SERVER');
define ( 'MYSQL_BENUTZER', 'USERNAME' );
define ( 'MYSQL_KENNWORT', 'PASSWORD' );
define ( 'MYSQL_DATENBANK', 'templog' );
//Verbindung herstellen
$link = mysqli_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT, MYSQL_DATENBANK);
if ( !$link ) //Fehlerbehandlung
{ die('Verbindung fehlgeschlagen: ' . mysqli_error()); } mysqli_set_charset($link, 'utf8'); 

//Verzeichnis der Sensoren durchsuchen
$vz="/sys/bus/w1/devices/";
$allfiles=scandir($vz);
foreach ($allfiles as $ID)
{
  if (substr($ID,0,3)=="28-") //nur Sensoren, die mit 28- beginnen, werden ausgewertet
  {
    //Auslesen der Temperatur aus den Sensoren
    $filename="/sys/bus/w1/devices/".$ID."/w1_slave";
    $lines=file($filename);
    $temp=substr($lines[1],strpos($lines[1],"t=")+2,5); 

    //Schreiben der aktuellen Temperatur in die Datenbank $
    sql="INSERT INTO logging (ID, Temperatur, datetime) Values ('".$ID."', '".$temp."', '".date("Y-m-d H:i:s")."')";
    $write_result = mysqli_query( $link, $sql );
    if ( ! $write_result ) //Fehlerbehandlung
    { die('Fehler bei Abfrage: ' . mysqli_error()); }
  }
}
mysqli_close($link); 

Und zu guter letzt der Cron-eintrag

*/30 *   * * *   root	php /PFAD/tempread.php

Auslesen und Schreiben der Werte alle 30 Minuten

3 Gedanken zu „Temperatur-Überwachung – Cron-Scripte to MySQL

  1. Und jetzt als naechsten Artikel noch schoen ein lokal zu installierendes Nagios-Plugin schreibseln, dass die Werte aus der DB liest. Auf dem remote-Ende (Nagios-Server) dann die Schwellwerte definieren, bei denen Warning- sowie Error-Meldungen angzeigt und gemailt werden.

Schreibe einen Kommentar