Inhaltsverzeichnis:

DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi - Gunook
DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi - Gunook

Video: DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi - Gunook

Video: DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi - Gunook
Video: Überwachungskamera mit Raspberry Pi und Webcam selber bauen. Keine Cloud, keine weiteren Kosten 2024, November
Anonim
DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi
DIY Hausüberwachung mit RaspberryPi und Cloud4Rpi

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

Temperaturüberwachung
Temperaturüberwachung
Temperaturüberwachung
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

Einrichten von Cloud4Rpi.io
Einrichten von Cloud4Rpi.io

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

USV-Überwachung
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“

Vorbereitung auf die „Produktion“
Vorbereitung auf die „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

Einrichten einer Systemsteuerung
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: