
Dank der rasanten Entwicklung von Mikroelektronik, Kommunikationskanälen, Internet-Technologien und künstlicher Intelligenz wird das Thema Smart Homes heute immer relevanter. Das Wohnen von Menschen hat sich seit der Steinzeit und in der Zeit der industriellen Revolution 4.0 erheblich verändert, und das Internet der Dinge wurde bequem, funktional und sicher. Es kommen Lösungen auf den Markt, die eine Wohnung oder ein Landhaus in ausgefeilte Informationssysteme verwandeln, die von überall auf der Welt mit einem Smartphone verwaltet werden. Darüber hinaus sind für die Mensch-Maschine-Interaktion keine Programmiersprachenkenntnisse mehr erforderlich. Dank der Spracherkennungs- und Sprachsynthesealgorithmen spricht eine Person ihre Muttersprache mit einem Smart Home.
Einige derzeit auf dem Markt befindliche Smart-Home-Systeme sind eine logische Entwicklung von Cloud-basierten Videoüberwachungssystemen, deren Entwickler die Notwendigkeit einer umfassenden Lösung nicht nur für die Überwachung, sondern auch für die Verwaltung entfernter Objekte erkannt haben.
Wir bieten Ihnen eine Reihe von drei Artikeln an, in denen Sie alle Hauptkomponenten des vom Autor persönlich entwickelten und in Betrieb genommenen Cloud-Smart-Home-Systems kennenlernen. Der erste Artikel befasst sich mit Terminal-Client-Geräten, die in einem Smart Home installiert sind, der zweite mit der Architektur eines Cloud-Speicher- und Datenverarbeitungssystems und der dritte mit einer Client-Anwendung zur Verwaltung des Systems auf mobilen und stationären Geräten.
Smart Home-Ausrüstung
Lassen Sie uns zunächst darüber sprechen, wie Sie aus einer gewöhnlichen Wohnung, einem Cottage oder einem Cottage ein intelligentes Zuhause machen können. Zu diesem Zweck ist es in der Regel erforderlich, folgende Geräte im Haus aufzustellen:
- Sensoren, die verschiedene Umgebungsparameter messen;
- Aktuatoren, die auf externe Objekte wirken;
- Eine Steuerung, die Berechnungen gemäß Sensormessungen und eingebetteter Logik durchführt und Befehle an Aktuatoren ausgibt.
Die folgende Abbildung zeigt das Diagramm eines Smart Homes, auf dem Sensoren für Wasserleckage (1) im Badezimmer, Temperatur (2) und Beleuchtung (3) im Schlafzimmer, eine Smart-Steckdose (4) in der Küche und eine Videoüberwachungskamera (5) im Flur vorhanden sind.

Derzeit werden häufig drahtlose Sensoren verwendet, die unter den Protokollen RF433, Z-Wave, ZigBee, Bluetooth und WiFi arbeiten. Ihre Hauptvorteile sind einfache Installation und Verwendung sowie geringe Kosten und Zuverlässigkeit, weil Hersteller versuchen, ihre Geräte auf den Massenmarkt zu bringen und sie dem durchschnittlichen Benutzer zur Verfügung zu stellen.
Sensoren und Aktoren sind in der Regel über eine drahtlose Schnittstelle mit dem Smart Home Controller (6) verbunden - einem speziellen Mikrocomputer, der alle diese Geräte in ein einziges Netzwerk integriert und steuert.
Einige Lösungen können jedoch gleichzeitig einen Sensor, einen Aktuator und eine Steuerung kombinieren. Beispielsweise kann eine Smart-Buchse so programmiert werden, dass sie nach einem Zeitplan ein- oder ausgeschaltet wird, und eine Cloud-basierte Videoüberwachungskamera kann Videos basierend auf einem Bewegungsmeldersignal aufzeichnen. In den einfachsten Fällen können Sie auf einen separaten Controller verzichten. Um jedoch ein flexibles System mit vielen Szenarien zu erstellen, ist dies erforderlich.
Um den Smart-Home-Controller mit dem globalen Netzwerk zu verbinden, kann ein herkömmlicher Internet-Router (7) verwendet werden, der in jedem Haushalt seit langem ein bekanntes Haushaltsgerät ist. Es gibt noch ein weiteres Argument für den Smart-Home-Controller: Wenn die Verbindung zum Internet unterbrochen wird, funktioniert das Smart-Home aufgrund des im Controller gespeicherten Logikblocks und nicht im Cloud-Dienst normal weiter.
Smart Home Controller
Der in diesem Artikel beschriebene Controller für das Cloud-Smart-Home-System wurde auf der Grundlage des im März 2018 veröffentlichten Einplatinen-Mikrocomputers
Raspberry Pi 3 Modell B + entwickelt , der über ausreichende Ressourcen und Leistung für Smart-Home-Aufgaben verfügt. Es besteht aus einem vierkernigen Cortex-A53-Prozessor mit einer 64-Bit-ARMv8-A-Architektur, die mit 1,4 GHz getaktet ist, sowie 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 und einem Gigabit-Ethernet-Adapter, der über den USB 2.0-Bus funktioniert.

Die Montage des Controllers ist sehr einfach: Der Mikrocomputer (1) wird in ein Kunststoffgehäuse (2) eingebaut, dann werden eine 8-GB-microSD-Karte mit Software (3) und ein USB-Z-Wave-Netzwerkcontroller (4) in die entsprechenden Steckplätze eingesetzt. Der Smart-Home-Controller wird über ein 5-V-, 2,1-A- (5) Netzteil und ein USB-Micro-USB-Kabel (6) an das Stromnetz angeschlossen. Jeder Controller verfügt über eine eindeutige Identifikationsnummer, die beim ersten Start in der Konfigurationsdatei aufgezeichnet wird und für die Interaktion mit Cloud-Smart-Home-Diensten erforderlich ist.
Die Smart Home Controller-Software wurde vom Autor dieses Artikels basierend auf dem Betriebssystem
Linux Raspbian Stretch entwickelt. Es besteht aus den folgenden Hauptsubsystemen:
- Serverprozess für die Interaktion mit Smart-Home-Geräten und der Cloud;
- grafische Benutzeroberfläche zur Konfiguration der Steuerung und der Betriebsparameter;
- Datenbanken zum Speichern der Controller-Konfiguration.
Die Datenbank des Smart Home Controllers basiert auf dem eingebetteten
SQLite DBMS und ist eine Datei auf der SD-Karte mit Systemsoftware. Es dient als Repository für die Controller-Konfiguration - Informationen zu den angeschlossenen Geräten und ihrem aktuellen Status, ein Block logischer Produktionsregeln sowie Informationen, die indiziert werden müssen (z. B. Dateinamen des lokalen Videoarchivs). Beim Neustart des Controllers werden diese Informationen gespeichert, sodass der Controller bei einem Stromausfall wiederhergestellt werden kann.
Die grafische Oberfläche des Smart-Home-Controllers wurde in PHP 7 mithilfe des
Slim- Mikroframeworks entwickelt. Der
lighttpd -Webserver, der aufgrund seiner guten Leistung und des geringen Ressourcenbedarfs häufig in eingebetteten Geräten verwendet wird, ist für den Betrieb der Anwendung verantwortlich.
(Klicken Sie auf das Bild, um es in höherer Auflösung zu öffnen.)Die Hauptfunktion der grafischen Oberfläche besteht darin, Smart-Home-Geräte (IP-Kameras und Sensoren) an die Steuerung anzuschließen. Die Webanwendung liest die Konfiguration und den aktuellen Status des Controllers und der damit verbundenen Geräte aus der SQLite-Datenbank. Um die Konfiguration des Controllers zu ändern, sendet er Steuerbefehle im JSON-Format über die RESTful-API des Serverprozesses.
Serverprozess
Der Serverprozess ist eine Schlüsselkomponente, die alle grundlegenden Arbeiten zur Automatisierung der Informationsprozesse erledigt, die die Grundlage eines Smart Homes bilden: Empfangen und Verarbeiten von Sensordaten, Ausführen von Steueraktionen in Abhängigkeit von der zugrunde liegenden Logik. Der Zweck des Serverprozesses besteht darin, mit Smart-Home-Geräten zu interagieren, Produktionslogikregeln zu befolgen, Befehle von der grafischen Oberfläche und der Cloud zu empfangen und zu verarbeiten. Der Serverprozess in diesem Smart Home-Controller ist als Multithread-Anwendung implementiert, die in C ++ entwickelt und als separater Systemdienst des
Linux Raspbian- Betriebssystems gestartet wurde.
Die Hauptblöcke des Serverprozesses sind:
- Nachrichtenmanager
- IP-Kamera-Server;
- Z-Wave-Geräteserver;
- Regeln für die Serverproduktionslogik;
- Datenbank der Konfiguration des Controllers und des Blocks logischer Regeln;
- RESTful API-Server für die Interaktion mit der grafischen Oberfläche;
- MQTT-Client für die Interaktion mit der Cloud.
Die Blöcke des Serverprozesses werden als separate Streams implementiert, deren Informationen in Form von Nachrichten im JSON-Format (oder Datenstrukturen, die dieses Format im Prozessspeicher darstellen) übertragen werden.

