Selbstgemachtes Sicherheitssystem basierend auf Produkten für ein Smart Home von Nootekhnika

Guten Tag, liebe Gemeinschaft. Ich möchte Ihnen ein Experiment zur Implementierung eines Sicherheitssystems für ein Heim vorstellen, das auf Smart-Home-Geräten von Nootehnika basiert. Ich möchte sofort reservieren, dass dies eines der ersten Experimente ist, und mein Ziel ist es nicht, „eine uneinnehmbare Bastion zu bauen“, sondern die Möglichkeiten zu demonstrieren, die von mir ausgewählten Geräte zu verwenden, zu experimentieren und Lektionen zu lernen sowie Feedback von Ihnen zu erhalten.

Kurz gesagt, das System, das ich entworfen habe, sollte ein Foto von jeder Person machen, die sich im Scharfschaltmodus der Haustür näherte, ein Foto an eine E-Mail-Adresse senden und eine E-Mail-Nachricht senden, falls im Flur eine Bewegung registriert wird (d. H. Es gibt Bewegung in der Wohnung). . Also zur Aussage des Problems.

1. Erklärung des Problems


Das System, das ich entwerfe, sollte:

  • Machen Sie im Aktivierungsmodus ein Foto von jeder Person, die sich der Haustür nähert, und senden Sie das Foto an eine E-Mail-Adresse.
  • Senden Sie im Aktivierungsmodus eine E-Mail-Nachricht, wenn Sie eine Bewegung im Flur registrieren (ohne Foto, da ich dort keine IP-Kameras habe).
  • bieten verschiedene Schnittstellen zum Aktivieren und Deaktivieren.

Mit verschiedenen Aktivierungsschnittstellen meine ich:

  • Aktivieren und Deaktivieren mit Hilfe von Funkschaltern Nootehnika;
  • Aktivieren und Deaktivieren über die Weboberfläche zur Verwaltung eines Smart Homes.

2. Beschreibung der Lösung


Um dieses Problem zu lösen, habe ich die folgende Hardware verwendet:

  • zwei Bewegungssensoren 112;
  • Empfänger von Signalen von Sensoren und Schaltern RX2164;
  • PU311-2 Schalter;
  • 3VI Nettop (basierend auf dem Atom D525 Prozessor);
  • Chinesische IP-Kamera ohne Namen.

Ich habe bereits im Abschnitt "Einführung" des Artikels eine kurze Beschreibung der Geräte für den Bau des Smart Home der Firma Nootehnika gegeben, daher werde ich mich hier nicht auf dieses Thema konzentrieren. Darüber hinaus finden Sie alle Details zu den Geräten auf der Website des Unternehmens .

Also zur Beschreibung des Systems. Auf dem 3VI-Nettop sind Debian Linux 7, die SEC-Software (Simple Event Correlation) und eine Reihe von Linux-Dienstprogrammen zur Verwaltung von Nootechnics-Geräten von Oleg Artamonov installiert.

Bewegungssensoren (PM112) sind im Vorraum vor der Haustür und im Korridor (innerhalb der Wohnung) installiert. Der USB-Empfänger RX2164 ist an das Nettop angeschlossen. Der Empfänger empfängt Signale von Sensoren und Schaltern, und die auf dem Nettop installierten Nootehnics-Geräteverwaltungsdienstprogramme (im Folgenden als Noolite-Dienstprogramme bezeichnet) senden die empfangenen Signale an syslog. SEC liest die Datei, in die Syslog-Daten geschrieben werden, und verarbeitet sie gemäß den konfigurierten Regeln. Als Ergebnis der Verarbeitung werden Aktionen wie das Empfangen von Fotos von der IP-Kamera und das Senden von E-Mail-Nachrichten ausgeführt.

Es gibt zwei Möglichkeiten, den Sicherheitsmodus zu aktivieren (und zu deaktivieren):

  1. durch Drücken einer Taste am PU311-2-Schalter;
  2. durch Drücken einer Taste in der Weboberfläche des Smart-Home-Steuerungssystems.

Ein Blockdiagramm, das den Betrieb des Systems veranschaulicht, ist in Abbildung 1 dargestellt.



Abbildung 1 - Blockdiagramm zur Funktionsweise des Systems

