Inhaltsverzeichnis:

Raspberry Pi kontrollierte Raumtemperaturüberwachung mit Gnuplot-Bildausgabe und E-Mail-Warnfunktion - Gunook
Raspberry Pi kontrollierte Raumtemperaturüberwachung mit Gnuplot-Bildausgabe und E-Mail-Warnfunktion - Gunook

Video: Raspberry Pi kontrollierte Raumtemperaturüberwachung mit Gnuplot-Bildausgabe und E-Mail-Warnfunktion - Gunook

Video: Raspberry Pi kontrollierte Raumtemperaturüberwachung mit Gnuplot-Bildausgabe und E-Mail-Warnfunktion - Gunook
Video: BitBastelei #489 - DIY Temperaturüberwachung mit DS18B20 2024, Juni
Anonim
Raspberry Pi-gesteuerte Raumtemperaturüberwachung mit Gnuplot-Bildausgabe und E-Mail-Benachrichtigungsfunktion
Raspberry Pi-gesteuerte Raumtemperaturüberwachung mit Gnuplot-Bildausgabe und E-Mail-Benachrichtigungsfunktion

Wo ich arbeite, gibt es einen sehr wichtigen Raum, in dem viele Computer untergebracht sind. Die Umgebungstemperatur dieses Raums muss sehr kühl sein, um die Leistung dieser Systeme zu optimieren. Ich wurde gebeten, ein Überwachungssystem zu entwickeln, das in der Lage ist, eine Art Alarm an ein paar Leute zu senden, die sie benachrichtigen, dass etwas mit der Klimaanlage in diesem Raum nicht stimmt. Die Hardware für diesen Build habe ich verwendet Raspberry pi und ein USB-Temperatur- und Feuchtigkeitssensor. Zur Überwachung habe ich Gnuplot verwendet, um drei Temperaturdiagramme zu zeichnen und ein Bild dieser Diagramme zu erstellen. Ich habe dann eine dedizierte HTML-Seite erstellt, die auf dem Raspberry Pi gehostet wird, damit die aktuellen Bedingungen, diese gnuplot-Ausgabebilder, von einer Webseite in unserem Netzwerk aus überwacht werden können. Für die Benachrichtigung habe ich mich für Gmail entschieden. Ich hatte einige Beispielcodes in einem Linux User Magazin gefunden. (Natürlich können Sie jeden Mailserver verwenden, wenn Sie die notwendigen Portzuweisungen kennen.) Dafür habe ich ein dediziertes Gmail-E-Mail-Konto für diese Benachrichtigungen erstellt. Als zusätzliches Feature füge ich, wenn eine Warnung ausgelöst wurde, ein Diagramm an die E-Mail an, damit die Person, die die E-Mail erhält, eine Vorstellung davon bekommt, wie drastisch der Anstieg die Warnung verursacht hat.

Schritt 1: Das Hardware-Setup

Das Hardware-Setup
Das Hardware-Setup

Es gibt nicht viel, um die Hardware einzurichten. Auf dem Raspberry Pi läuft Raspian und der USB-Temperatursensor wird einfach direkt in einen der USB-Ports gesteckt. Der Stromverbrauch dieses Sensors ist minimal und daher habe ich ihn direkt vom Raspberry Pi mit Strom versorgt. Für USB-betriebene Geräte mit etwas mehr Stromverbrauch würde ich jedoch empfehlen, sie über einen mit Strom versorgten USB-Hub und nicht direkt über den USB-Port des Raspberry Pi mit Strom zu versorgen Feuchtigkeitswerte der aktuellen Bedingungen. Temperatur = 20,9 ° C Feuchtigkeit = 62,7 % Taupunkt = 13,0 ° CA Python-Skript analysiert diese Zeichenfolge und speichert die Temperatur- und Feuchtigkeitswerte alle fünf Minuten in drei Textdateien; eine tägliche, 24-Stunden- und 48-Stunden-Textdatei (Die Unterschiede werden später im HTML-Abschnitt besprochen). Aus diesen Dateien generiert Gnuplot die Grafiken und anschließend die Bilder des Datensatzes in jeder Datei. Bevor ich das Python-Skript bespreche, werde ich über die Vorbereitung des Raspberry Pi sprechen. Da die Überwachung online erfolgen soll, muss ein Webserver installiert werden. Ich habe ein paar davon in meiner Zeit auf dem Raspberry Pi ausprobiert, aber obwohl es ein bisschen groß ist, bevorzuge ich Apache. Um Apache auf Ihrem Raspberry Pi zu installieren, geben Sie einfach ein: sudo apt-get install apache2 Sie erhalten vor der Installation eine Eingabeaufforderung, drücken "y" für Ja und Apache wird je nach Ihrem Raspberry Pi einige Minuten lang installiert Wenn Sie fertig sind, müssen Sie zwei Python-Plug-Ins installieren: python-serial und den python-gnuplot-Plug. (Obwohl ich festgestellt habe, dass neuere Raspian-Builds den Python-Serial-Plug-In-Standard haben, aber nur um sicher zu gehen.) Um diese zu installieren, geben Sie Folgendes ein: sudo apt-get install python-serial python-gnuplot Noch einmal, nachdem Sie die Eingabeaufforderungen bestätigt haben, diese Plug-in -ins wird installiert. Und damit ist das Hardware-Setup abgeschlossen.