Die Hauptkomponente des Serverprozesses ist der
Nachrichtenmanager , der Nachrichten im JSON-Format für alle Blöcke des Serverprozesses weiterleitet. Die Arten von JSON-Nachrichteninformationsfeldern und die Werte, die sie akzeptieren können, sind in der Tabelle aufgeführt:
Eine Meldung von einem Kamerabewegungsdetektor sieht beispielsweise folgendermaßen aus:
{ "vendor": "*****", "version": "3.0.0", "timestampMs": "1566293475475", "clientType": "gateway", "deviceId": "1616453d-30cd-44b7-9bf0-************", "deviceType": "camera", "protocol": "onvif", "messageType": "sensorData", "sensorType": "camera", "label": "motionDetector", "sensorData": "on" }
Produktionslogik
Um eine Nachricht vom Dispatcher zu empfangen oder zu senden, abonniert der Serverprozessblock Nachrichten eines bestimmten Typs. Das Abonnement ist eine logische Produktionsregel vom Typ
"If ... then ..." im JSON-Format und eine Verknüpfung zum Nachrichtenhandler im Serverprozessblock. Damit der IP-Kameraserver beispielsweise Befehle von der GUI und der Cloud empfangen kann, müssen Sie die folgende Regel hinzufügen:
{ "if": { "and": [{ "equal": { "deviceId": "1616453d-30cd-44b7-9bf0-************" } }, { "equal": { "messageType": "command" } } ] }, "then": { "result": "true" } }
Wenn die im
Vorgänger (linke Seite) der Regel angegebenen Bedingungen erfüllt sind, wird die
Regel (rechte Seite) der Regel ausgeführt und der Handler erhält Zugriff auf den Hauptteil der JSON-Nachricht. Der Antezedenz unterstützt logische Operatoren, die einen Vergleich von JSON-Schlüssel-Wert-Paaren durchführen:
- gleich "gleich";
- ungleich "not_equal";
- weniger "weniger";
- mehr "größer";
- kleiner oder gleich "less_or_equal";
- größer oder gleich größer_oder_gleich.
Die Vergleichsergebnisse können mit den Operatoren der Booleschen Algebra miteinander verknüpft werden:
- Und "und";
- ODER "oder";
- NICHT "nicht".
Wenn Sie also Operatoren und Operanden in polnischer Notation schreiben, ist es möglich, ziemlich komplexe Bedingungen mit einer großen Anzahl von Parametern zu bilden.
Genau derselbe Mechanismus, der auf JSON-Nachrichten und Produktionsregeln im JSON-Format basiert, wird im Produktionslogik-Serverblock verwendet, um Wissen darzustellen und mithilfe sensorischer Daten von Smart-Home-Sensoren logische Schlussfolgerungen zu ziehen.
Mit einer mobilen Anwendung erstellt ein Benutzer Skripte, nach denen ein Smart Home funktionieren soll. Zum Beispiel:
"Wenn der Sensor zum Öffnen der Vordertür funktioniert hat, schalten Sie das Licht im Flur ein .
" Die Anwendung liest die Kennungen von Sensoren (Öffnungssensor) und Aktoren (Smart Socket oder Smart Lamp) aus der Datenbank und generiert eine logische Regel im JSON-Format, die an den Smart Home Controller gesendet wird. Dieser Mechanismus wird im dritten Artikel unserer Reihe ausführlicher erörtert, in dem wir über eine Clientanwendung zur Verwaltung eines Smart Homes sprechen.
Der oben beschriebene Produktionslogikmechanismus wird mithilfe der
RapidJSON- Bibliothek implementiert, einem SAX-Parser des JSON-Formats in C ++. Das konsistente Lesen und Parsen einer Reihe von Produktionsregeln erleichtert die Implementierung der Datenabgleichsfunktion in Antezedenzien:
void CRuleEngine::Process(PProperties pFact) { m_pActions->clear(); rapidjson::Reader reader; for(TStringMap::value_type& rRule : m_Rules) { std::string sRuleId = rRule.first; std::string sRuleBody = rRule.second; CRuleHandler ruleHandler(pFact); rapidjson::StringStream ruleStream(sRuleBody.c_str()); rapidjson::ParseResult parseResult = reader.Parse(ruleStream, ruleHandler); if(!parseResult) { m_Logger.LogMessage( NLogger2::ePriorityLevelError, std::string("JSON parse error"), "CRuleEngine::Process()", std::string("RuleId: ") + sRuleId); } PProperties pAction = ruleHandler.GetAction(); if(pAction) { pAction->Set("ruleId", sRuleId); m_pActions->push_back(pAction); } } }
Hier ist
pFact eine Struktur, die Schlüssel-Wert-Paare aus einer JSON-Nachricht enthält.
M_Rules ist ein String-Array von Produktionsregeln. Der Vergleich der eingehenden Nachricht und der Produktionsregel wird in der Funktion
reader.Parse (ruleStream, ruleHandler) durchgeführt , wobei
ruleHandler ein Objekt ist, das die Logik von Booleschen Operatoren und Vergleichsoperatoren enthält.
sRuleId ist eine eindeutige
Regelkennung , mit der Regeln in der Datenbank eines Smart-Home-Controllers gespeichert und bearbeitet werden können.
m_pActions - Ein Array mit den Ergebnissen logischer Inferenz: JSON-Nachrichten, die Konsistenzen aus der
Regelbasis enthalten und an den Nachrichtenmanager weitergeleitet werden, damit Abonnentenströme sie verarbeiten können.
Die Leistung von RapidJSON ist vergleichbar mit der Funktion
strlen () , und die minimalen Systemressourcenanforderungen ermöglichen die Verwendung dieser Bibliothek in eingebetteten Geräten. Durch die Verwendung von Nachrichten und logischen Regeln im JSON-Format können Sie ein flexibles System für den Informationsaustausch zwischen allen Komponenten des Smart Home-Controllers implementieren.
Sensoren und Aktoren Z-Wave
Der Hauptvorteil eines Smart Homes besteht darin, dass es verschiedene Umgebungsparameter unabhängig messen und je nach Situation nützliche Funktionen ausführen kann. Dazu werden Sensoren und Aktoren an den Smart Home Controller angeschlossen. In der aktuellen Version handelt es sich um drahtlose Geräte, die nach dem
Z-Wave- Protokoll mit einer speziell für Russland zugewiesenen Frequenz von
869 MHz betrieben werden . Für ihre Arbeit werden sie zu einem Mesh-Netzwerk zusammengefasst, in dem Signalverstärker vorhanden sind, um den Abdeckungsbereich zu vergrößern. Die Geräte verfügen außerdem über einen speziellen Energiesparmodus - sie verbringen die meiste Zeit im Ruhemodus und senden nur dann Informationen, wenn sich ihr Status ändert, was die Lebensdauer der eingebauten Batterie erheblich verlängern kann.