3. Installieren der Systemhardware


Für dieses System verwende ich dieselben 2 Bewegungssensoren, deren Installation ich in Abschnitt 4 des Artikels beschrieben habe .

Kurz gesagt, einer der Sensoren ist in der Nähe der Vordertür im Vorraum (außerhalb der Wohnung) installiert. Die Empfindlichkeit dieses Sensors ist so eingestellt, dass Bewegungen in unmittelbarer Nähe der Tür erfasst werden. Der zweite Sensor ist unmittelbar neben der Haustür installiert, befindet sich jedoch bereits in der Wohnung. Die Empfindlichkeit wird so eingestellt, dass die Bewegung in unmittelbarer Nähe der Tür fixiert wird.

Eine IP-Kamera ist außerhalb der Wohnung im Vorraum unter der Decke installiert. Die Haustür und etwa 1,5 Meter Platz vor ihr fallen in ihr Sichtfeld.

Der Schalter PU311-2 ist im Schrank installiert, um nicht ins Auge zu fallen und nicht versehentlich gedrückt zu werden.

Das 3VI-Nettop mit dem Signalempfänger RX2164 befindet sich in der Nähe des Zwischengeschosses, um einen stabilen Empfang von Signalen von Sensoren und Schaltern zu gewährleisten.

Das Installationsdiagramm der Geräte ist in Abbildung 2 dargestellt.



Abbildung 2 - Installationsdiagramm der Ausrüstung

4. Software-Setup


Das Software-Setup umfasst:

  • Einrichten von Noolite-Dienstprogrammen zum Empfangen von Signalen von Sensoren und Schaltern;
  • Festlegen von SEC-Regeln, um auf Signale von Sensoren und Schaltern zu reagieren;
  • Erstellen eines Skripts, das ein Foto von der Kamera empfängt und E-Mails sendet;
  • Erstellen einer Schaltfläche zum Ein- und Ausschalten des Systems in der Weboberfläche

Konfigurieren von Noolite-Dienstprogrammen zum Empfangen von Signalen von Sensoren und Schaltern


Damit der RX2164-Empfänger Signale von einem Sensor oder Schalter empfangen kann, muss er „gebunden“ werden. Drücken Sie dazu die Schnapptaste am Sensor selbst (auf der Rückseite) und führen Sie auf dem Computer, an den der Empfänger angeschlossen ist, den folgenden Befehl aus: nooliterxcfg –bind <Kanalnummer von 1 bis 64>. Ebenso ist der Schalter an den Empfänger gebunden.

In meinem Fall war der Sensor im Vorraum mit Kanal 3 verbunden, der Sensor in der Wohnung mit Kanal 2 und zwei Schalttasten mit Kanal 1 bzw. 4.

Um Signale von Sensoren in Echtzeit zu empfangen, müssen Sie das Dienstprogramm nooliterx im Daemon-Modus ausführen. Der Prozess der Installation von Dienstprogrammen und deren Einstellungen wird vom Entwickler selbst (Oleg Artamonov in der Dokumentation zu Dienstprogrammen) und von mir in Abschnitt 4 des Artikels (LINK) beschrieben. Als Ergebnis erhalten wir eine Aufzeichnung der Signale von Sensoren und Schaltern im Syslog. Es bleibt nur die Konfiguration der Aufzeichnung dieser Nachrichten in einer Datei im Syslog selbst zu konfigurieren, und bei der Ausgabe wird Folgendes erhalten (Beispielnachrichten von Sensoren):

Jan 7 15:47:39 vmon nooliterx[23022]: Received: status 133, channel 3, command 25, format 1, data 2 0 0 0 Jan 7 18:43:58 vmon nooliterx[23022]: Received: status 135, channel 2, command 25, format 1, data 1 0 0 0 

Beispiele für Nachrichten von Schaltern (wenn eine Taste gedrückt wird) sehen etwas anders aus:

 Jan 5 22:29:43 vmon nooliterx[23022]: Received: status 26, channel 1, command 4, format 0, data 1 0 0 0 Jan 5 22:27:55 vmon nooliterx[23022]: Received: status 145, channel 4, command 4, format 0, data 1 0 0 0 

Konfigurieren Sie SEC-Regeln, um Signale von Sensoren und Schaltern auszulösen.


SEC ist ein Dienstprogramm zum Verarbeiten von Ereignisprotokollen. Kurz gesagt, es empfängt einen Strom von Ereignissen an der Eingabe, von denen jedes die Übereinstimmung mit den Mustern konfigurierter Regeln überprüft. Wenn eine Übereinstimmung gefunden wird, wird die in der entsprechenden Regel vorgeschriebene Aktion gestartet. Das Ding ist erstaunlich flexibel zu bedienen. Es gibt eine detaillierte Manpage im Web.

SEC wird in meinem System verwendet, um in Echtzeit nach Nachrichten von Sensoren und Schaltern zu suchen und ein Skript auszuführen, das Fotos aufnimmt und E-Mails sendet oder einfach das Ein- und Ausschalten des gesamten Systems übersetzt.

In SEC habe ich 4 Regeln konfiguriert. 2 - zum Verarbeiten von Ereignissen von Bewegungssensoren und zwei - zum Verarbeiten von Signalen von zwei Tasten des Schalters. Regeln finden Sie in /etc/sec.conf

Regel 1: Verarbeitung des Signals vom Bewegungssensor im Vestibül (Sensor an Kanal 3 angebracht)

 type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(3),\s+command\s+25.* desc=Motion sensor frontdoor $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60 

Der Typ dieser Regel - "SingleWithSurpress" - reagiert nur auf das erste aufgezeichnete Ereignis während des durch den Parameter "window" angegebenen Zeitintervalls in Sekunden. Das heißt, Diese Einstellung bedeutet, dass die Regel nicht mehr als einmal pro Minute funktioniert und die im Parameter "Aktion" angegebene Aktion nicht mehr als einmal pro Minute gestartet wird. Dies geschieht, damit jemand für einige Minuten durch die Tür stampft, um seine Post nicht mit Tonnen von Briefen zu spammen. Im Parameter "pattern" wird ein regulärer Ausdruck geschrieben, nach dem Ereignisse von dem mit Kanal 3 verknüpften Sensor durchsucht werden. Im Parameter "action" werden zwei Aktionen angegeben - shellcmd, der das Skript ausführt und ihm einen aus dem regulären Ausdruck extrahierten Parameter übergibt (in diesem Fall, der die Zahl "3" darstellt), und die zweite Aktion "Ereignis% s", die dazu dient, den im Parameter "desc" aufgezeichneten Ausdruck auf andere Regeln zu übertragen, was für den Betrieb dieses Systems nicht erforderlich ist und weggelassen werden kann. Der Parameter "desc" gibt zusätzliche Serviceinformationen an, die von anderen Regeln verwendet werden. Für dieses System ist es nicht erforderlich und es können dort beliebige Daten eingegeben werden.

Regel 2: Signalverarbeitung von einem Bewegungssensor im Korridor (Sensor an Kanal 2 angebracht)

 type=SingleWithSuppress ptype=RegExp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(2),\s+command\s+25.* desc=Motion sensor lobby $1 triggered action=shellcmd (/usr/local/smarthome/security/send_photo_alert.sh $1); event %s window=60 

Hier ist alles ähnlich wie in Regel 1. Es ist nur zu beachten, dass die aus dem regulären Ausdruck erhaltene Zahl „2“ an das Skript übergeben wird.

Regel 3: Signalverarbeitung von einer Schalttaste, die Kanal 1 zugeordnet ist

 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(1),\s+command\s+4.* desc=switch guard mode online action=shellcmd (/bin/echo "online" > /usr/local/smarthome/security/status) 

Diese Regel ist noch einfacher: Sie wird für jedes Ereignis ausgelöst, das dem im Parameter "pattern" angegebenen regulären Ausdruck entspricht. Als Aktion wird in die Systemstatusdatei geschrieben. Diese Datei wird von einem Skript analysiert, das mit den Regeln 1 und 2 gestartet wurde. Wenn der Status "online" lautet, wird das Skript ausgelöst. Wenn der Wert "offline" ist, funktioniert das Skript nicht. Mehr dazu etwas weiter.

Regel 4: Signalverarbeitung über eine dem Kanal 4 zugeordnete Schalttaste

 type=single ptype=regexp pattern=\w+\s+\d+\s+\d+\:\d+\:\d+\s+\w+\s+nooliterx\S+\s+Received\:\s+status\s+\d+,\s+channel\s+(4),\s+command\s+4.* desc=switch guard mode offline action=shellcmd (/bin/echo "offline" > /usr/local/smarthome/security/status) 

Alles ist ähnlich wie in Regel 3, nur der Status wird auf "offline" gesetzt.

Ein Skript, das Fotos von der Kamera aufnimmt und E-Mails sendet


Das durch die Regeln 1 und 2 gestartete Skript überprüft den Status des Systems in der Statusdatei und führt abhängig von seinem Wert ("online" oder "offline") die folgenden Aktionen aus oder nicht:

  • empfängt ein Foto von der IP-Kamera im Vorraum und sendet eine E-Mail, falls sich ein Sensor im Vorraum befindet;
  • sendet eine Alarmmeldung im Falle eines Sensors im Korridor.

Das Folgende ist der Hauptteil des Skripts. An seinem Eingang empfängt er (von der SEC) die Kanalnummer, an die der Sensor angeschlossen ist, und führt abhängig von dieser Nummer und dem Status des Systems bestimmte Aktionen aus.

 #!/bin/sh dir="/usr/local/smarthome/security" MAIL=$dir/mail.letter stat_file="$dir/status" dt=`date` if [ "$1" -eq 2 ] then if grep "online" $stat_file then cd $dir rm -f $dir/snapshot.cgi wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> mpack -s "Someone at the door at $dt" $dir/snapshot.cgi d.shulinin@gmail.com fi elif [ "$1" -eq 3 ] then if grep "online" $stat_file then printf "Subject: Motion in the lobby spotted at $dt\n" > $MAIL /usr/sbin/ssmtp email@gmail.com < $MAIL fi else echo "no legitimate input detected" fi 

Um Fotos von meiner IP-Kamera zu erhalten, verwende ich wget und eine Zeile wie diese:

 wget http://<IP  >/snapshot.cgi --user=<username> --password=<password> 

Bei anderen IP-Kameras müssen Sie möglicherweise nach anderen Optionen suchen. Es gibt keine einzige Lösung. RTFM zur Kamera, wie sie sagen.

Die Schaltflächen zum Ein- und Ausschalten des Systems in der Weboberfläche. Um den Sicherheitsmodus zu aktivieren und zu deaktivieren, habe ich meiner selbst geschriebenen Weboberfläche einige Schaltflächen hinzugefügt, mit denen Sie die Lichtquellen eines Smart Homes steuern können.

Sie sehen wie folgt aus:

 <?php if (isset($_POST['button9_on'])) { exec('/bin/echo "online" > /usr/local/smarthome/security/status'); } ?> <?php if (isset($_POST['button9_off'])) { exec('/bin/echo "offline" > /usr/local/smarthome/security/status'); } ?> <p><h2>Guard mode</h2></p> <form method="post"> <p> <button name="button9_on">ON</button> <button name="button9_off">OFF</button> </p> 

Hier ist alles einfach - wenn Sie auf die Schaltfläche „EIN“ klicken, wird „online“ in die Statusdatei geschrieben, wenn Sie auf „AUS“ - „offline“ klicken.

5. Fazit


Als Ergebnis habe ich ein System erhalten, das bei Aktivierung Bilder von jedem macht, der sich der Tür genähert hat, und das Foto per E-Mail sendet. Und wenn sich in der Wohnung etwas bewegt, wird einfach eine Benachrichtigung per E-Mail gesendet.

Beispiel-E-Mail-Nachrichten sehen ungefähr so ​​aus (siehe Abbildung 3). Die Bilder selbst sind natürlich größer und werden größer, wenn Sie mit der Maus darauf klicken.


Abbildung 3 - Beispiel-E-Mail mit Foto

Das System kann durch Drücken einer Taste am Schalter sowie über die Tasten in der Weboberfläche des Smart-Home-Steuerungssystems aktiviert und deaktiviert werden.

Kurzfristig möchte ich auch den aktuellen Status des Systems (aktiv / inaktiv) in der Weboberfläche anzeigen.

Source: https://habr.com/ru/post/de401909/


All Articles