Kategorien
Raspberry Pi

Raspberry Pi – Keep alive zum Webserver senden

Keep_alive
Das schöne an der Raspberry Pi im Gegensatz zu Mikrocontrollern oder auch Arduino ist, dass die Kommunikation mit dem Internet sehr einfach ist.

Von Haus aus ist eine Netzwerkschnittstelle vorhanden. Eine UMTS – Karte bekommt man sicherlich auch ans Laufen, also eignet sich die Pi sehr gut um Daten / Messwerte ins Netz zu stellen.

Und wie so vieles beginnt dieses mit einem keep alive Signal, ein kleiner Ruf in die Welt, dass die Pi arbeitet und verfügbar ist.Dann noch ein kleines Script, was die Lebenssignale ansprechend darstellt (siehe ganz unten auf der Seite) und schon macht die Sache einen sehr positiven Eindruck.
Wie in der Grafik dargestellt, bedarf es nicht sehr viel, um ein solches ‘Mini’ Projekt umzusetzen.
Ein zeitlich gesteuertes Script (cron) ruft in regelmäßigen Abständen ein Script auf einem Webserver auf, welches einen Eintrag in einer Datenbank vornimmt.
Ruft ein Besucher die Webseite in der die Daten präsentiert werden sollen auf, werden durch ein weiteres serverseitiges Script die Daten zur Verfügung gestellt und präsentiert.

In den folgenden Ausführungen stelle ich die von mir verwendeten Scripts und die Präsentation der Werte am Ende vor.

Perl Script auf der Raspberry Pi

#!/usr/bin/perl -w
# Dieses Script startet ein php script auf meiner Webseite und übergibt via 
# POST Request die aktuelle Zeit, um zu zeigen, dass die RaspberryPi am Leben ist.
# Henry Koch - 20.10.2012 
use strict;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my $CTIME_String = localtime(time);
 
my $browser = LWP::UserAgent->new;
my $resp = 	(POST 'www.xyz.de/dir/dir/script.php', 
			['Timestamp' => $CTIME_String);
 
my $response_to_discard = $browser->request($resp);
print $response_to_discard;

 

PHP Script zum Eintrag der Timestamps in die Web-Datenbank

<?php
//20.2.2013 Dieses Script wird von meiner Raspberry Pi aufgerufen und 
//schreibt Keep alive Timestamps in eine Datenbank Tabelle
//Die Anzahl der Tabelleneinträge ist auf 432 begrenzt 
 
//Anpassung erforderlich
$DBHost   = "HOST";
$DBName   = "DB";
$DBUser   = "ICH";
$DBPasswd = "DU";
$conn = mysql_connect($DBHost, $DBUser, $DBPasswd);
mysql_select_db($DBName);
 
//maximal 432 Datensätze in der Tabelle halten
$sql = "SELECT `lfd_Nr` FROM `keepalive_Tabelle` ORDER BY lfd_Nr 
	DESC LIMIT 430,1";
 
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
//laufende Nummer des 432-sten Datensatzes, also des ältesten Erlaubten
$nr = $row['lfd_Nr'];
mysql_free_result($result);
 
$sql = "DELETE FROM `keepalive_Tabelle` WHERE `lfd_Nr` < " . $nr . " ";
$result = mysql_query($sql);
mysql_free_result($result);
 
//Insert Timestamps (dann sind es wieder 432)
$sql = "
	INSERT INTO `keepalive_Tabelle` ( `lfd_Nr`, `ts_Garage`, 
					  `ts_Server`, `RemoteIP` )
	VALUES (
		'', '" . $_POST['Timestamp'] . "', '" . time() . "', '" . 
			 $_SERVER['REMOTE_ADDR'] . "'
	);
";
$result = mysql_query($sql);
mysql_free_result($result);
mysql_close($conn);
echo "Keepalive was run successfully";
?>

 

Parameter der verwendeten Tabelle

CREATE TABLE `keepalive_tabelle` (
  `lfd_Nr` INT(11) NOT NULL AUTO_INCREMENT,
  `ts_Garage` BIGINT(20) NOT NULL,
  `ts_Server` BIGINT(20) NOT NULL,
  `RemoteIP` VARCHAR(25) COLLATE latin1_german1_ci NOT NULL,
  PRIMARY KEY  (`lfd_Nr`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci 
  AUTO_INCREMENT=1 ;

 

PHP Script zum Aufarbeiten der Daten

<?php
//20.2.2013 Dieses Script dient zur Aufbereitung der keep alive Daten,
//die die Pi gesendet hat
//Anpassung erforderlich
$DBHost = "HOST";
$DBName = "DB";
$DBUser = "ICH";
$DBPasswd = "DU";
$conn = mysql_connect($DBHost, $DBUser, $DBPasswd);
mysql_select_db($DBName);
 
$sql = " SELECT ts_Server, lfd_Nr
FROM keepalive_tabelle
ORDER BY lfd_Nr DESC";
 
$rows = mysql_query($sql);
$first = true;
$totalCount = 0;
$tage = null;
while ($row = mysql_fetch_assoc($rows)) {
if ($first) {
$totalCount = $row['lfd_Nr'];
$first = false;
}
$timestamp = $row['ts_Server'];
if (isset($tage[date('d.n.Y', $timestamp)])) $trenner = " - ";
else $trenner = "";
$tage[date('d.n.Y', $timestamp)] .= $trenner . date('H:i', $timestamp);
}
mysql_free_result($rows);
mysql_close($conn);
echo "<h3>Die Pi hat insgesamt $totalCount Keep alive Signale gesendet</h3>";
echo "<p>Das sind die letzten 432!</p>";
 
foreach ($tage as $key => $value){
echo "<p><b>" . $key . "</b><br \>" . $value . "</p>";
}
?>

 

Präsentation der Zeitpunkte, zu denen sich die Raspberry Pi gemeldet hat.

Von Henry Koch

take a look at: http://www.henrykoch.de/privat.html

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.