Auf dem Markt finden Sie jetzt eine ziemlich große Anzahl verschiedener Z-Wave-Geräte. Betrachten Sie als Beispiel einige:
- Die Zipato PAN16 Smart-Buchse kann die folgenden Parameter messen: Stromverbrauch (kW / h), Leistung (W), Spannung (V) und Strom (A) im Netz. Es hat auch einen eingebauten Schalter, mit dem Sie das angeschlossene Elektrogerät steuern können;
- Der Neo Coolcam-Lecksensor erkennt das Vorhandensein von verschütteter Flüssigkeit, indem die Kontakte der entfernten Sonde geschlossen werden.
- Der Rauchmelder Zipato PH-PSG01 wird ausgelöst, wenn Rauchpartikel in die Gasanalysatorkammer gelangen.
- Der Bewegungssensor Neo Coolcam analysiert die Infrarotstrahlung des menschlichen Körpers. Zusätzlich gibt es einen Lichtsensor (Lx);
- Der Philio PST02-A Multisensor misst Temperatur (° C), Belichtung (%), Türöffnung und Anwesenheit einer Person im Raum.
- Z-Wave USB Stick ZME E UZB1 Netzwerkcontroller, an den die Sensoren angeschlossen sind.
Es ist sehr wichtig, dass die Geräte und die Steuerung mit derselben Frequenz arbeiten, da sie sich sonst zum Zeitpunkt der Verbindung einfach nicht sehen. Bis zu 232 Geräte können an einen Z-Wave-Netzwerkcontroller angeschlossen werden, was für eine Wohnung oder ein Landhaus völlig ausreicht. Um den Versorgungsbereich des Netzwerks in Innenräumen zu erweitern, kann ein Smart Socket als Signalverstärker verwendet werden.

