Cloud Smart Home. Teil 1: Controller und Sensoren

Cloud Smart Home. Teil 1: Controller und Sensoren

Dank der rasanten Entwicklung von Mikroelektronik, Kommunikationskanälen, Internettechnologien und künstlicher Intelligenz gewinnt das Thema Smart Home heute immer mehr an Relevanz. Das menschliche Zuhause hat seit der Steinzeit erhebliche Veränderungen erfahren und ist im Zeitalter der industriellen Revolution 4.0 und des Internets der Dinge komfortabel, funktional und sicher geworden. Es kommen Lösungen auf den Markt, die eine Wohnung oder ein Landhaus in komplexe Informationssysteme verwandeln, die von überall auf der Welt per Smartphone gesteuert werden können. Darüber hinaus sind für die Mensch-Maschine-Interaktion keine Kenntnisse in Programmiersprachen mehr erforderlich – dank Spracherkennungs- und Synthesealgorithmen spricht ein Mensch mit einem Smart Home in seiner Muttersprache.

Einige derzeit auf dem Markt befindliche Smart-Home-Systeme sind eine logische Weiterentwicklung von Cloud-Videoüberwachungssystemen, deren Entwickler den Bedarf an einer umfassenden Lösung nicht nur für die Überwachung, sondern auch für die Verwaltung entfernter Objekte erkannt haben.

Ihre Aufmerksamkeit wird auf eine Reihe von drei Artikeln gelenkt, in denen alle Hauptkomponenten des Cloud-Smart-Home-Systems behandelt werden, die vom Autor persönlich entwickelt und in Betrieb genommen wurden. Der erste Artikel befasst sich mit den im Smart Home installierten Client-Endgeräten, der zweite mit der Architektur des Cloud-Speicher- und Datenverarbeitungssystems und der dritte Artikel schließlich mit der 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 Sommerhaus oder einem Cottage ein Smart Home machen können. Hierzu ist es in der Regel erforderlich, folgende Geräte in der Wohnung anzubringen:

  1. Sensoren, die verschiedene Parameter der äußeren Umgebung messen;
  2. Aktoren, die auf externe Objekte wirken;
  3. ein Controller, der Berechnungen entsprechend den Messungen der Sensoren und der zugrunde liegenden Logik durchführt und Befehle an die Aktoren ausgibt.

Die folgende Abbildung zeigt ein Diagramm eines Smart Homes, das Wasserlecksensoren (1) im Badezimmer, Temperatur- (2) und Beleuchtungssensoren (3) im Schlafzimmer, eine Smart-Steckdose (4) in der Küche und eine Videoüberwachung enthält Kamera (5) im Flur.

Cloud Smart Home. Teil 1: Controller und Sensoren

Derzeit werden häufig drahtlose Sensoren verwendet, die mit den Protokollen RF433, Z-Wave, ZigBee, Bluetooth und WiFi arbeiten. Ihre Hauptvorteile sind einfache Installation und Verwendung sowie niedrige Kosten und Zuverlässigkeit. Hersteller streben danach, ihre Geräte auf den Massenmarkt zu bringen und sie dem Durchschnittsbenutzer zugänglich zu machen.

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 einem einzigen Netzwerk vereint und steuert.

Einige Lösungen können jedoch gleichzeitig einen Sensor, einen Aktor und einen Controller kombinieren. Beispielsweise kann eine intelligente Steckdose so programmiert werden, dass sie sich nach einem Zeitplan ein- oder ausschaltet, und eine Cloud-Videoüberwachungskamera kann Videos über ein Bewegungsmeldersignal aufzeichnen. Im einfachsten Fall kann auf einen separaten Controller verzichtet werden, für den Aufbau eines flexiblen Systems mit vielen Szenarien ist dieser jedoch notwendig.

Um den Smart-Home-Controller mit dem globalen Netzwerk zu verbinden, kann ein gewöhnlicher Internet-Router (7) verwendet werden, der längst zu einem vertrauten Haushaltsgerät in jedem Haushalt geworden ist. Es gibt noch ein weiteres Argument für den Smart-Home-Controller: Wenn die Verbindung zum Internet unterbrochen wird, funktioniert das Smart Home dank des im Controller und nicht im Cloud-Dienst gespeicherten Logikblocks normal weiter.

Smart-Home-Controller

Der in diesem Artikel besprochene Controller für das Cloud-Smart-Home-System wurde auf Basis eines Single-Board-Mikrocomputers entwickelt Raspberry Pi 3 Modell B+, das im März 2018 veröffentlicht wurde und über genügend Ressourcen und Leistung für Smart-Home-Aufgaben verfügt. Es umfasst einen Quad-Core-Cortex-A53-Prozessor auf einer 64-Bit-ARMv8-A-Architektur, getaktet mit 1.4 GHz, sowie 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 und einen Gigabit-Ethernet-Adapter, der über USB 2.0 betrieben wird Bus.

Cloud Smart Home. Teil 1: Controller und Sensoren

Der Zusammenbau des Controllers ist denkbar einfach: Der Mikrocomputer (1) wird in ein Kunststoffgehäuse (2) eingebaut, anschließend werden eine 8 GB microSD-Speicherkarte mit Software (3) und ein USB-Z-Wave-Netzwerkcontroller (4) eingebaut die entsprechenden Steckplätze. Der Smart Home Controller wird über ein 5V, 2.1A Netzteil (5) und ein USB-Micro-USB-Kabel (6) an das Stromnetz angeschlossen. Jeder Controller verfügt über eine eindeutige Identifikationsnummer, die beim ersten Start in die Konfigurationsdatei geschrieben wird und für die Interaktion mit Cloud-Smart-Home-Diensten erforderlich ist.

Die Smart-Home-Controller-Software wurde vom Autor dieses Artikels auf Basis des Betriebssystems entwickelt Linux Raspbian Stretch. Es besteht aus den folgenden Hauptsubsystemen:

  • ein Serverprozess zur Interaktion mit Smart-Home-Geräten und der Cloud;
  • grafische Benutzeroberfläche zum Einstellen der Konfigurations- und Betriebsparameter des Controllers;
  • Datenbank zum Speichern der Controller-Konfiguration.

Cloud Smart Home. Teil 1: Controller und Sensoren

Datenbank Der Smart-Home-Controller wird auf Basis eines eingebetteten DBMS implementiert SQLite und ist eine Datei auf der SD-Karte mit Systemsoftware. Es dient als Controller-Konfigurationsspeicher – Informationen über die angeschlossenen Geräte und deren aktuellen Status, ein Block logischer Produktionsregeln sowie Informationen, die indiziert werden müssen (z. B. Dateinamen lokaler Videoarchive). Bei einem Neustart des Controllers werden diese Informationen gespeichert, sodass bei Stromausfällen die Funktionalität des Controllers wiederhergestellt werden kann.

GUI Der Smart-Home-Controller wird in PHP 7 mithilfe eines Mikroframeworks entwickelt Slim. Der Webserver ist für die Ausführung der Anwendung verantwortlich. Lichttpd, wird aufgrund seiner guten Leistung und geringen Ressourcenanforderungen häufig in eingebetteten Geräten verwendet.

Cloud Smart Home. Teil 1: Controller und Sensoren
(Klicken Sie auf das Bild, um es in größerer Auflösung zu öffnen)

Die Hauptfunktion der GUI besteht darin, Smart-Home-Geräte (IP-Kameras und Sensoren) mit dem Controller zu verbinden. Die Webanwendung liest die Konfiguration und den aktuellen Zustand des Controllers und der damit verbundenen Geräte aus der SQLite-Datenbank. Um die Controller-Konfiguration zu ändern, sendet er Steuerbefehle im JSON-Format über die RESTful-API des Serverprozesses.

Serverprozess

Serverprozess - eine Schlüsselkomponente, die alle Hauptarbeiten zur Automatisierung von Informationsprozessen übernimmt, die die Grundlage eines Smart Homes bilden: Empfang und Verarbeitung sensorischer Daten, Ausgabe von Steueraktionen abhängig von der zugrunde liegenden Logik. Der Zweck des Serverprozesses besteht darin, mit Smart-Home-Geräten zu interagieren, Produktionslogikregeln auszuführen und Befehle von der grafischen Oberfläche und der Cloud zu empfangen und zu verarbeiten. Der Serverprozess im betrachteten Smart-Home-Controller wird als in C++ entwickelte Multithread-Anwendung implementiert und als separater Dienst gestartet systemd Betriebssystem Linux Raspbian.

