Tag Archive: Skript


Kein Plan wie ich mal auf die Idee gekommen bin, aber zurzeit habe ich circa 20 Temperatursensoren im Haus verteilt^^ Ich will hier mal kurz dokumentieren wie man das am Kostengünstigsten und am besten umsetzen kann.

Temperaturmessung

Als Temperatursensor kommt der Dallas DS18B20 zum Einsatz. Der Sensor ist bereits sehr hoch integriert und benötigt keine externe Beschaltung. Alle Sensoren werden einfach mit GND, +5V und einem „Eindraht-Bus“ (beziehungsweise One-Wire-Bus) verbunden. Man kann sogar den VDD Pin (an dem im normalen Modus +5 Volt anliegen) auf GND legen. Indem Fall (parasitäre Spannungsversorgung) läuft die Kommunikation über einen internen Kondensator, der über den „Eindraht-Bus“ geladen wird.

Um die Sensoren im Haus zu verteilen, braucht man ein paar Meter Kabel. Zur maximalen Leitungslänge und empfohlenen Topologie gibt’s hier Informationen. Da meine Installation aber nicht so groß ist, war das nicht so kritisch. Ich habe teilweise auch eine Sterntopologie im Einsatz. An Kabel habe ich alles genommen, was ich gerade da hatte. Aus Gründen der Erweiterbarkeit für spätere Projekte habe ich auch, wo es möglich war, noch eine vierte Leitung mit verlegt.
Um keine Löcher bohren zu müssen, habe ich auch ein bisschen getrickst und alle Sensoren im Keller über ein unbenutztes Koaxialkabel angeschlossen …
Als Stecker für die Sensoren oder Verteiler für Kabel (Sterntopologie) habe ich Präzisions-Buchsenleiste benutzt.
Die ganzen Leitungen kommen bei mir in einem Raum (ich habe die Sensoren auf drei getrennte „Eindraht-Busse“ gelegt). Die „Eindraht-Busse“ sind mit einem AVR Net-IO verbunden. Den Aufbau und meine Veränderungen/Verbesserungen am AVR Net-IO beschreibe ich in einem späteren Blogbeitrag. Auf dem AVR Net-IO läuft Ethersex. Die Ethersex Firmware holt wirklich alles raus, was die leistungsschwachen AVRs so können. Die Firmware, die auf fd0 zurückgeht, implementiert heute sehr viele Protokolle und Funktionen. Beim Konfigurieren der Firmware kann man Auswählen was man an Funktionen so haben möchte. Das bisschen IPv4 und „Eindraht-Bus“ Unterstützung passt locker auf den 32 KB Flash Speicher des Atmega 32 … Es werden zwar ein paar RFCs verletzt (zum Beispiel auf TCP Ebene), aber es funktioniert. In den 32 KB ist übrigens auch ein HTTP Server mit drin. Und nein, das KB ist kein Schreibfehler.

Auswerten

Um die Sensordaten vernünftig auswerten zu können, benötigt man noch eine Möglichkeit die Daten über einen längeren Zeitraum speichern und analysieren zu können. Hierfür kenne ich zwei geeignete Möglichkeiten:

  1. RRDtool
  2. Volkszaehler.org

Das RRDtool ist das klassische Werkzeug für solche Aufgaben, welches ich auch bereits im Zusammenhang mit Munin im Einsatz habe. Allerdings ist RRDtool nicht so schön in der Auswertung. Üblicherweise werden die Messwerte als PNG-Bild vorberechnet beziehungsweise bei Bedarf berechnet und dann dargestellt. Wenn man allerdings nur einzelne Sensorwerte über einen bestimmten Zeitraum vergleichen möchte, ist das ohne Frage möglich, aber dafür müsste man wohl auf die Kommandozeile. Deshalb habe ich mich für Möglichkeit zwei entschieden. Volkszaehler.org bietet auch noch den Vorteil, dass eine Datenbank die Messwerte speichert und keine Round-Robin-Database, bei der alte Messwerte mit der Zeit verworfen werden.

Die Installation und Einrichtung von Volkszaehler.org ist nicht ganz einfach aber durchaus machbar. Kenntnisse von SQL und anderen Sprachen sind hilfreich …
Als Datenbank benutze ich zurzeit MySQL. Ich würde aber heute eigentlich mehr zu PostgreSQL tendieren.

Um nun die Messwerte der Temperatursensoren in die Datenbank zu bekommen, benutze ich ein Perl-Skript vom Volkszaehler.org-Projekt. Dieses Skript wird regelmäßig per cron ausgeführt. Das Skript veranlasst alle am AVR Net-IO angeschlossenen „Eindraht“-Temperatursensoren einzeln ihre Temperatur zu messen. Danach werden die Temperaturen abgefragt. Anschließend wird die Temperatur über die API vom Volkszaehler.org-Projekt in der Datenbank gespeichert.

Das ist alles. Die Auswertung gestaltet sich nun sehr elegant über die Weboberfläche.

Änderungen 2015: Anstelle des AVR Net-IO Board benutze ich aktuell firmata auf einem Arduino als Onewire Busmaster.

Advertisements

Nachdem ich jetzt einigermaßen Perl programmieren kann, habe ich mal eine Idee umgesetzt, die mir vor ein paar Jahren gekommen war. Als interessierter CRE Hörer dachte ich mir, man könnte ja mal einen Graphen erstellen, auf dem man sehen kann, auf welche Folgen sich eine CRE-Ausgabe bezieht. Das habe ich jetzt mal umgesetzt. Hier ein kleiner Ausschnitt.

Aus dem Graphen kann man erkenne, dass sich CRE106 Mikrokopter auf CRE074 Hubschrauber bezieht. Gleichzeitig beziehen sich drei Episoden auf CRE106. Und so weiter …

Der komplette Graph ist hier zu finden. Ich habe allerdings alle Folgen rausgelassen, die keine Verbindung zu anderen haben. Der Graph ist aber trotzdem sehr groß. Vielen Dank Tim für die zahllosen Stunden.

Der Quellcode und die Dokumentation ist bei GitHub zu finden.

Ich hab mir mal Gedanken gemacht, wie ich automatisch eine Sicherheitskopie von meinem Blog erstellen kann. Dabei ist dieses Skript entstanden. Das Skript lässt sich an das in Python geschriebene twill-sh (auf Debian basierten Systemen ist es im Paket python-twill enthalten) verfüttern. Mit twill-sh ist es sehr leicht, irgendetwas über HTTP zu automatisieren. Da es so ziemlich die ganze Arbeit übernimmt (HTTP(S), Parsen der Seiten, Cookies, HTML-Formulare) und man es vorher interaktiv (Ich sollte vielleicht sagen, dass es ein Kommandozeilenprogramm ist …) testen kann.

setlocal url https://ypid.wordpress.com/wp-login.php	## change this
setlocal username YOUR_USER	## change this
setlocal password YOUR_PASSWORD	## change this

go $url
formvalue 1 user_login $username
formvalue 1 user_pass $password
submit
code 200

#go ./export.php
#follow "Daten exportieren"
#submit

	## change this
go "https://ypid.wordpress.com/wp-admin/export.php?download=true&content=all&cat=0&post_author=0&post_start_date=0&post_end_date=0&post_status=0&page_author=0&page_start_date=0&page_end_date=0&page_status=0&submit=Export-Datei+herunterladen"
code 200
save_html "ypid.wordpress.xml"

go ./wp-login.php?action=logout

Das Skript meldet sich bei WordPress an, lädt die „WordPress eXtended RSS“ Datei herunter und meldet sich wieder ab. Ich hab zuerst versucht das HTML-Formular zu benutzten, kam aber nicht ans Ziel. Also habe ich diese etwas längere URL genommen, die normalerweise mit dem Formular entstehen würde. Bei dem momentanen Umfang dieses Blogs dauert es 13,8 Sekunden, bis das Skript terminiert. Die XML-Datei ist zur Zeit 62,5 KB groß.

Ausgeführt wird das Skript bei mir mit:

twill-sh -q config/twill-wordpress-ypid
#mv ypid.wordpress.xml "data/ypid.wordpress/ypid.wordpress.`date --iso`.xml"

Das Ganze lässt sich dann auch über cron aufrufen (zum Beispiel täglich). Zudem kann man die Dateien noch mit einem Versionskontrollsystem (bei mir git) verwalten.