Im Serverprozess des Smart-Home-Controllers, der im vorherigen Abschnitt erläutert wurde, ist der Z-Wave-Server für die Interaktion mit Z-Wave-Geräten verantwortlich. Um Informationen von Sensoren zu erhalten, verwendet er die
OpenZWave- Bibliothek in C ++, die eine Schnittstelle für die Interaktion mit einem USB-Controller des Z-Wave-Netzwerks bietet und mit vielen Sensoren und Aktoren zusammenarbeitet. Der vom Sensor gemessene Wert des Umgebungsparameters wird vom Z-Wave-Server in Form einer JSON-Nachricht aufgezeichnet:
{ "vendor": "*****", "version": "3.0.0", "timestampMs": "1566479791290", "clientType": "gateway", "deviceId": "20873eb0-dd5e-4213-a175-************", "deviceType": "sensor", "protocol": "zwave", "messageType": "sensorData", "homeId": "0xefa0cfa7", "nodeId": "20", "sensorType": "METER", "label": "Voltage", "sensorData": "229.3", "units": "V" }
Es wird dann an den Server Process Message Manager weitergeleitet, damit Abonnententhreads es empfangen können. Der Hauptteilnehmer ist der Produktionslogikserver, der die Werte von Nachrichtenfeldern in den Antezedenzen logischer Regeln vergleicht. Die Ergebnisse der logischen Ausgabe mit Steuerbefehlen werden an den Nachrichtenmanager zurückgesendet und von dort an den Z-Wave-Server weitergeleitet, der sie dekodiert und an den USB-Controller des Z-Wave-Netzwerks sendet. Dann fallen sie in das Executive-Gerät, das den Zustand der Umgebung verändert, und das Smart Home leistet somit nützliche Arbeit.
(Klicken Sie auf das Bild, um es in höherer Auflösung zu öffnen.)Z-Wave-Geräte werden über die grafische Oberfläche des Smart-Home-Controllers angeschlossen. Gehen Sie dazu zur Seite mit der Liste der Geräte und klicken Sie auf die Schaltfläche "Hinzufügen". Der Befehl add über die RESTful-API gelangt in den Serverprozess und wird dann vom Nachrichtenmanager an den Z-Wave-Server gesendet, wodurch der Z-Wave-USB-Controller in den speziellen Gerätemodus versetzt wird. Als nächstes müssen Sie auf dem Z-Wave-Gerät eine Reihe von schnellen Drücken (3 Drücken innerhalb von 1,5 Sekunden) auf die Servicetaste ausführen. Ein USB-Controller verbindet das Gerät mit dem Netzwerk und sendet Informationen darüber an den Z-Wave-Server. Dadurch wird wiederum ein neuer Datensatz in der SQLite-Datenbank mit den Parametern des neuen Geräts erstellt. Nach einem vorgegebenen Zeitintervall kehrt die grafische Oberfläche zur Seite der Liste der Z-Wave-Geräte zurück, liest Informationen aus der Datenbank und zeigt das neue Gerät in der Liste an. Gleichzeitig erhält jedes Gerät eine eigene eindeutige Kennung, die in den Regeln für Produktionsinferenzen und bei der Arbeit in der Cloud verwendet wird. Die Funktionsweise dieses Algorithmus ist im UML-Diagramm dargestellt:
(Klicken Sie auf das Bild, um es in höherer Auflösung zu öffnen.)IP-Kamera-Verbindung
Das in diesem Artikel behandelte Cloud-Smart-Home-System ist eine Modernisierung des ebenfalls vom Autor entwickelten Cloud-Videoüberwachungssystems, das seit mehreren Jahren auf dem Markt ist und viele Installationen in Russland hat.
Bei Cloud-Videoüberwachungssystemen ist eines der akuten Probleme die begrenzte Auswahl an Geräten, mit denen eine Integration möglich ist. Die für die Verbindung zur Cloud verantwortliche Software ist im Camcorder installiert, was sofort ernsthafte Anforderungen an die Hardware stellt - den Prozessor und die Menge an freiem Speicher. Dies erklärt hauptsächlich den höheren Preis für Cloud-basierte Videoüberwachungskameras im Vergleich zu herkömmlichen IP-Kameras. Darüber hinaus ist eine lange Verhandlungsphase mit Herstellern von CCTV-Kameras erforderlich, um Zugriff auf das Kameradateisystem und alle erforderlichen Entwicklungstools zu erhalten.

