Der Volkszähler ist ein schönes Projekt und ist jedem zu Empfehlen der zum Beispiel seine Stromkosten und dergleichen im Blick haben will. Alles was man zum Einstieg braucht findet man unter http://volkszaehler.org/ .

Um eigene Projekte auf die Beine zu stellen ist es sinnig wenn man nicht gerade 2 linke Hände hat und z.B. mit einem Lötkolben umgehen kann um eigene Hardware zusammen zu stellen. Im weiteren Verlauf dieser Artikel beschreibe ich wie ich was gemacht habe.

Ein eigener Server ist zwar nicht zwingend eine Voraussetzung aber ich kann jede Menge Spielereien machen ohne mich bei irgendwem zu rechtfertigen.

volkszaehler

 

Um mich in die Thematik einzuarbeiten habe ich zunächst erst einmal einen Stromzähler nur für meinen Serverschrank gebaut. Zu diesem Zweck habe ich bei http://stores.ebay.de/TOP-MESSTECHNIK einen Wattmeter ZD1 für 20,89 € gekauft.

Das Controllerboard ist eine Eigenentwicklung von mir. Ein Quartz mit den Kondensatoren befindet sich unter dem ATMega 644. In die Fassung links oben kann ein Ethernetmodul gesteckt werden welches man hier als Bausatz für 15 € bekommt.

Als Betriebssystem kam für mich nur Ethersex in Frage. Dieses BS arbeitet sehr gut mit dem Volkszähler zusammen.

IMG_3235 IMG_3234 IMG_3233

Die Wetterstation

Grundlage der Wetterstation ist das NET-IO-Board von Pollin. Ich habe mir einen Bausatz gekauft und nur zum Teil bestückt da nicht alle Teile benötigt werden. Die Software ist eine modifizierte von RoBue Version 1.5. Auf meinem Hauseigenen Debianserver läuft eine MySQL-Datenbank und alle 15 min. fragt ein PHP-Script die Wetterstation ab und trägt die Daten in die Datenbank ein. Bis jetzt (April 2013) habe ich je einen D18S20 für die Innen- und Außentemperatur sowie einen Fotowiderstand zur Helligkeitsmessung angeschlossen.

 

Das PHP-Script

Ursprünglich war das Script mal für eine andere Datenbank gedacht. Aber in der jetzigen Form funktioniert das auch ganz klasse. Deswegen habe ich es so gelassen. PHP-Scripten ist nicht gerade meine Stärke, wer also Verbesserungen sieht, bitte melden.Meine Wetterstation hat die Adresse 192.168.1.203. Die Fett und Rot gedruckten Angaben müssen natürlich an die eigenen Gegebenheiten angepasst werden. Auf meinem Server wird dieses Script vom CRON alle 15 Minuten aufgerufen.

__________________________________________________________________________________

<?php

// daten.html holen und als daten.txt speichern —— //
$file = „http://192.168.1.203/daten.html“;
$newfile = „daten.txt“;

if (!copy($file, $newfile)) {
echo „copy $file schlug fehl !\n“;goto end; // Sollte der AVR nicht erreichbar sein wird hier das Script abgebrochen.
}

// Es kann vorkommen das die Datei keine Daten enthält, das wird hier durch ermitteln der Dateigröße abgefangen
if (file_exists ($newfile) && is_file ($newfile))
// Dateigroesse ermitteln und in Variable speichern
$dateigroesse = filesize ($newfile);
if (($dateigroesse) > 1)
echo „Die Datei “ . $newfile . “ ist “ . $dateigroesse . “ Bytes gross!\n“;
else goto end;

// Liest Zeile für Zeile bis zum Ende der Datei und zeigt die Daten an //
$daten = fopen(„daten.txt“, „r“);
while(!feof($daten))
{
$inhalt = fgets($daten,1024);

$data = $inhalt;
list($temperatur, $temp_min, $temp_max, $temp_aussen, $temp_aussen_min, $temp_aussen_max, $tageslicht) = explode(„|“, $data);

// Aussentemperatur

$buffer = “;
$host = ‚hostname‚;
$path = ‚/middleware.php/data/uuid.json?operation=add&value=‘;
$data = ‚message=‘.urlencode(‚AVRWetter‘);
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
$buffer .= „$errstr ($errno)<br />\n“;
} else {
$out = „POST „.$path.““.$temp_aussen.“ HTTP/1.1\r\n“;
$out .= „Host: „.$host.“\r\n“;
$out .= „Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n“;
$out .= „Content-Length: „.strlen($data).“\r\n“;
$out .= „Connection: Close\r\n\r\n“;
fwrite($fp, $out);
while (!feof($fp)) {
$buffer .= fgets($fp, 128);
}
fclose($fp);
}

// Innentemperatur
$buffer = “;
$host = ‚hostname‚;
$path = ‚/middleware.php/data/uuid.json?operation=add&value=‘;
$data = ‚message=‘.urlencode(‚AVRWetter‘);
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
$buffer .= „$errstr ($errno)<br />\n“;
} else {
$out = „POST „.$path.““.$temperatur.“ HTTP/1.1\r\n“;
$out .= „Host: „.$host.“\r\n“;
$out .= „Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n“;
$out .= „Content-Length: „.strlen($data).“\r\n“;
$out .= „Connection: Close\r\n\r\n“;
fwrite($fp, $out);
while (!feof($fp)) {
$buffer .= fgets($fp, 128);
}
fclose($fp);
}

// Tageslicht
$buffer = “;
$host = ‚hostname‚;
$path = ‚/middleware.php/data/uuid.json?operation=add&value=‘;
$data = ‚message=‘.urlencode(‚AVRWetter‘);
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
$buffer .= „$errstr ($errno)<br />\n“;
} else {
$out = „POST „.$path.““.$tageslicht.“ HTTP/1.1\r\n“;
$out .= „Host: „.$host.“\r\n“;
$out .= „Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n“;
$out .= „Content-Length: „.strlen($data).“\r\n“;
$out .= „Connection: Close\r\n\r\n“;
fwrite($fp, $out);
while (!feof($fp)) {
$buffer .= fgets($fp, 128);
}
fclose($fp);
}

exit;
}

end:
fclose($daten);
unlink(‚daten.txt‘);    // Datei löschen
unset ($daten);        // Alle Variablen löschen
unset ($dateigroesse);
unset ($temperatur);
unset ($temp_min);
unset ($temp_max);
unset ($temp_aussen);
unset ($temp_aussen_min);
unset ($temp_aussen_max);
unset ($tageslicht);
exit;
?>