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.

Kategorien
Raspberry Pi

Intro – RaspberryPI

Seit November 2012 bin ich stolzer Besitzer einer Raspberry Pi. Nach Monate langer Wartezeit, war ich dann doch endlich an der Reihe :-).

Nun werde ich hier von Zeit zu Zeit berichten, was ich so mit dem Teil anstelle.
Mir schwebt vor das embedded Linux System in die Steuerung zur Erzeugung und dem Verbrauch von Sonnenenergie und Windenergie in meiner Garage mit einzubinden.

Da kommen stehen am Anfang die ersten Herausforderungen an, da das Modell B mit bis zu 5 Watt doch recht viel Strom verbraucht.
Gerade in den Wintermonaten gestaltet sich das als recht unvorteilhaft. Es gibt aber reichlich Literatur und Hinweise zum Thema im Netz und so versuche ich mal Fortschritte zu machen.
Der erste Eindruck, was es so gibt für 35 Euro: Ich bin sicher, dass die ersten Weltraumflüge wesentlich schlechter ausgerüstet waren! – Damit kann man bestimmt zum Mond fliegen!