Andererseits verfügen alle modernen IP-Kameras über Standardprotokolle für die Interaktion mit anderen Geräten (insbesondere DVRs). Die Verwendung eines separaten Controllers, der über das Standardprotokoll eine Verbindung herstellt und Videostreams von IP-Kameras in die Cloud überträgt, bietet daher erhebliche Wettbewerbsvorteile für Cloud-Videoüberwachungssysteme. Wenn der Client bereits ein Videoüberwachungssystem installiert hat, das auf einfachen IP-Kameras basiert, kann es erweitert und in ein vollwertiges, bewölktes Smart Home verwandelt werden.
Das beliebteste Protokoll für IP-Videoüberwachungssysteme, das jetzt ausnahmslos von allen Herstellern von IP-Kameras unterstützt wird, ist
ONVIF Profile S , dessen Spezifikationen in der Beschreibungssprache der
WSDL- Webdienste vorhanden sind. Mithilfe von Dienstprogrammen aus dem
gSOAP- Toolkit kann der Quellcode von Diensten generiert werden, die mit IP-Kameras arbeiten:
$ wsdl2h -o onvif.h \ https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl \ https://www.onvif.org/ver10/events/wsdl/event.wsdl \ https://www.onvif.org/ver10/media/wsdl/media.wsdl \ https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl $ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h
Als Ergebnis erhalten wir eine Reihe von Header- "* .h" - und Quelldateien "* .cpp" in C ++, die direkt in einer Anwendung oder einer separaten Bibliothek abgelegt und mit dem GCC-Compiler kompiliert werden können. Aufgrund der vielen Funktionen ist der Code groß und erfordert zusätzliche Optimierung. Der Mikrocomputer Raspberry Pi 3 Modell B + verfügt über eine ausreichende Leistung, um diesen Code auszuführen. Wenn der Code jedoch auf eine andere Plattform portiert werden muss, müssen die Prozessorarchitektur und die Systemressourcen korrekt ausgewählt werden.
IP-Kameras, die den ONVIF-Standard unterstützen, werden in einem lokalen Netzwerk mit einer speziellen Multicast-Gruppe mit der Adresse
239.255.255.250 verbunden . Es gibt ein Protokoll
WS-Discovery , mit dem Sie die Suche nach Geräten im lokalen Netzwerk automatisieren können.
Die Smart-Oberfläche des Smart-Home-Controllers implementiert die Suchfunktion für IP-Kameras in der PHP-Sprache, was bei der Interaktion mit Webdiensten über XML-Nachrichten sehr praktisch ist. Wenn Sie die Menüpunkte
Geräte> IP-Kameras> Scannen auswählen, wird der Suchalgorithmus für IP-Kameras gestartet und das Ergebnis in einer Tabelle angezeigt:
(Klicken Sie auf das Bild, um es in höherer Auflösung zu öffnen.)Wenn Sie dem Controller eine Kamera hinzufügen, können Sie die Einstellungen festlegen, nach denen sie mit der Cloud interagieren soll. Auch in dieser Phase wird ihm automatisch eine eindeutige Gerätekennung zugewiesen, anhand derer er in Zukunft in der Cloud leicht identifiziert werden kann.

Als Nächstes wird eine Nachricht im JSON-Format generiert, die alle Parameter der hinzugefügten Kamera enthält, und über den Befehl RESTful API an den Serverprozess des Smart Home-Controllers gesendet. Dort werden die Kameraparameter dekodiert und in der internen SQLite-Datenbank gespeichert. Außerdem werden die folgenden Verarbeitungsthreads gestartet:
- Herstellen einer RTSP-Verbindung zum Empfangen von Video- und Audiostreams;
- Transcodieren von Audio aus den Formaten G.711 mu-Law, G.711 A-Law, G.723 usw. zum AAC-Format;
- Transcodieren von H.264-Video- und AAC-Audio-Streams in den FLV-Container und Übertragen in die Cloud mithilfe von RTMP;
- Herstellen einer Verbindung mit dem Endpunkt des IP-Kamera-Bewegungsmelders über das ONVIF-Protokoll und dessen periodisches Abrufen;
- periodisches Generieren eines Miniaturbild-Vorschaubilds und Senden an die Cloud unter Verwendung des MQTT-Protokolls;
- Lokale Aufzeichnung von Video- und Audiostreams in Form separater Dateien im MP4-Format auf einer SD- oder Flash-Karte eines Smart-Home-Controllers.

Um eine Verbindung mit Kameras herzustellen, Videostreams im Serverprozess zu transkodieren, zu verarbeiten und aufzuzeichnen, werden Funktionen aus der
FFmpeg 4.1.0-Bibliothek verwendet.
Im Leistungstest wurden 3 Kameras an die Steuerung angeschlossen:
- HiWatch DS-I114W (Auflösung - 720p, Komprimierungsformat - H.264, Bitrate - 1 Mb / s, Ton G.711 mu-Law);
- Mikrodigitales MDC-M6290FTD-1 (Auflösung - 1080p, Komprimierungsformat - H.264, Bitrate - 1 Mb / s, ohne Ton);
- Dahua DH-IPC-HDW4231EMP-AS-0360B (Auflösung - 1080p, Komprimierungsformat - H.264, Bitrate - 1,5 Mb / s, AAC-Sound).

