Cloud Smart Home. Deel 1: Controller a Sensoren

Cloud Smart Home. Deel 1: Controller a Sensoren

Haut, dank der rapider Entwécklung vu Mikroelektronik, Kommunikatiounskanäl, Internettechnologien a Kënschtlech Intelligenz, gëtt d'Thema Smart Homes ëmmer méi relevant. Mënschlech Wunneng huet bedeitend Ännerungen zënter der Steenzäit an der Ära vun der Industriell Revolutioun 4.0 an dem Internet vun de Saachen erlieft, et ass bequem, funktionell a sécher ginn. Léisunge kommen op de Maart, déi en Appartement oder e Landhaus zu komplexen Informatiounssystemer verwandelen, déi iwwerall op der Welt mat engem Smartphone kontrolléiert ginn. Ausserdeem erfuerdert d'Mënsch-Maschinn Interaktioun net méi Wëssen iwwer Programméierungssproochen - dank Riederkennung a Synthese Algorithmen schwätzt eng Persoun mat engem Smart Heem an hirer Mammesprooch.

E puer Smart Home Systemer déi momentan um Maart sinn, sinn eng logesch Entwécklung vu Cloud Video Iwwerwaachungssystemer, d'Entwéckler vun deenen de Besoin fir eng ëmfaassend Léisung net nëmme fir d'Iwwerwaachung, awer och fir d'Gestioun vun Fernobjekter realiséiert hunn.

Mir presentéieren Iech eng Serie vun dräi Artikelen, déi Iech iwwer all d'Haaptkomponente vun engem Cloud Smart Home System soen, perséinlech vum Auteur entwéckelt an a Betrib geholl. Den éischten Artikel ass gewidmet fir d'Terminal Client Ausrüstung, déi an engem Smart Home installéiert ass, den zweeten un d'Architektur vum Cloud Storage an Dateveraarbechtungssystem, a schliisslech, den drëtten un d'Clientapplikatioun fir de System op mobilen a stationären Apparater ze managen.

Smart doheem Equipement

Als éischt schwätze mer iwwer wéi Dir e Smart Haus aus engem gewéinleche Appartement, Dacha oder Gîte mécht. Fir dëst ze maachen, ass et normalerweis néideg déi folgend Ausrüstung am Haus ze placéieren:

  1. Sensoren déi verschidden Ëmweltparameter moossen;
  2. Aktuatoren déi op extern Objeten handelen;
  3. e Controller deen Berechnungen am Aklang mat Sensormiessungen an embedded Logik mécht, a Befehle fir Aktuatoren erausginn.

Déi folgend Figur weist en Diagramm vun engem Smart Home, op deem et Sensore fir Waasserleckage (1) am Buedzëmmer, Temperatur (2) a Beliichtung (3) an der Schlofkummer, e Smart Socket (4) an der Kichen an e Video Iwwerwaachungskamera (5) an der Gang.

Cloud Smart Home. Deel 1: Controller a Sensoren

De Moment sinn drahtlose Sensoren, déi mam RF433, Z-Wave, ZigBee, Bluetooth a WiFi Protokoller funktionnéieren, vill benotzt. Hir Haaptvirdeeler sinn einfach Installatioun a benotzen, wéi och niddereg Käschten an Zouverlässegkeet, well Hiersteller striewen hir Apparater op de Massemaart ze bréngen an se fir den duerchschnëttleche Benotzer zougänglech ze maachen.

Sensoren an Aktuatoren, an der Regel, sinn iwwer eng drahtlos Interface mat engem Smart Home Controller (6) verbonnen - e spezialiséierte Mikrocomputer, deen all dës Apparater an engem eenzegen Netz kombinéiert a kontrolléiert.

Wéi och ëmmer, verschidde Léisunge kënnen e Sensor, en Aktuator an e Controller zur selwechter Zäit kombinéieren. Zum Beispill kann e Smart Plug programméiert ginn fir un oder auszeschalten no engem Zäitplang, an eng Cloud Video Iwwerwaachungskamera kann Video ophuelen op Basis vun engem Bewegungsdetektor Signal. An den einfachsten Fäll kënnt Dir ouni separat Controller maachen, awer fir e flexibele System mat ville Szenarien ze kreéieren ass et néideg.

Fir de Smart Home Controller mat dem globalen Netz ze verbannen, kann e regelméisseg Internet Router (7) benotzt ginn, dee laang e gemeinsame Haushaltsapparat an all Haus gouf. Hei gëtt et en anert Argument fir e Smart Home Controller - wann d'Verbindung zum Internet verluer ass, funktionnéiert d'Smart Home weider wéi normal dank dem Logikblock am Controller gespäichert, an net am Cloud Service.

Smart Home Controller

De Controller fir de Cloud Smart Home System, deen an dësem Artikel diskutéiert gëtt, gëtt op Basis vun engem Single-Board Mikrocomputer entwéckelt Raspberry Pi 3 Modell B+, déi am Mäerz 2018 verëffentlecht gouf an huet genuch Ressourcen a Leeschtung fir Smart Home Aufgaben. Et enthält e Quad-Core Cortex-A53 Prozessor baséiert op 64-Bit ARMv8-A Architektur, op 1.4 GHz ugekuckt, souwéi 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 an e Gigabit Ethernet Adapter deen iwwer USB 2.0 funktionnéiert. .

Cloud Smart Home. Deel 1: Controller a Sensoren

D'Assemblée vum Controller ass ganz einfach - de Mikrocomputer (1) ass an engem Plastikkëscht (2) installéiert, duerno sinn eng 8 GB Memory Card am MicroSD Format mat Software (3) an en USB Z-Wave Netzwierk Controller (4) installéiert. déi entspriechend Plaze . De Smart Home Controller ass un d'Energieversuergung verbonne mat engem 5V, 2.1A Stroumadapter (5) an en USB - Mikro-USB Kabel (6). All Controller huet eng eenzegaarteg Identifikatiounsnummer, déi an der Konfiguratiounsdatei geschriwwe gëtt wann se fir d'éischt lancéiert ginn an néideg ass fir mat Cloud Smart Home Servicer ze interagéieren.

D'Smart Home Controller Software gouf vum Auteur vun dësem Artikel entwéckelt baséiert op dem Betribssystem Linux Raspbian Stretch. Et besteet aus de folgenden Haaptsubsystemer:

  • Server Prozess fir Interaktioun mat Smart doheem Equipement an der Wollek;
  • grafesch User-Interface fir d'Konfiguratioun an d'Betribsparameter vum Controller ze setzen;
  • Datebank fir Controllerkonfiguratioun ze späicheren.

Cloud Smart Home. Deel 1: Controller a Sensoren

Datebank Smart Home Controller gëtt implementéiert baséiert op engem embedded DBMS SQLite an ass e Fichier op enger SD Kaart mat System Software. Et déngt als Späichere fir d'Konfiguratioun vum Controller - Informatioun iwwer d'verbonne Ausrüstung an hiren aktuellen Zoustand, e Block vu logesche Produktiounsregelen, souwéi Informatioun déi Indexéierung erfuerdert (zum Beispill Dateinumm vun engem lokalen Videoarchiv). Wann de Controller nei gestart gëtt, gëtt dës Informatioun gespäichert, wat et méiglech mécht de Controller am Fall vun engem Stroumausfall ze restauréieren.

Grafesch Interface Smart Home Controller entwéckelt am PHP 7 mat engem Mikroframework Slim. De Webserver ass verantwortlech fir d'Applikatioun ze lafen. lighttpd, dacks an embedded Geräter benotzt wéinst senger gudder Leeschtung a gerénger Ressourcefuerderung.

Cloud Smart Home. Deel 1: Controller a Sensoren
(klickt op d'Bild fir se a méi héijer Opléisung opzemaachen)

D'Haaptfunktioun vun der graphescher Interface ass Smart Home Ausrüstung (IP Iwwerwaachungskameraen a Sensoren) mam Controller ze verbannen. D'Webapplikatioun liest d'Konfiguratioun an den aktuellen Zoustand vum Controller an Apparater verbonne mat der SQLite Datebank. Fir d'Controllerkonfiguratioun z'änneren, schéckt se Kontrollbefehl am JSON-Format duerch d'RESTful API Interface vum Serverprozess.

Server Prozess

Server Prozess - e Schlësselkomponent, deen all d'Haaptaarbechte mécht fir d'Informatiounsprozesser ze automatiséieren, déi d'Basis vun engem Smart Heem bilden: Sensoresch Donnéeën z'empfänken an ze veraarbechten, Kontrollaktiounen auszeginn ofhängeg vun der embedded Logik. Den Zweck vum Serverprozess ass mat Smart Heemausrüstung ze interagéieren, logesch Produktiounsregelen auszeféieren, Kommandoen aus der grafescher Interface an der Wollek ze kréien a veraarbecht. De Serverprozess am Smart Home Controller ënner Betruechtung gëtt als Multi-threaded Applikatioun implementéiert an C++ entwéckelt an als separat Service lancéiert systemd Betribssystem Linux Raspbian.

D'Haaptblocken vum Serverprozess sinn:

  1. Message Manager;
  2. IP Kamera Server;
  3. Z-Wave Apparat Server;
  4. Server vun Produktioun logesch Regelen;
  5. Datebank vun der Konfiguratioun vum Controller a Block vu logesche Regelen;
  6. RESTful API Server fir Interaktioun mat der graphescher Interface;
  7. MQTT Client fir Interaktioun mat der Wollek.

Server Prozessblocken ginn als separat Threads implementéiert, Informatioun tëscht deenen a Form vu Messagen am JSON Format transferéiert gëtt (oder Datestrukturen, déi dëst Format am Prozess Memory representéieren).

Cloud Smart Home. Deel 1: Controller a Sensoren

Den Haaptkomponent vum Serverprozess ass Message Manager, déi JSON Messagen op all Serverprozessblocken routert. D'Zorte vu JSON Message Informatiounsfelder an d'Wäerter déi se akzeptéiere kënnen sinn an der Tabell opgelëscht:

ApparatTyp
Protokoll
MessageTyp
deviceState
Kommando

Kamera
onvif
sensorDaten
on
Streaming (Aan/Aus)

éichter
zwéi
Kommando
ugefaangen
Opnam (Aan/Aus)

effector
mqtt
businessLogicRule
Streaming (Aan/Aus)
Evice (Add/Emove)

businessLogik
configurationData
Opnam (Aan/Aus)

Bluetooth
deviceState
Feeler

Wifi

rf

Zum Beispill, e Message vun engem Kamera Bewegungsmelder gesäit esou 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"
}

Produktioun Logik

Fir e Message vum Dispatcher ze kréien oder ze schécken, abonnéiert de Serverprozessblock op Messagen vun engem bestëmmten Typ. Abonnement ass eng Produktioun logesch Regel vun der Zort "Wann ... dann ...", presentéiert am JSON Format, an e Link op de Message Handler am Server Prozess Block. Zum Beispill, fir den IP-Kamera-Server z'erméiglechen Kommandoen aus der GUI an der Wollek ze kréien, musst Dir déi folgend Regel addéieren:

{
	"if": {
	    "and": [{
		"equal": {
		    "deviceId": "1616453d-30cd-44b7-9bf0-************"
		}
	    },
	    {
		"equal": {
		    "messageType": "command"
		}
	    }
	    ]
	},
	"then": {
	    "result": "true"
	}
}

Wann d'Konditiounen uginn an Virgänger (lénks Säit) d'Regele stëmmen, dann ass et zefridden konsequent (riets Säit) Regelen, an den Handler kritt Zougang zum Kierper vum JSON Message. Den Virgänger ënnerstëtzt logesch Betreiber déi JSON Schlësselwäertpaarte vergläichen:

  1. gläich "gläich";
  2. net gläich op "net_gläich";
  3. manner "manner";
  4. méi "méi grouss";
  5. manner wéi oder gläich wéi "less_or_equal";
  6. méi grouss wéi oder gläich wéi "greater_or_equal".

D'Vergläichsresultater kënne matenee verbonne sinn mat booleschen Algebraoperateuren:

  1. An "an"
  2. ODER "oder";
  3. NET "net".

Also, andeems Dir Betreiber an Operander an der polnescher Notatioun schreift, kënnt Dir ganz komplex Konditioune mat enger grousser Zuel vu Parameteren erstellen.

Genau deeselwechte Mechanismus, baséiert op JSON Messagen a Produktiounsregelen am JSON Format, gëtt am Produktiounslogik Serverblock benotzt fir Wëssen ze representéieren a logesch Inferenz auszeféieren mat sensoreschen Daten vu Smart Home Sensoren.

Mat enger mobiler Applikatioun erstellt de Benotzer Szenarie no deenen d'Smart Home soll funktionnéieren. Zum Beispill: "Wann de Sensor fir d'Dier opzemaachen ausgeléist gëtt, da schalt d'Luucht an der Gang un". D'Applikatioun liest d'Identifikatioune vu Sensoren (Ouverturessensor) an Aktuatoren (Smart Socket oder Smart Lamp) aus der Datebank a generéiert eng logesch Regel am JSON-Format, déi un de Smart Home Controller geschéckt gëtt. Dëse Mechanismus gëtt méi am Detail am drëtten Artikel vun eiser Serie diskutéiert, wou mir iwwer d'Clientapplikatioun fir d'Gestioun vun engem Smart Home schwätzen.

De Produktiounslogikmechanismus uewen diskutéiert gëtt mat der Bibliothéik ëmgesat RapidJSON - SAX Parser fir JSON Format am C++. Sequentiell Liesen a Parsing vun enger ganzer Rei vun Produktiounsregelen erlaabt Iech d'Datevergläichsfunktioun an den Antecedenten einfach ëmzesetzen:

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);
        }
    }
}

et ass pFakt - eng Struktur mat Schlëssel-Wäertpaaren aus engem JSON Message, m_Regelen - String Array vu Produktiounsregelen. De Verglach vum erakommende Message an der Produktiounsregel gëtt an der Funktioun duerchgefouert reader.Parse(ruleStream, ruleHandler)wou regelHandler ass en Objet deen d'Logik vu Boolschen a Vergläichsbedreiwer enthält. sRuleId - en eenzegaartege Regelidentifizéierer, dank deem et méiglech ass Regelen an der Smart Home Controller Datebank ze späicheren an z'änneren. m_pActions - eng Array mat de Resultater vun der logescher Inferenz: JSON Messagen déi Konsequenze vun der Regelbasis enthalen a weider an de Message Manager geschéckt ginn, sou datt Abonnent thread se kënne veraarbechten.

RapidJSON Leeschtung ass vergläichbar mat der Funktioun stren(), an de Minimum System Ressource Ufuerderunge erlaben de Gebrauch vun dëser Bibliothéik an embedded Apparater. D'Benotzung vu Messagen a logesche Regelen am JSON-Format erlaabt Iech e flexibelen Informatiounsaustauschsystem tëscht all Komponente vum Smart Home Controller ëmzesetzen.

Z-Wave Sensoren an Aktuatoren

Den Haaptvirdeel vun engem Smart Heem ass datt et onofhängeg verschidde Parameteren vum externen Ëmfeld moosse kann an nëtzlech Funktiounen ofhängeg vun der Situatioun ausféieren. Fir dëst ze maachen, sinn Sensoren an Aktuatoren mam Smart Home Controller verbonnen. An der aktueller Versioun sinn dës drahtlose Geräter déi mam Protokoll funktionnéieren Z-Welle op eng speziell zougewisen Frequenz 869 MHz Fir Russland. Fir ze bedreiwen, gi se an e Mesh-Netz kombinéiert, dat Signalrepeater enthält fir d'Ofdeckungsfläch ze erhéijen. D'Apparater hunn och e speziellen Energiespuermodus - si verbréngen déi meescht Zäit am Schlofmodus a schécken Informatioun nëmmen wann hiren Zoustand ännert, wat d'Liewen vun der agebauter Batterie wesentlech verlängeren kann.

Cloud Smart Home. Deel 1: Controller a Sensoren

Dir kënnt elo eng zimlech grouss Zuel vu verschiddenen Z-Wave Apparater um Maart fannen. Loosst eis e puer Beispiller kucken:

  1. Den Zipato PAN16 Smart Socket kann déi folgend Parameter moossen: Stroumverbrauch (kWh), Kraaft (W), Spannung (V) a Stroum (A) am elektresche Netz. Et huet och en agebaute Schalter mat deem Dir de verbonne elektreschen Apparat kontrolléiere kënnt;
  2. Den Neo Coolcam Lecksensor erkennt d'Präsenz vu verspillte Flëssegkeet andeems d'Kontakter vun der Fernsonde zougemaach gëtt;
  3. Den Zipato PH-PSG01 Rauchsensor gëtt ausgeléist wann Damppartikelen an d'Gasanalysatorkammer kommen;
  4. Den Neo Coolcam Bewegungssensor analyséiert d'Infraroutstrahlung vum mënschleche Kierper. Zousätzlech gëtt et e Liichtsensor (Lx);
  5. Multisensor Philio PST02-A moosst Temperatur (°C), Liicht (%), Dieröffnung, Präsenz vun enger Persoun am Raum;
  6. Z-Wave USB Stick ZME E UZB1 Netz Controller, op déi Sensoren verbonne sinn.

Et ass ganz wichteg datt d'Apparater an de Controller op der selwechter Frequenz funktionnéieren, soss gesinn se sech einfach net am Moment vun der Verbindung. Bis zu 232 Apparater kënne mat engem Z-Wave Netzwierkkontroller verbonne sinn, wat genuch fir en Appartement oder e Landhaus ass. Fir d'Netzofdeckungsberäich dobannen auszebauen, kann e Smart Socket als Signal Repeater benotzt ginn.

Cloud Smart Home. Deel 1: Controller a Sensoren

Am Smart Home Controller Server Prozess, deen am virege Paragraph diskutéiert gouf, ass den Z-Wave Server verantwortlech fir mat Z-Wave Geräter ze interagéieren. Et benotzt eng Bibliothéik fir Informatioun vu Sensoren ze kréien OpenZWave am C ++, deen en Interface ubitt fir mat dem Z-Wave Netzwierk USB Controller ze interagéieren a funktionnéiert mat verschiddene Sensoren an Aktuatoren. De Wäert vum Ëmweltparameter gemooss vum Sensor gëtt vum Z-Wave Server a Form vun engem JSON Message opgeholl:

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

Et gëtt dann un de Message Manager vum Serverprozess weidergeleet, sou datt Abonnent-Threads et kréien. Den Haaptabonnent ass de Produktiounslogikserver, deen de Messagefeldwäerter an den Virgänger vun de Logikregelen entsprécht. D'Inferenzresultater mat Kontrollbefehle ginn zréck an de Message Manager geschéckt a vun do un den Z-Wave Server, deen se decodéiert an an den Z-Wave Netzwierk USB Controller schéckt. Da gitt se an den Aktuator, deen den Zoustand vun den Ëmweltobjeten ännert, an de Smart Doheem mécht also nëtzlech Aarbecht.

Cloud Smart Home. Deel 1: Controller a Sensoren
(klickt op d'Bild fir se a méi héijer Opléisung opzemaachen)

D'Verbindung vun Z-Wave Geräter gëtt an der grafescher Interface vum Smart Home Controller gemaach. Fir dëst ze maachen, gitt op d'Säit mat enger Lëscht vun Apparater a klickt op de Knäppchen "Add". D'Add Kommando iwwer d'RESTful API Interface trëtt an de Serverprozess a gëtt dann vum Message Manager un den Z-Wave Server geschéckt, deen den Z-Wave Netzwierk USB Controller an e spezielle Modus setzt fir Geräter ze addéieren. Als nächst musst Dir op dem Z-Wave-Apparat eng Serie vu Schnellpressen maachen (3 Pressen bannent 1,5 Sekonnen) vum Serviceknäppchen. Den USB Controller verbënnt den Apparat mam Netz a schéckt Informatioun doriwwer un den Z-Wave Server. Dat erstellt en neien Entrée an der SQLite Datebank mat de Parameteren vum neien Apparat. No engem spezifizéierte Zäitintervall geet d'grafesch Interface zréck op d'Z-Wave Apparat Lëscht Säit, liest Informatioun aus der Datebank a weist den neien Apparat an der Lëscht. All Apparat kritt säin eegene eenzegaartegen Identifizéierer, deen a Produktiounskonferenzregele benotzt gëtt a wann Dir an der Wollek schafft. D'Operatioun vun dësem Algorithmus gëtt am UML Diagramm gewisen:

Cloud Smart Home. Deel 1: Controller a Sensoren
(klickt op d'Bild fir se a méi héijer Opléisung opzemaachen)

IP Kameraen verbannen

De Cloud Smart Home System, deen an dësem Artikel diskutéiert gëtt, ass en Upgrade vum Cloud Video Iwwerwaachungssystem, och vum Auteur entwéckelt, deen zënter e puer Joer um Maart ass a vill Installatiounen a Russland huet.

Fir Cloud Video Iwwerwaachungssystemer ass ee vun den akuten Probleemer déi limitéiert Auswiel vun Ausrüstung mat deenen d'Integratioun ka gemaach ginn. D'Software verantwortlech fir d'Verbindung mat der Wollek ass an der Videokamera installéiert, déi direkt eescht Ufuerderunge fir seng Hardware stellt - de Prozessor an d'Quantitéit u fräiem Gedächtnis. Dëst erkläert haaptsächlech de méi héije Präis vu Cloud CCTV Kameraen am Verglach mat normale IP Kameraen. Zousätzlech ass eng laang Etapp vu Verhandlunge mat CCTV Kamera Fabrikatiounsfirmen erfuerderlech fir Zougang zum Kameradateisystem an all néideg Entwécklungsinstrumenter ze kréien.

Cloud Smart Home. Deel 1: Controller a Sensoren

Op der anerer Säit hunn all modern IP Kameraen Standardprotokoller fir Interaktioun mat aneren Ausrüstung (besonnesch Videorecorder). Also, d'Benotzung vun engem getrennten Controller, deen iwwer e Standardprotokoll verbënnt a Videostreams vun IP Kameraen an d'Wollek iwwerdroe léisst bedeitend kompetitiv Virdeeler fir Cloud Video Iwwerwaachungssystemer. Ausserdeem, wann de Client schonn e Video Iwwerwaachungssystem baséiert op einfache IP Kameraen installéiert huet, da gëtt et méiglech et auszebauen an et an e vollwäertege Cloud Smart Home ze maachen.

De beléifste Protokoll fir IP Video Iwwerwaachungssystemer, elo ënnerstëtzt vun all IP Kamera Hiersteller ouni Ausnam, ass ONVIF Profil S, deenen hir Spezifikatioune existéieren an enger Webservicer Beschreiwungssprooch wsdl. Benotzt Utilities aus dem Toolkit gSOAP Et ass méiglech Quellcode fir Servicer ze generéieren déi mat IP Kameraen funktionnéieren:

$ 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 Resultat kréien mir e Set Header "*.h" a Quell "*.cpp" Dateien an C ++, déi direkt an eng Applikatioun oder eng separat Bibliothéik plazéiert kënne ginn a mat dem GCC Compiler kompiléiert ginn. Wéinst de ville Funktiounen ass de Code grouss a erfuerdert zousätzlech Optimisatioun. De Raspberry Pi 3 Modell B+ Mikrocomputer huet genuch Leeschtung fir dëse Code auszeféieren, awer wann et néideg ass de Code op eng aner Plattform ze portéieren, ass et néideg déi richteg Prozessorarchitektur a Systemressourcen ze wielen.

IP Kameraen déi den ONVIF Standard ënnerstëtzen, wann se op engem lokalen Netzwierk operéieren, si mat enger spezieller Multicast Grupp mat der Adress verbonnen 239.255.255.250. Et gëtt e Protokoll WS Entdeckung, wat Iech erlaabt d'Sich no Apparater am lokalen Netzwierk ze automatiséieren.

Déi grafesch Interface vum Smart Home Controller implementéiert eng Sichfunktioun fir IP Kameraen an PHP, wat ganz bequem ass wann Dir mat Webservicer iwwer XML Messagen interagéiert. Wann Dir Menü Elementer auswielen Apparater > IP Kameraen > Scannen Den Algorithmus fir no IP Kameraen ze sichen gëtt lancéiert, d'Resultat an der Form vun enger Tabell weist:

Cloud Smart Home. Deel 1: Controller a Sensoren
(klickt op d'Bild fir se a méi héijer Opléisung opzemaachen)

Wann Dir eng Kamera op de Controller bäidréit, kënnt Dir d'Astellunge spezifizéieren no deenen et mat der Wollek interagéiert. Och op dëser Etapp gëtt et automatesch en eenzegaartegen Apparatidentifizéierer zougewisen, duerch deen et spéider einfach an der Wollek identifizéiert ka ginn.

Cloud Smart Home. Deel 1: Controller a Sensoren

Als nächst gëtt e Message am JSON-Format generéiert mat all d'Parameteren vun der addéierter Kamera an an de Serverprozess vum Smart Home Controller iwwer de RESTful API Kommando geschéckt, wou d'Kameraparameter dekodéiert a gespäichert sinn an der interner SQLite Datebank, a sinn och benotzt fir déi folgend Veraarbechtungsthreads ze starten:

  1. Etabléiere vun enger RTSP Verbindung fir Video an Audio Streams ze kréien;
  2. transcoding Audio aus G.711 mu-Gesetz, G.711 A-Gesetz, G.723, etc.. Formater. zu AAC Format;
  3. Video Streams am H.264-Format an Audio am AAC-Format transcodéieren an en FLV-Container an iwwer de RTMP-Protokoll an d'Wollek iwwerdroen;
  4. eng Verbindung mam Endpunkt vum IP Kamera Bewegungsdetektor iwwer den ONVIF Protokoll opzebauen a periodesch ze polléieren;
  5. periodesch e Miniaturvirschaubild generéieren an et an d'Wollek iwwer de MQTT Protokoll schécken;
  6. lokal Opnam vu Video- an Audiostreamen a Form vun getrennten Dateien am MP4 Format op eng SD oder Flash Kaart vum Smart Home Controller.

Cloud Smart Home. Deel 1: Controller a Sensoren

Fir eng Verbindung mat Kameraen opzebauen, transkodéieren, veraarbecht a Videostreamen am Serverprozess opzehuelen, gi Funktiounen aus der Bibliothéik benotzt FFmpeg 4.1.0.

Am Performance Test Experiment goufen 3 Kameraen mam Controller verbonnen:

  1. HiWatch DS-I114W (Resolutioun - 720p, Kompressioun Format - H.264, bitrate - 1 Mb / s, Toun G.711 mu-Gesetz);
  2. Microdigital MDC-M6290FTD-1 (Opléisung - 1080p, Kompressiounsformat - H.264, Bitrate - 1 Mb/s, keen Toun);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (Opléisung - 1080p, Kompressiounsformat - H.264, Bitrate - 1.5 Mb/s, AAC Audio).

Cloud Smart Home. Deel 1: Controller a Sensoren

All dräi Stréimunge goufen gläichzäiteg an d'Wollek erausginn, d'Audiotranscodéierung gouf aus nëmmen enger Kamera duerchgefouert, an d'lokal Archivopnam war deaktivéiert. CPU Belaaschtung war ongeféier 5%, RAM Notzung war 32 MB (pro Prozess), 56 MB (total inklusiv OS).

Sou kënnen ongeféier 20 - 30 Kameraen un de Smart Home Controller verbonne sinn (je no Resolutioun a Bitrate), wat genuch ass fir e Videoiwwerwaachungssystem fir en dräistäckeg Gîte oder e klengt Lagerhaus. Fir Aufgaben déi méi grouss Leeschtung erfuerderen, kënnt Dir en Nettop mat engem Multi-Core Intel Prozessor a Linux Debian Sarge OS benotzen. De Controller ass am Moment amgaang Testoperatioun, an Daten iwwer seng Leeschtung ginn aktualiséiert.

Interaktioun mat der Wollek

E Cloud-baséiert Smart Home späichert Benotzerdaten (Video a Sensormiessungen) an der Wollek. D'Architektur vu Cloud Storage gëtt am nächsten Artikel an eiser Serie méi detailléiert diskutéiert. Loosst eis elo iwwer d'Interface schwätzen fir Informatiounsmessage vum Smart Home Controller an d'Wollek ze vermëttelen.

D'Staate vu verbonne Geräter a Sensormiessunge ginn iwwer de Protokoll iwwerdroen MQTT, déi dacks an Internet of Things Projete benotzt gëtt wéinst senger Einfachheet an Energieeffizienz. MQTT benotzt e Client-Server Modell, wou Clienten op spezifesch Themen am Broker abonnéieren an hir Messagen publizéieren. De Broker schéckt Messagen un all Abonnente no de Regele festgeluegt vum QoS (Quality of Service) Niveau:

  • QoS 0 - maximal eemol (keng Liwwerung Garantie);
  • QoS 1 - op d'mannst eemol (mat Liwwerung Bestätegung);
  • QoS 2 - genee eemol (mat zousätzlech Liwwerung Bestätegung).

An eisem Fall benotze mir Eclipse Mosquito. Den Thema Numm ass den eenzegaartegen Identifizéierer vum Smart Home Controller. De MQTT Client am Serverprozess abonnéiert op dëst Thema an iwwersetzt JSON Messagen déi vum Message Manager kommen. Ëmgekéiert ginn Messagen vum MQTT Broker vun him un de Message Manager weidergeleet, deen se dann un seng Abonnenten am Serverprozess multiplexéiert:

Cloud Smart Home. Deel 1: Controller a Sensoren

Fir Messagen iwwer de Status vum Smart Home Controller ze vermëttelen, gëtt de Mechanismus vu gespäicherten Messagen benotzt erhale Messagen MQTT Protokoll. Dëst erlaabt Iech den Timing vun de Reconnections während Stroumausfall korrekt ze iwwerwaachen.

De MQTT Client gouf entwéckelt baséiert op der Bibliothéikimplementatioun Sonnendäischtert Paho an der C++ Sprooch.

H.264 + AAC Medienstroum ginn an d'Wollek iwwer de RTMP-Protokoll geschéckt, wou e Stärekoup vu Medienserver verantwortlech ass fir d'Veraarbechtung an d'Späicheren. Fir d'Laascht am Stärekoup optimal ze verdeelen an den am mannsten geluedenen Medienserver ze wielen, mécht de Smart Home Controller eng virleefeg Ufro un de Cloud Load Balancer an eréischt duerno schéckt de Medienstream.

Konklusioun

Den Artikel iwwerpréift eng spezifesch Implementatioun vun engem Smart Home Controller baséiert op dem Raspberry Pi 3 B+ Mikrocomputer, deen Informatioun iwwer den Z-Wave Protokoll kritt, veraarbecht a kontrolléiert Ausrüstung kann interagéieren mat IP Kameraen iwwer den ONVIF Protokoll, an och Daten austauschen an Kommandoen mat der Wollek.Service iwwer MQTT- a RTMP-Protokoller. E Produktiounslogikmotor gouf entwéckelt baséiert op engem Verglach vu logesche Regelen a Fakten, déi am JSON-Format presentéiert ginn.

De Smart Home Controller ass am Moment op e puer Siten zu Moskau an der Moskau Regioun Testoperatioun.

Déi nächst Versioun vum Controller plangt aner Aarte vun Apparater ze verbannen (RF, Bluetooth, WiFi, kabelt). Fir d'Bequemlechkeet vun de Benotzer gëtt d'Prozedur fir d'Sensoren an IP Kameraen ze verbannen op d'mobil Applikatioun transferéiert. Et ginn och Iddien fir de Serverprozesscode ze optimiséieren an d'Software an de Betribssystem ze portéieren oppenwrt. Dëst erlaabt Iech op engem getrennten Controller ze spueren an d'Funktionalitéit vun engem Smart Home op e normale Haushaltsrouter ze transferéieren.

Source: will.com

Setzt e Commentaire