Inhaltsverzeichnis:
- Schritt 1: Temperaturüberwachung
- Schritt 2: Cloud4Rpi.io einrichten
- Schritt 3: USV-Überwachung
- Schritt 4: Vorbereitung zur „Produktion“
- Schritt 5: Einrichten einer Systemsteuerung
Video: DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
An einem Winterwochenende ging ich zu meinem Landhaus und stellte fest, dass es dort sehr kalt war. Etwas war mit dem Strom passiert und der FI-Schutzschalter hatte ihn ausgeschaltet, und auch die Heizung ging aus. Ich hatte Glück, dass ich dorthin gekommen bin, sonst wäre in einigen Tagen alles eingefroren, was sehr schlecht für die Rohre und die Heizkörper ist.
Ich hatte mehrere Raspberry Pis in der Nähe und einen Temperatursensor, also dachte ich - warum baue ich nicht ein einfaches Überwachungsgerät? Die Anweisungen unten gehen davon aus, dass Sie einen Raspberry Pi mit Raspbian und eingerichteter Netzwerkverbindung haben. In meinem Fall ist es Raspberry Pi B+ mit Raspbian (2018-06-27-raspbian-stretch-lite).
Schritt 1: Temperaturüberwachung
Wie schließe ich einen DS18B20 Temperatursensor an? Google einfach, wie das geht, und du wirst viele Bilder wie dieses sehen:
In meinem Fall hatte ich schwarze, gelbe und rote Drähte. Das Schwarze ist Masse, geht zum Masse-Pin, das Rot ist Strom - geht zum 3,3-V-Pin und das Gelb ist Daten - sollte zum GPIO4-Pin gehen, mit einem 4,7-kOm-Widerstand zwischen Daten und Strom. Hinweis, Sie können mehrere Sensoren anschließen parallel (sie sind digital und haben unterschiedliche Adressen), benötigen Sie nur einen Widerstand. Nachdem Sie Ihren Sensor angeschlossen haben, sollten Sie 1Wire in der raspi-config aktivieren:
sudo raspi-config
Gehen Sie zu 5 Schnittstellenoptionen, aktivieren Sie P7 1-Wire und starten Sie neu.
Dann können Sie testen, ob Sie den Sensor sehen können:
sudo modprobe w1-gpiosudo modprobe w1-thermls /sys/bus/w1/devices/
Sie sollten so etwas sehen:
pi@vcontrol:~ $ ls /sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff ist unser Temperatursensor.
Hardware ist bereit. Jetzt muss ich den Überwachungsteil einrichten. Ich brauche etwas, das mir die Daten anzeigt und mich benachrichtigt, wenn das Gerät eine Weile vom Netz getrennt ist, kein Strom vorhanden ist oder die Temperatur niedrig ist. Natürlich kann dies nicht Raspberry Pi selbst sein, es sollte einen Server oder Dienst im Internet geben, der mein Gerät überwacht.
Ich kann einen einfachen Server erstellen, ein Hosting bekommen und alles einrichten, aber ehrlich gesagt möchte ich nicht. Glücklicherweise hat sich schon jemand darüber Gedanken gemacht und cloud4rpi.io erstellt - ein Cloud-Bedienfeld für Ihr Gerät.
Schritt 2: Cloud4Rpi.io einrichten
Cloud4Rpi bietet einen Dienst, mit dem Ihr Gerät Daten über MQTT- oder HTTP-Protokolle senden und empfangen kann. Sie haben eine Clientbibliothek für Python, also werde ich Python verwenden.
Python-Beispiele, die mit dem Cloud4Rpi-Dienst geliefert werden, enthalten bereits Code für den DS18B20-Temperatursensor.
Also bin ich zu https://cloud4rpi.io gegangen, habe ein Konto erstellt und dort ein neues Gerät hinzugefügt. Die Geräteseite hat ein Token – eine Zeichenfolge, die das Gerät identifiziert und die in dem Programm angegeben werden sollte, das Daten sendet.
Zunächst ist es immer eine gute Idee, einen Paketmanager zu aktualisieren und Pakete zu aktualisieren (Hinweis: Es kann Stunden dauern, wenn Sie eine Weile nicht aktualisiert haben):
sudo apt-get update && sudo apt-get upgrade
Installieren Sie dann git, Python und seinen Paketmanager Pip:
sudo apt-get install git python python-pip
Installieren Sie dann die Python-Bibliothek cloud4rpi:
sudo pip install cloud4rpi
Endlich bin ich bereit, mein Steuerungsprogramm zu schreiben. Ich gehe von einem Beispiel aus, das unter https://github.com/cloud4rpi/cloud4rpi-raspberrypi verfügbar ist…
Git-Klon
Die Hauptprogrammdatei ist control.py - ich muss sie für meine Bedürfnisse ändern. Bearbeiten Sie zuerst das Programm und fügen Sie ein Token ein:
sudo nano control.py
Suchen Sie eine Zeile DEVICE_TOKEN='…'] und geben Sie dort ein Geräte-Token an. Danach kann ich das Programm einfach ausführen: Es funktioniert und meldet eine Temperatur in der RoomTemp-Variable:
sudo python control.py
Es funktioniert und meldet eine Temperatur in der Variable RoomTemp.
Beachten Sie, dass alle Onewire ds18b20-Sensoren erkannt werden
ds_sensors = ds18b20. DS18B20.find_all()
und verwendet den ersten gefundenen Sensor:
RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] if ds_sensors else None }
Ok, das war einfach, denn das Beispielprogramm hat alles, was benötigt wird, um mit dem ds18b20-Sensor auf dem Raspberry Pi zu arbeiten. Jetzt muss ich einen Weg finden, den Energiestatus zu melden.
Schritt 3: USV-Überwachung
Das nächste, was ich überwachen möchte, ist der USV-Status. Wenn es also einen Stromausfall gibt, werde ich darüber informiert, bevor alles getrennt wird.
Ich habe eine APC-USV mit USB-Steuerung, also habe ich schnell gegoogelt und festgestellt, dass ich apcupsd brauche. https://www.anites.com/2013/09/monitoring-ups.html… Ich habe mehrmals versucht, es über apt-get zu installieren, und es hat aus verschiedenen Gründen bei mir nicht funktioniert. Ich werde zeigen, wie man es aus den Quellen installiert.
wget https://sourceforge.net/projects/apcupsd/files/ap…tar xvf apcupsd-3.14.14.tar.gz cd apcupsd-3.14.14./configure --enable-usb sudo make sudo make install
Dann bearbeite ich apcupsd.conf, um über USB eine Verbindung zu meiner USV herzustellen.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb # #UPSTYPE apcsmart #DEVICE /dev/ttyS0 UPSTYPE usb DEVICE
Jetzt kann ich ein USB-Kabel von der USV an den RaspberryPi anschließen und testen, ob die USV gefunden wird.
sudo apctest
Es sollte keine Fehlermeldungen geben.
Nun sollte der Dienst apcupsd gestartet werden:
sudo systemctl starte appcupsd
Um den USV-Status abzufragen, kann ich einen Statusbefehl verwenden:
sudo /etc/init.d/apcupsd status
Und es würde ungefähr so ausgeben:
APC: 001, 035, 0855DATUM: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31. Mai 2016) debian UPSNAME: vcontrol KABEL: USB-Kabel TREIBER: USB-USV-Treiber UPSMODE: Stand Alone STARTZEIT: 2018-10-14 16:54:28 +0300 MODELL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 Prozent BCHARGE: 100.0 Prozent TIMELEFT: 293.3 Minuten MBATTCHG: 5 Prozent MINTIMEL: 3 Minuten MAXTIME: 0 Sekunden SENSE: Mittel LOTRANS: 140,0 Volt HITRANS: 300,0 Volt ALARMDEL: 30 Sekunden BATTV: 14,2 Volt LASTXFER: Keine Übertragungen seit dem Einschalten NUMXFERS: 0 TONBATT: 0 Sekunden CUMONBATT: 0 Sekunden XOFFBATT: n. z: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12,0 Volt NOMPOWER: 390 Watt FIRMWARE: 892. R3. I USB FW:R3 END APC: 2018-10-14 16:55:38 +0300
Ich brauche einen Status - das ist die Zeile "STATUS:".
Die Cloud4rpi-Bibliothek enthält ein Modul „rpy.py“, das Raspberry Pi-Systemparameter wie Hostname oder CPU-Temperatur zurückgibt. Da all diese Parameter Ergebnisse der Ausführung einiger Befehle und des Parsens der Ausgabe sind, enthält es auch eine praktische Funktion „parse_output“, die genau das tut, was ich brauche. So erhalten Sie meinen UPS-Status:
def ups_status(): result = rpi.parse_output(r'STATUS\s+:\s+(S+)', ['/etc/init.d/apcupsd', 'status']) if result: return result else: return 'UNBEKANNT'
Um diesen Status an cloud4rpi zu senden, muss ich eine Variable UPSStatus deklarieren und an meine ups_status-Funktion binden: Jetzt kann ich mein Programm ausführen:
Variablen = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
Und ich kann meine Variable sofort auf der Geräteseite von cloud4rpi sehen.
Schritt 4: Vorbereitung zur „Produktion“
Alles funktioniert, und jetzt muss ich mein Gerät auf den unbeaufsichtigten Modus vorbereiten.
Zunächst werde ich die Zeitintervalle anpassen. Das Abfrageintervall legt fest, wie oft das Programm die Temperatur und den USV-Status überprüft - stellen Sie es auf eine Sekunde ein.
Ergebnisse werden alle 5 Minuten an die Cloud gesendet und Diagnoseinformationen - jede Stunde.
# KonstantenDATA_SENDING_INTERVAL = 300 # Sek DIAG_SENDING_INTERVAL = 3600 # Sek POLL_INTERVAL = 1 # Sek
Wenn sich der USV-Status ändert - ich möchte nicht, dass mein Gerät 5 Minuten wartet, und ich sende sofort Daten. Also habe ich die Hauptschleife leicht modifiziert und sie sieht so aus:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status() if (data_timer <= 0) oder (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL sleep(POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Testen: Skript ausführen:
sudo python control.py
Und ich kann den USV-Status auf meiner Geräteseite sehen.
Wenn ich die USV-Stromversorgung abschalte, ändert sich der Status in ein paar Sekunden, sodass alles funktioniert. Jetzt muss ich appcupsd und meine control.py beim Systemstart starten. Der Apcupsd-Dienst ist alt und um ihn auf einem modernen Raspbian zu starten, sollte ich die Datei /etc/init.d/apcupsd ändern, indem ich diese Zeilen irgendwo oben hinzufüge:
### BEGIN INIT INFO# Liefert: apcupsd # Erforderlicher-Start: $all # Erforderlicher-Stop: # Standard-Start: 2 3 4 5 # Standard-Stop: # Kurzbeschreibung: APC UPS Daemon… ### END INIT DIE INFO#
Aktivieren Sie dann den Dienst:
sudo systemctl aktivieren appcupsd
Starten Sie dann den Dienst:
sudo systemctl starte appcupsd
Nun wird appcupsd beim Systemstart gestartet.
Um control.py als Dienst zu installieren, habe ich das mitgelieferte service_install.sh-Skript verwendet:
sudo bash service_install.sh ~/cloud4rpi/control.py
Jetzt wird der Dienst gestartet und sollte einen Neustart überstehen.
Schritt 5: Einrichten einer Systemsteuerung
Mit Cloud4rpi kann ich ein Control Panel für mein Gerät einrichten. Sie können „Widgets“hinzufügen und an Gerätevariablen binden.
Mein Gerät bietet zwei schreibgeschützte Variablen – RoomTemp und UPSStatus:
Variablen = { 'RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] }, 'UPSStatus': { 'type': 'string', 'bind': ups_status } }
Ich habe 3 Widgets hinzugefügt - Nummer für RoomTemp, Text für UPSStatus und ein Diagramm für RoomTemp.
Ich kann Benachrichtigungen einrichten, sodass ich eine E-Mail erhalte, wenn die Temperatur außerhalb des angegebenen Bereichs liegt, die USV offline gegangen ist oder das Gerät selbst keine Daten sendet, wenn es sollte. Jetzt kann ich sicher sein, dass es meinem Landhaus in Ordnung ist und ich kann benachrichtigt werden Wenn etwas nicht stimmt, kann ich Nachbarn anrufen und sie bitten, zu überprüfen, was los ist. Hier ist der eigentliche Code der control.py.
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
DIY Circuit Activity Board mit Büroklammern - HERSTELLER - STEM: 3 Schritte (mit Bildern)
DIY Circuit Activity Board mit Büroklammern | HERSTELLER | STEM: Mit diesem Projekt können Sie den Weg des elektrischen Stroms ändern, um durch verschiedene Sensoren zu laufen. Mit diesem Design können Sie zwischen dem Aufleuchten einer blauen LED oder dem Aktivieren eines Summers wechseln. Sie haben auch die Wahl, einen lichtabhängigen Widerstand mit
Mit RaspberryPi beginnen: 9 Schritte
Wie man mit RaspberryPi beginnt: In diesem anweisbaren zeige ich Ihnen, wie Sie mit RashpberryPi auf eine andere Weise beginnen können
Ein kostengünstiger IoT-Luftqualitätsmonitor basierend auf RaspberryPi 4: 15 Schritte (mit Bildern)
Ein kostengünstiger IoT-Luftqualitätsmonitor auf Basis von RaspberryPi 4: Santiago, Chile, hat während eines winterlichen Umweltnotstands das Privileg, in einem der schönsten Länder der Welt zu leben, aber leider sind es nicht nur Rosen. Chile leidet während der Wintersaison sehr unter Luftverschmutzung, Mai