Schritt 2: Software-Setup - E-Mail-Setup und Empfänger

E-Mail-Adresse erstellen Bevor wir zu weit in die Software einsteigen, wäre jetzt ein guter Zeitpunkt, um ein Gmail-Konto zu erstellen, von dem aus Sie Ihre E-Mail-Benachrichtigungen senden können. (Dieses Beispiel verwendet GMail, aber jeder Mailserver kann verwendet werden, sobald wir die SMTP-Porteinstellungen kennen) Der Python-Code ist ziemlich einfach, aber die erforderlichen Importe sind entscheidend. Ohne sie würde nichts funktionieren. from time import *import time import serial import smtplib import Gnuplot import os import sysEndlich die Mailingliste. Natürlich müssen wir die Empfänger der E-Mail hinzufügen. Jede E-Mail-Adresse wird in einer Variablen gespeichert.from_address = '[email protected]'to_address1 = 'recipient1.mail.com' to_address2 = 'recipient2.mail.com'username = '[email protected]' password = 'custom_email_password'

Schritt 3: Software-Setup - Serielles Setup und Parsing

Als nächstes schauen wir uns das serielle Setup an. Es ist nur eine Frage der Einstellung von Parametern, die dem seriellen Ausgang des Sensors entsprechen. Der Sensor gibt einen seriellen String mit 9600 8 N 1 aus, was ein Standardformat ist. Nachdem die Zeichenfolge empfangen wurde, gibt es mehrere Möglichkeiten, diese Zeichenfolge in Python und möglicherweise zuverlässiger zu analysieren. Ich suche nach den "temp" -Zeichen in der seriellen Zeichenfolge. Einmal gefunden, müssen Sie einfach die nächsten 46 seriellen Zeichen in eine Zeichenfolge einlesen. Der gesammelte String kann nun wie Elemente in einem Array angesprochen werden. Die gewünschten Daten werden aus dem String herausgeparst und zusammen mit dem entsprechenden Zeitstempel in den drei Dateien gespeichert.timestamp = strftime("%d%b%Y %H:%M:%S ", localtime())

Schritt 4: Software-Setup - Gnuplot

Software-Setup - Gnuplot
Software-Setup - Gnuplot
Software-Setup - Gnuplot
Software-Setup - Gnuplot
Software-Setup - Gnuplot
Software-Setup - Gnuplot