Die Hauptblöcke des Serverprozesses sind:

  1. Nachrichtenmanager;
  2. IP-Kameraserver;
  3. Z-Wave-Geräteserver;
  4. Server der logischen Produktionsregeln;
  5. Datenbank zur Konfiguration des Controllers und Block logischer Regeln;
  6. RESTful API-Server für die Interaktion mit der grafischen Oberfläche;
  7. MQTT-Client zur Interaktion mit der Cloud.

Serverprozessblöcke werden als separate Streams implementiert, zwischen denen Informationen in Form von Nachrichten im JSON-Format (oder Datenstrukturen, die dieses Format im Prozessspeicher darstellen) übertragen werden.

Cloud Smart Home. Teil 1: Controller und Sensoren

Die Hauptkomponente des Serverprozesses ist Nachrichtenmanager, das JSON-Nachrichten an alle Blöcke im Serverprozess weiterleitet. Die Arten von Informationsfeldern in einer JSON-Nachricht und die Werte, die sie annehmen können, sind in der Tabelle aufgeführt:

Gerätetyp
Protokoll
Nachrichtentyp
Gerätestatus
Befehl

Kamera
onvif
sensorData
on
Streaming (Ein/Aus)

Sensor
Z-Wave
Befehl
WOW!
Aufnahme (Ein/Aus)

Effektor
MQTT
businessLogicRule
Streaming (Ein/Aus)
Gerät (Hinzufügen/Entfernen)

Geschäftslogik
Konfigurationsdaten
Aufnahme (Ein/Aus)

Bluetooth
Gerätestatus
Fehler

Wi-Fi

rf

Eine Meldung eines Kamera-Bewegungsmelders sieht beispielsweise so 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. Ein Abonnement ist eine logische Produktionsregel des Typs "Wenn, dann...", dargestellt im JSON-Format, und ein Link 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 in angegebenen Bedingungen erfüllt sind Vorgänger (linke Seite) Regeln sind also wahr folgerichtig (rechte Seite) Regeln, und der Handler erhält Zugriff auf den Text der JSON-Nachricht. Der Vorgänger unterstützt logische Operatoren, die JSON-Schlüssel-Wert-Paare vergleichen:

  1. ist gleich „gleich“;
  2. ungleich „not_equal“;
  3. weniger als „weniger“;
  4. mehr „größer“;
  5. kleiner oder gleich „less_or_equal“;
  6. größer oder gleich „greater_or_equal“.

Die Ergebnisse des Vergleichs können mithilfe boolescher Algebra-Operatoren miteinander verknüpft werden:

  1. Und und";
  2. Oder oder";
  3. Nicht nicht".

Wenn man also Operatoren und Operanden in polnischer Notation schreibt, kann man ziemlich komplexe Bedingungen mit einer großen Anzahl von Parametern bilden.

Der exakt gleiche Mechanismus, der auf JSON-Nachrichten und Produktionsregeln im JSON-Format basiert, wird im Produktionslogik-Serverblock verwendet, um Wissen darzustellen und Schlussfolgerungen mithilfe von Sensordaten von Smart-Home-Sensoren durchzuführen.

Der Nutzer erstellt mithilfe einer mobilen Anwendung Szenarien, nach denen ein Smart Home funktionieren soll. Zum Beispiel: „Wenn der Sensor zum Öffnen der Haustür ausgelöst wird, dann schalten Sie das Licht im Flur ein“. Die Anwendung liest die Kennungen von Sensoren (Öffnungssensor) und Aktoren (Smart-Steckdose oder Smart-Lampe) 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 unseres Zyklus ausführlicher besprochen, wo wir über die Client-Anwendung zur Verwaltung eines Smart Homes sprechen.

Der oben diskutierte Mechanismus der Produktionslogik wird mithilfe der Bibliothek implementiert Schnelles JSON — SAX-Parser des JSON-Formats in der Sprache C++. Das sequentielle Lesen und Parsen einer Reihe von Produktionsregeln erleichtert die Implementierung einer Datenabgleichsfunktion innerhalb von Vorläufern:

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 pFakt – eine Struktur, die Schlüssel-Wert-Paare aus einer JSON-Nachricht enthält, m_Rules — String-Array von Produktionsregeln. Der Abgleich der eingehenden Nachricht und der Produktionsregel erfolgt in der Funktion reader.Parse(ruleStream, RuleHandler)Wo RuleHandler ist ein Objekt, das die Logik von booleschen Operatoren und Vergleichsoperatoren enthält. sRuleId - eine eindeutige Regelkennung, dank der es möglich ist, Regeln in der Datenbank des Smart Home Controllers zu speichern und zu bearbeiten. m_pActions – ein Array mit den Ergebnissen der Inferenz: JSON-Nachrichten, die Konsequenzen aus der Regelbasis enthalten und weiter an den Nachrichtenmanager gesendet werden, damit Abonnenten-Threads sie verarbeiten können.

Die Leistung von RapidJSON ist vergleichbar mit der Funktion strlen ()und die Mindestanforderungen an die Systemressourcen 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 des Informationsaustauschs zwischen allen Komponenten des Smart-Home-Controllers implementieren.

Sensoren und Aktoren Z-Wave

Der Hauptvorteil eines Smart Home besteht darin, dass es verschiedene Parameter der Außenumgebung selbstständig 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 dabei um drahtlose Geräte, die unter dem Protokoll arbeiten Z-Wave auf einer eigenen Frequenz 869 MHz Für Russland. Für ihre Arbeit werden sie zu einem Mesh-Netzwerk zusammengefasst, in dem sich Signalverstärker befinden, um den Abdeckungsbereich zu vergrößern. Die Geräte verfügen außerdem über einen speziellen Energiesparmodus – sie verbringen die meiste Zeit im Schlafmodus und senden Informationen nur, wenn sich ihr Zustand ändert, was die Lebensdauer des eingebauten Akkus deutlich verlängern kann.

Cloud Smart Home. Teil 1: Controller und Sensoren

Heutzutage gibt es eine ganze Reihe verschiedener Z-Wave-Geräte auf dem Markt. Betrachten Sie als Beispiel einige:

  1. Die intelligente Steckdose Zipato PAN16 kann folgende Parameter messen: Stromverbrauch (kWh), Leistung (W), Spannung (V) und Strom (A) im Netz. Es verfügt außerdem über einen eingebauten Schalter, mit dem Sie das angeschlossene Elektrogerät steuern können;
  2. Der Neo Coolcam-Lecksensor erkennt das Vorhandensein einer verschütteten Flüssigkeit, indem er die Kontakte der Fernsonde schließt;
  3. Der Rauchmelder Zipato PH-PSG01 wird ausgelöst, wenn Rauchpartikel in die Gasanalysatorkammer gelangen;
  4. Der Neo Coolcam Bewegungssensor analysiert die Infrarotstrahlung des menschlichen Körpers. Zusätzlich gibt es einen Lichtsensor (Lx);
  5. Der Multisensor Philio PST02-A misst Temperatur (°C), Beleuchtung (%), Türöffnung, menschliche Anwesenheit im Raum;
  6. Netzwerkcontroller Z-Wave USB Stick ZME E UZB1, an den die Sensoren angeschlossen werden.

Es ist sehr wichtig, dass die Geräte und der Controller mit der gleichen Frequenz arbeiten, da sie sich sonst zum Zeitpunkt der Verbindung auf einfache Weise nicht sehen können. An einen Z-Wave-Netzwerkcontroller können bis zu 232 Geräte angeschlossen werden, was für eine Wohnung oder ein Landhaus völlig ausreicht. Um die Netzabdeckung im Innenbereich zu erweitern, kann eine smarte Steckdose als Signalverstärker eingesetzt werden.

Cloud Smart Home. Teil 1: Controller und Sensoren

Im im vorherigen Absatz besprochenen Smart-Home-Controller-Serverprozess ist der Z-Wave-Server für die Interaktion mit Z-Wave-Geräten verantwortlich. Um Informationen von Sensoren zu erhalten, nutzt es die Bibliothek OpenZWave in C++, das eine Schnittstelle für die Interaktion mit einem Z-Wave-Netzwerk-USB-Controller bietet und mit einer Vielzahl von Sensoren und Aktoren funktioniert. Der vom Sensor gemessene Wert des Umgebungsparameters wird vom Z-Wave-Server als JSON-Nachricht geschrieben:

{
	"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"
}

Anschließend wird es an den Nachrichtenmanager des Serverprozesses gesendet, damit Abonnenten-Threads es empfangen können. Der primäre Abonnent ist der Produktionslogikserver, der die Nachrichtenfeldwerte in den Vorläufern der Logikregeln abgleicht. Die Inferenzergebnisse, die Steuerbefehle enthalten, werden an den Nachrichtenmanager und von dort an den Z-Wave-Server zurückgesendet, der sie dekodiert und an den Z-Wave-Netzwerk-USB-Controller sendet. Dann gelangen sie in das ausführende Gerät, das den Zustand von Objekten in der Außenumgebung verändert, und das Smart Home verrichtet somit nützliche Arbeit.

Cloud Smart Home. Teil 1: Controller und Sensoren
(Klicken Sie auf das Bild, um es in größerer Auflösung zu öffnen)

Der Anschluss von Z-Wave-Geräten erfolgt über die grafische Oberfläche des Smart-Home-Controllers. Gehen Sie dazu auf die Seite mit der Geräteliste und klicken Sie auf die Schaltfläche „Hinzufügen“. Der Befehl zum Hinzufügen über die RESTful-API-Schnittstelle gelangt in den Serverprozess und wird dann vom Nachrichtenmanager an den Z-Wave-Server gesendet, der den Z-Wave-USB-Netzwerkcontroller in einen speziellen Modus zum Hinzufügen von Geräten versetzt. Als nächstes müssen Sie auf dem Z-Wave-Gerät mehrmals schnell (drei Mal innerhalb von 3 Sekunden) auf die Servicetaste drücken. Der 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. Die grafische Benutzeroberfläche kehrt nach dem angegebenen Zeitintervall zur Z-Wave-Gerätelistenseite zurück, liest Informationen aus der Datenbank und zeigt ein neues Gerät in der Liste an. Gleichzeitig erhält jedes Gerät eine eigene eindeutige Kennung, die in den Regeln der Produktionsinferenz und beim Arbeiten in der Cloud verwendet wird. Die Funktionsweise dieses Algorithmus ist im UML-Diagramm dargestellt:

Cloud Smart Home. Teil 1: Controller und Sensoren
(Klicken Sie auf das Bild, um es in größerer Auflösung zu öffnen)

Anschließen von IP-Kameras

Das in diesem Artikel besprochene Cloud-Smart-Home-System ist ein Upgrade des ebenfalls vom Autor entwickelten Cloud-Videoüberwachungssystems, das seit mehreren Jahren auf dem Markt ist und in Russland viele Installationen hat.

Bei Cloud-Videoüberwachungssystemen ist eines der akuten Probleme die begrenzte Auswahl an Geräten, mit denen eine Integration erfolgen kann. Die für die Verbindung mit der Cloud verantwortliche Software ist im Inneren des Camcorders installiert, was sofort hohe Anforderungen an seine Hardware stellt – den Prozessor und die Menge an freiem Speicher. Dies erklärt hauptsächlich den höheren Preis von Cloud-Überwachungskameras im Vergleich zu herkömmlichen IP-Kameras. Darüber hinaus ist eine langwierige Verhandlungsphase mit CCTV-Kameraherstellern erforderlich, um Zugriff auf das Dateisystem der Kamera und alle erforderlichen Entwicklungstools zu erhalten.

Cloud Smart Home. Teil 1: Controller und Sensoren

Andererseits verfügen alle modernen IP-Kameras über Standardprotokolle für die Interaktion mit anderen Geräten (insbesondere Videorecordern). Daher bietet die Verwendung eines separaten Controllers, der über ein Standardprotokoll eine Verbindung herstellt und Videostreams von IP-Kameras in die Cloud überträgt, erhebliche Wettbewerbsvorteile für Cloud-Videoüberwachungssysteme. Wenn der Kunde außerdem bereits ein Videoüberwachungssystem auf Basis einfacher IP-Kameras installiert hat, besteht die Möglichkeit, dieses zu erweitern und in ein vollwertiges Cloud-Smart Home umzuwandeln.

Das beliebteste Protokoll für IP-Videoüberwachungssysteme, das mittlerweile ausnahmslos von allen IP-Kameraherstellern unterstützt wird, ist ONVIF Profil S, deren Spezifikationen in der Web Services Description Language vorliegen wsdl. Verwenden der Dienstprogramme aus dem Toolkit gSEIFE Es ist möglich, den Quellcode von Diensten zu generieren, 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 Headerdateien „*.h“ und Quelldateien „*.cpp“ in der Sprache C++, die direkt in eine Anwendung oder eine separate Bibliothek eingefügt und mit dem GCC-Compiler kompiliert werden können. Aufgrund der vielen Funktionen ist der Code umfangreich und erfordert zusätzliche Optimierung. Der Mikrocomputer Raspberry Pi 3 Modell B+ verfügt über genügend Leistung, um diesen Code auszuführen. Falls es jedoch notwendig wird, den Code auf eine andere Plattform zu portieren, ist es notwendig, die richtige Prozessorarchitektur und die richtigen Systemressourcen auszuwählen.

IP-Kameras, die den ONVIF-Standard unterstützen, werden beim Betrieb in einem lokalen Netzwerk mit einer speziellen Multicast-Gruppe mit der Adresse verbunden 239.255.255.250. Es gibt ein Protokoll W.S. Discovery, mit dem Sie die Suche nach Geräten im lokalen Netzwerk automatisieren können.

In der grafischen Oberfläche des Smart-Home-Controllers ist die Funktion zur Suche nach IP-Kameras in der PHP-Sprache implementiert, was bei der Interaktion mit Webdiensten über XML-Nachrichten sehr praktisch ist. Bei der Auswahl von Menüpunkten Geräte > IP-Kameras > Scannen Der Algorithmus zur Suche nach IP-Kameras wird gestartet und zeigt das Ergebnis in Form einer Tabelle an:

Cloud Smart Home. Teil 1: Controller und Sensoren
(Klicken Sie auf das Bild, um es in größerer Auflösung zu öffnen)

Beim Hinzufügen einer Kamera zum Controller können Sie die Einstellungen festlegen, nach denen diese mit der Cloud interagiert. Zu diesem Zeitpunkt wird ihm außerdem automatisch eine eindeutige Gerätekennung zugewiesen, anhand derer es in Zukunft in der Cloud leicht identifiziert werden kann.

Cloud Smart Home. Teil 1: Controller und Sensoren

Anschließend wird eine Nachricht im JSON-Format generiert, die alle Parameter der hinzugefügten Kamera enthält, und über den RESTful-API-Befehl an den Serverprozess des Smart-Home-Controllers gesendet, wo die Kameraparameter dekodiert und in der internen SQLite-Datenbank gespeichert werden Wird auch zum Starten der folgenden Verarbeitungsthreads verwendet:

  1. Aufbau einer RTSP-Verbindung zum Empfang von Video- und Audiostreams;
  2. Audiotranskodierung von G.711 mu-Law, G.711 A-Law, G.723 usw. ins AAC-Format;
  3. Videostreams im H.264-Format und Audio im AAC-Format in einen FLV-Container transkodieren und über das RTMP-Protokoll in die Cloud übertragen;
  4. Herstellen einer Verbindung mit dem Endpunkt des Bewegungsmelders der IP-Kamera mithilfe des ONVIF-Protokolls und regelmäßiges Abfragen;
  5. regelmäßiges Generieren eines Miniaturvorschaubilds (Vorschau) und Senden dieses mithilfe des MQTT-Protokolls an die Cloud;
  6. lokale Aufzeichnung von Video- und Audiostreams als separate Dateien im MP4-Format auf der SD- oder Flash-Karte des Smart Home Controllers.

Cloud Smart Home. Teil 1: Controller und Sensoren

Um eine Verbindung mit Kameras herzustellen, Videostreams zu transkodieren, zu verarbeiten und im Serverprozess aufzuzeichnen, werden Funktionen aus der Bibliothek verwendet FFmpeg 4.1.0

Im Leistungstestexperiment wurden 3 Kameras an den Controller angeschlossen:

  1. HiWatch DS-I114W (Auflösung – 720p, Komprimierungsformat – H.264, Bitrate – 1 Mbit/s, Ton G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (Auflösung – 1080p, Komprimierungsformat – H.264, Bitrate – 1 Mbit/s, kein Ton);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (Auflösung – 1080p, Komprimierungsformat – H.264, Bitrate – 1.5 Mbit/s, AAC-Audio).

Cloud Smart Home. Teil 1: Controller und Sensoren

Alle drei Streams wurden gleichzeitig in die Cloud ausgegeben, der Ton wurde nur von einer Kamera transkodiert und die lokale Archivaufzeichnung war deaktiviert. Die CPU-Auslastung betrug etwa 5 %, die RAM-Nutzung betrug 32 MB (pro Prozess), 56 MB (insgesamt mit dem Betriebssystem).

Somit können ca. 20 – 30 Kameras an den Smart-Home-Controller angeschlossen werden (je nach Auflösung und Bitrate), was für ein Videoüberwachungssystem eines dreistöckigen Ferienhauses oder einer kleinen Lagerhalle ausreicht. Bei Aufgaben, bei denen eine hohe Leistung erforderlich ist, können Sie einen Nettop mit einem Multi-Core-Intel-Prozessor und Linux Debian Sarge verwenden. Der Controller befindet sich derzeit im Probebetrieb und es werden Angaben zur Leistungserbringung gemacht.

Interaktion mit der Cloud

Cloud Smart Home speichert Benutzerdaten (Video- und Sensormessungen) in der Cloud. Die Architektur des Cloud-Speichers wird im nächsten Artikel unserer Serie ausführlicher besprochen. Lassen Sie uns nun über die Schnittstelle zur Übertragung von Informationsnachrichten vom Smart-Home-Controller in die Cloud sprechen.

Über das Protokoll werden die Zustände angeschlossener Geräte und Sensormessungen übertragen MQTT, das aufgrund seiner Einfachheit und Energieeffizienz häufig in Internet-of-Things-Projekten eingesetzt wird. MQTT verwendet ein Client-Server-Modell, bei dem Clients bestimmte Themen innerhalb des Brokers abonnieren und ihre Nachrichten veröffentlichen. Der Broker sendet Nachrichten an alle Abonnenten gemäß den durch die QoS-Ebene (Quality of Service) festgelegten Regeln:

  • QoS 0 – maximal einmal (keine Zustellungsgarantie);
  • QoS 1 – mindestens einmal (mit Lieferbestätigung);
  • QoS 2 - genau einmal (mit zusätzlicher Zustellbestätigung).

In unserem Fall ist es der MQTT-Broker Eclipse-Mücke. Der Themenname ist die eindeutige ID des Smart Home Controllers. Der MQTT-Client innerhalb des Serverprozesses abonniert dieses Thema und übersetzt darin JSON-Nachrichten, die vom Nachrichtenverteiler kommen. Und umgekehrt werden Nachrichten vom MQTT-Broker an den Nachrichtenmanager weitergeleitet, der sie dann innerhalb des Serverprozesses an seine Abonnenten weiterleitet:

Cloud Smart Home. Teil 1: Controller und Sensoren

Um Nachrichten über den Status des Smart Home Controllers zu versenden, wird der Mechanismus der gespeicherten Nachrichten genutzt. gespeicherte Nachrichten MQTT-Protokoll. Dadurch können Sie die Zeitpunkte der Wiederverbindung bei Stromausfällen korrekt verfolgen.

Der MQTT-Client wurde auf Basis der Implementierung der Bibliothek entwickelt Finsternis Paho in C++.

H.264 + AAC-Medienströme werden über das RTMP-Protokoll an die Cloud gesendet, wo ein Cluster von Medienservern für deren Verarbeitung und Speicherung verantwortlich ist. Für eine optimale Lastverteilung im Cluster und Auswahl des am wenigsten belasteten Medienservers stellt der Smart Home Controller eine Vorabanfrage an den Cloud Load Balancer und sendet erst dann den Medienstream.

Abschluss

Der Artikel befasste sich mit einer spezifischen Implementierung eines Smart-Home-Controllers auf Basis des Mikrocomputers Raspberry Pi 3 B+, ​​der mithilfe des Z-Wave-Protokolls Informationen empfangen, verarbeiten und Geräte steuern, mithilfe des ONVIF-Protokolls mit IP-Kameras interagieren sowie Daten austauschen und austauschen kann Befehle mit dem Cloud-Dienst über die Protokolle MQTT und RTMP. Basierend auf einem Vergleich logischer Regeln und Fakten im JSON-Format wurde eine Produktionslogik-Engine entwickelt.

Jetzt befindet sich der Smart-Home-Controller in mehreren Einrichtungen in Moskau und der Region Moskau im Probebetrieb.

In der nächsten Version des Controllers ist geplant, Geräte anderer Typen (RF, Bluetooth, WiFi, kabelgebunden) 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 Serverprozesscodes und zur Portierung von Software auf das Betriebssystem OpenWrt. Dadurch wird ein separater Controller eingespart und die Funktionalität eines Smart Homes auf einen normalen Haushaltsrouter übertragen.

Source: habr.com

Kommentar hinzufügen