Alle drei Streams wurden gleichzeitig in die Cloud ausgegeben, die Tontranscodierung wurde nur von einer Kamera durchgeführt, die Aufzeichnung des lokalen Archivs wurde deaktiviert. Die CPU-Auslastung betrug ca. 5%, die RAM-Auslastung 32 MB (pro Prozess) und 56 MB (insgesamt mit Betriebssystem).
Somit können ungefähr 20 bis 30 Kameras (abhängig von Auflösung und Bitrate) an den Smart-Home-Controller angeschlossen werden, was für ein Videoüberwachungssystem eines dreistöckigen Häuschens oder eines kleinen Lagers ausreicht. Bei Aufgaben, bei denen eine hohe Leistung erforderlich ist, können Sie einen Nettop mit einem Intel Multi-Core-Prozessor und Linux Debian Sarge OS verwenden. Derzeit befindet sich der Controller im Testbetrieb, und die Daten zu seiner Leistung werden aktualisiert.
Cloud-Interaktion
Cloud Smart Home speichert Benutzerdaten (Video- und Sensormessungen) in der Cloud. Die Cloud-Speicherarchitektur wird im nächsten Artikel unserer Reihe ausführlicher erläutert. Lassen Sie uns nun über die Schnittstelle zum Übertragen von Informationsnachrichten vom Smart Home-Controller in die Cloud sprechen.
Die Zustände angeschlossener Geräte und Sensormessungen werden mithilfe des
MQTT- Protokolls übertragen, das aufgrund seiner Einfachheit und Energieeffizienz häufig in IoT-Projekten verwendet wird. MQTT verwendet ein Client-Server-Modell, wenn Clients bestimmte Themen im Broker abonnieren und ihre Nachrichten veröffentlichen. Der Broker sendet Nachrichten an alle Abonnenten gemäß den durch die QoS-Stufe (Quality of Service) festgelegten Regeln:
- QoS 0 - höchstens einmal (keine Liefergarantie);
- QoS 1 - mindestens einmal (mit Lieferbestätigung);
- QoS 2 - genau einmal (mit zusätzlicher Lieferbestätigung).
In unserem Fall wird
Eclipse Mosquitto als MQTT-Broker verwendet. Der Name des Themas ist die eindeutige Kennung des Smart-Home-Controllers. Der MQTT-Client im Serverprozess abonniert dieses Thema und übersetzt JSON-Nachrichten, die vom Nachrichtenmanager kommen, in dieses Thema. Umgekehrt werden Nachrichten vom MQTT-Broker im Nachrichtenmanager an diese gesendet, der sie dann innerhalb des Serverprozesses an seine Abonnenten multiplext:

Um Nachrichten über den Status des Smart-Home-Controllers zu übertragen, wird der Mechanismus der gespeicherten Nachrichten verwendet,
bei denen Nachrichten des MQTT-Protokolls gespeichert werden. Auf diese Weise können Sie die Momente der Wiederverbindung bei Stromausfall korrekt überwachen.
Der MQTT-Client wurde basierend auf der Implementierung der
Eclipse Paho- Bibliothek in C ++ entwickelt.
H.264 + AAC-Medienströme werden mithilfe des RTMP-Protokolls an die Cloud gesendet, wobei ein Cluster von Medienservern für deren Verarbeitung und Speicherung verantwortlich ist. Um die Last im Cluster optimal zu verteilen und den am wenigsten belasteten Medienserver auszuwählen, sendet der Smart Home-Controller eine vorläufige Anforderung an den Cloud Load Balancer und sendet erst dann den Medienstrom.
Fazit
Der Artikel untersuchte eine spezifische Implementierung eines Smart-Home-Controllers auf Basis des Raspberry Pi 3 B + -Mikrocomputers, der mithilfe des Z-Wave-Protokolls Informationen empfangen, verarbeiten und Geräte verwalten, mithilfe des ONVIF-Protokolls mit IP-Kameras interagieren sowie Daten und Befehle mit der Cloud austauschen kann MQTT- und RTMP-Protokolldienst. Basierend auf einem Vergleich von logischen Regeln und Fakten im JSON-Format wurde eine Produktionslogik-Engine entwickelt.
Jetzt wird der Smart-Home-Controller in mehreren Einrichtungen in Moskau und der Region Moskau getestet.
In der nächsten Version des Controllers ist geplant, Geräte anderer Typen (RF, Bluetooth, WiFi, Kabel) anzuschließen. Zur Vereinfachung der Benutzer wird das Verfahren zum Anschließen von Sensoren und IP-Kameras auf die mobile Anwendung übertragen. Es gibt auch Ideen zur Optimierung des Server-Prozesscodes und zur Portierung der Software auf das
OpenWrt- Betriebssystem. Dies spart auf einem separaten Controller und überträgt die Funktionalität eines Smart Homes auf einen normalen Haushaltsrouter.