Gnuplot ist ein grafisches Befehlszeilentool. Sobald Sie die Grundlagen herausgefunden haben, kann es ein ziemlich mächtiges Werkzeug für die grafische Darstellung von Datensätzen sein. Gnuplot kann direkt aus einer formatierten Textdatei plotten und wir haben zufällig eine aus dem Parsing-Schritt zuvor. Sobald wir gnuplot angeben, wo sich die Daten in der Datei befinden, können wir die gewünschten Werte plotten. Ich werde die Zeit auf der X-Achse und unsere Temperatur auf der Y-Achse verwenden. Nach meiner Erfahrung ist das Plotten der Zeit am schwierigsten, da Sie das Zeitformat in gnuplot so einstellen müssen, dass es dem Format der Textdatei entspricht. Nachdem alle Grafikoptionen abgeschlossen sind und nach Ihren Wünschen kann Gnuplot dann ein Bild dieses Diagramms erstellen. Dies wird das Bild sein, das wir später auf unserer Webseite verwenden werden. Ich habe mich für ein PNG-Bild entschieden und da ich das alte Bild auf der Webseite ersetzen möchte, hat jedes Bild den gleichen Namen, sodass sich diese Codezeile nicht ändern muss. Die Einstellung der Bildgröße ist mit der HTML-Seitenoptimierung verknüpft. Ich habe zuerst mit Standardgrößen herumgespielt und dann experimentiert, um das Bild an meinen Bildschirm anzupassen. Für dieses Projekt speichere ich keine alten Bilder, daher ist die physische Größe der Datei im Speicher kein wichtiger Faktor für den wertvollen Raspberry Pi-Speicher. Hier ist ein Codeausschnitt zum Erstellen und Speichern des daily.png-Graphen image.g = Gnuplot. Gnuplot(debug=debug)g('cd "' + path + '"')g('set xdata time')g('set timefmt "%d%b%Y %H:%M:%S"') g('set format x "%H:%M\n%d%b"') g('set title " Daily Current Temperature Display"') g('set key off') g('set grid') g('set xlabel "Time\nDate"') g('set yrange [15.0:35.0]') g('set ylabel "Temperatur "') g('set datafile fehlt "NaN"') g('set terminal-p.webp

Schritt 5: Software-Setup - Schwellenwerteinstellung und E-Mail-Versand

Der Schwellenwert für die Benachrichtigung muss für Ihr Setup durch Versuch und Irrtum festgelegt werden. Der Raum, in dem die Systeme untergebracht sind, hat keine Fenster, so dass es sehr schnell sehr heiß werden kann, wenn die Klimaanlage ausfällt. Zuerst habe ich mir den Datensatz einige Tage angeschaut und die Temperaturschwankungen beobachtet, bevor ich mich für den Alarmwert von 30 Grad C entschieden habe. Dieser wird als Variable im Python-Skript gesetzt. Dies mag nicht sehr hoch erscheinen, aber nachdem die Warnung ausgelöst wurde, möchten Sie sich immer noch Zeit lassen, das Problem zu beheben, bevor es kritisch wird.

Der Einfachheit halber sende ich einzelne E-Mails an die Mailingliste. Da die Mailingliste kurz ist, habe ich mir nie die Mühe gemacht, eine E-Mail an mehrere Empfänger zu senden. Hier ist eine Sache zu beachten: Da ich dieses Skript alle 5 Minuten als Cron-Job ausführe, möchten Sie nicht alle 5 Minuten E-Mails senden, sobald der Schwellenwert ausgelöst wurde. Um dies zu umgehen, schreibe ich Datum und Uhrzeit der Warnung in eine Datei und überprüfe diese Datei, bevor ich E-Mails versende, um zu sehen, ob sich das System bereits in einem Warnungszustand befindet. Sobald sich das System in einem Warnstatus befindet, wird nach dem ersten Auslöser nur jede Stunde eine E-Mail erneut gesendet, solange sich das System im Warnstatus befindet. Auf diese Weise blockiert Gmail Ihre E-Mails nicht daran, in kurzer Zeit zu viele E-Mails zu senden.

Schritt 6: Software-Setup - HTML

Die Überwachung des gesamten Systems erfolgt über eine Webseite und dafür wird ein ganz einfaches HTML-Skript benötigt. Die Bilder, die Gnuplot erstellt hat, verwende ich einfach wieder die gleichen Abmessungen des Bildes. Ich glaube, ich habe für diese Bilder etwa 3 Größen durchgesehen, die die beste Passform auf meinem Bildschirm ergaben. Bevor wir das HTML-Skript erstellen, erstellen wir einen Ordner dafür. Standardmäßig befindet sich der Webhosting-Ordner unter /var/www/. Obwohl dieser Raspberry Pi nur dazu dient, diesen Raum zu überwachen und E-Mail-Benachrichtigungen auszugeben, habe ich für eine gute Haushaltsführung einen separaten Ordner im Ordner /var/www/ erstellt. Da dieser Ordner dem Root-Benutzer gehört, müssen Sie sudo verwenden, um einen Ordner an diesem Ort zu erstellen. sudo mkdir /var/www/temperatureIn diesem Beispiel habe ich temperature als Name des Ordners verwendet, aber Sie können hier einen beliebigen Namen verwenden, aber denken Sie daran, dass dieser in die Adressleiste eingegeben werden muss, um diese Seite anzuzeigen. Dieser Pfad wird in einer Variablen innerhalb des Python-Skripts gespeichert. Falls der Hosting-Standort geändert werden muss oder das Skript für ein anderes System geändert werden muss, kann es einfach von diesem einen Standort aus geändert werden. Jetzt können wir unser HTML-Skript in diesem Ordner erstellen und daran denken, sudo vor allen Befehlen zu verwenden, die Sie verwenden hier ausführen möchten. Ich würde Ihnen empfehlen, das HTML-Skript "index.html" zu benennen, da dies die Suche nach dieser Seite vereinfachen würde. Wichtig ist, dass die Bildgröße der Bildgröße von Gnuplot entspricht, Sie müssen nur die IP-Adresse des Raspberry Pi gefolgt von /temperature (oder wie auch immer Sie Ihren Ordner genannt haben) eingeben. Ich habe mehrere Systeme bei der Arbeit, die verschiedene Dinge überwachen, und alle erzeugen eine grafische Ausgabe ihrer Ergebnisse. Also habe ich eine Seite erstellt, die Links zu all diesen Seiten enthält, damit ich nicht jedes Mal, wenn ich auf diese Seiten zugreifen möchte, die Adresse eingeben muss.

Schritt 7: Ich lebe…

Ich habe dies verwendet, um die Temperatur in einem Computerraum zu überwachen, aber dies hätte so ziemlich Daten aus jeder Quelle sein können. Sobald es in einer Textdatei gespeichert werden kann und Sie das Format kennen, kann Gnuplot den Rest erledigen. Eine Sache, die ich kürzlich zu diesem Projekt hinzugefügt habe, ist das Senden einer Art "Heartbeat"-E-Mail. Das ist am ersten des Monats um 9 Uhr morgens. Ich habe ein Skript, das die Mailingliste per E-Mail sendet, um sie wissen zu lassen, dass das System so läuft, wie es sollte und alles in Ordnung ist.

Verwendung der Cronjob-Liste als:

Empfohlen: