Cloud Smart Home. Diel 1: Controller en sensoren

Cloud Smart Home. Diel 1: Controller en sensoren

Tsjintwurdich, troch de rappe ûntwikkeling fan mikro-elektroanika, kommunikaasjekanalen, ynternettechnologyen en keunstmjittige yntelliginsje, wurdt it ûnderwerp fan tûke huzen hieltyd relevanter. Human húsfesting hat ûndergien wichtige feroarings sûnt de stientiid en yn it tiidrek fan Yndustriële Revolúsje 4.0 en it Internet of Things, it is wurden noflik, funksjoneel en feilich. Op 'e merke komme oplossings dy't in appartemint as in lânhûs feroarje yn komplekse ynformaasjesystemen dy't kontroleare wurde fan oeral yn' e wrâld mei in smartphone. Boppedat fereasket minsk-masine-ynteraksje gjin kennis mear fan programmeartalen - mei tank oan spraakherkenning en synteze-algoritmen sprekt in persoan mei in tûk hûs yn har memmetaal.

Guon smart home-systemen dy't op it stuit op 'e merke binne, binne in logyske ûntwikkeling fan wolkfideo-tafersjochsystemen, wêrfan de ûntwikkelders de needsaak realisearre hawwe foar in wiidweidige oplossing net allinich foar tafersjoch, mar ek foar it behearen fan objekten op ôfstân.

Wy presintearje jo oandacht in searje fan trije artikels, dy't jo sille fertelle oer alle haadkomponinten fan in wolk smart home systeem, persoanlik ûntwikkele troch de auteur en yn gebrûk nommen. It earste artikel is wijd oan 'e terminal client-apparatuer ynstalleare yn in tûk hûs, it twadde oan' e arsjitektuer fan it wolkopslach- en gegevensferwurkingssysteem, en as lêste, it tredde oan 'e kliïntapplikaasje foar it behearen fan it systeem op mobile en stasjonêre apparaten.

Smart thús apparatuer

Litte wy earst prate oer hoe't jo in tûk hûs meitsje kinne út in gewoane appartemint, dacha of hûs. Om dit te dwaan, is it yn 'e regel needsaaklik om de folgjende apparatuer yn' e hûs te pleatsen:

  1. sensors dy't mjitte ferskate parameters fan 'e eksterne omjouwing;
  2. actuators hannelje op eksterne objekten;
  3. in controller dy't útfiert berekkeningen yn oerienstimming mei sensor mjittingen en ynbêde logika, en jout kommando oan actuators.

De folgjende figuer lit in diagram sjen fan in tûk hûs, wêrop sensors binne foar wetterlekkage (1) yn 'e badkeamer, temperatuer (2) en ferljochting (3) yn' e sliepkeamer, in smart socket (4) yn 'e keuken en in video tafersjoch kamera (5) yn 'e gong.

Cloud Smart Home. Diel 1: Controller en sensoren

Op it stuit wurde draadloze sensors dy't wurkje mei de RF433, Z-Wave, ZigBee, Bluetooth en WiFi-protokollen in soad brûkt. Har wichtichste foardielen binne it gemak fan ynstallaasje en gebrûk, lykas lege kosten en betrouberens, om't Fabrikanten stribje har apparaten nei de massamerk te bringen en se tagonklik te meitsjen foar de gemiddelde brûker.

Sensors en actuators binne yn 'e regel ferbûn fia in draadloze ynterface oan in smart home controller (6) - in spesjalisearre mikrokomputer dy't al dizze apparaten kombinearret yn ien netwurk en kontrolearret se.

Guon oplossingen kinne lykwols in sensor, in actuator en in controller tagelyk kombinearje. Bygelyks, in tûke plug kin programmearre wurde om oan of út te skeakeljen neffens in skema, en in wolkfideo-tafersjochkamera kin fideo opnimme op basis fan in sinjaal foar bewegingsdetektor. Yn 'e ienfâldichste gefallen kinne jo dwaan sûnder in aparte kontrôler, mar om in fleksibel systeem te meitsjen mei in protte senario's is it nedich.

Om de tûke thúskontrôler te ferbinen mei it globale netwurk, kin in gewoane ynternetrouter (7) brûkt wurde, dy't lang in gewoane húshâldlik apparaat yn elk hûs wurden is. Hjir is d'r in oar argumint foar in tûke hûs-controller - as de ferbining mei it ynternet ferlern is, sil it tûke hûs trochgean as normaal te operearjen troch it logyske blok opslein yn 'e controller, en net yn' e wolktsjinst.

Smart home controller

De controller foar it yn dit artikel besprutsen wolk smart home systeem is ûntwikkele basearre op in single-board mikrokomputer Raspberry Pi 3 model B+, dat waard útbrocht yn maart 2018 en hat genôch middels en prestaasjes foar smart home taken. It omfettet in quad-core Cortex-A53-prosessor basearre op 64-bit ARMv8-A-arsjitektuer, klokt op 1.4 GHz, lykas 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 en in gigabit Ethernet-adapter dy't wurket fia USB 2.0 .

Cloud Smart Home. Diel 1: Controller en sensoren

It gearstallen fan de controller is heul ienfâldich - de mikrokomputer (1) is ynstalleare yn in plestik koffer (2), dan wurde in 8 GB ûnthâldkaart yn microSD-formaat mei software (3) en in USB Z-Wave netwurkkontrôler (4) ynstalleare yn de oerienkommende slots . De smart home-controller is ferbûn mei de stroomfoarsjenning fia in 5V, 2.1A-stroomadapter (5) en in USB - mikro-USB-kabel (6). Elke controller hat in unyk identifikaasjenûmer, dat is skreaun yn it konfiguraasjetriem as it earst lansearre is en is nedich om te ynteraksje mei cloud smart home tsjinsten.

De software foar smart home controller is ûntwikkele troch de skriuwer fan dit artikel basearre op it bestjoeringssysteem Linux Raspbian Stretch. It bestiet út de folgjende haadsubsystemen:

  • tsjinner proses foar ynteraksje mei smart home apparatuer en de wolk;
  • grafyske brûkersynterface foar it ynstellen fan de konfiguraasje- en bestjoeringsparameters fan 'e controller;
  • databank foar it bewarjen fan controller konfiguraasje.

Cloud Smart Home. Diel 1: Controller en sensoren

Databank smart home controller wurdt ymplementearre basearre op in ynbêde DBMS SQLite en is in triem op in SD kaart mei systeem software. It tsjinnet as opslach foar de konfiguraasje fan 'e controller - ynformaasje oer de ferbûne apparatuer en har hjoeddeistige steat, in blok fan logyske produksjeregels, lykas ynformaasje dy't yndeksearring fereasket (bygelyks bestânsnammen fan in lokaal fideo-argyf). As de kontrôler wurdt opnij opstarte, wurdt dizze ynformaasje bewarre, wêrtroch it mooglik is om de kontrôler te herstellen yn gefal fan in stroomûnderbrekking.

Grafyske ynterface smart home controller ûntwikkele yn PHP 7 mei in mikroframework Slim. De webserver is ferantwurdlik foar it útfieren fan de applikaasje. lighttpd, faak brûkt yn ynbêde apparaten fanwege syn goede prestaasjes en lege boarne easken.

Cloud Smart Home. Diel 1: Controller en sensoren
(klik op de foto om it yn hegere resolúsje te iepenjen)

De haadfunksje fan 'e grafyske ynterface is om smart home-apparatuer (IP-tafersjochkamera's en sensors) te ferbinen mei de controller. De webapplikaasje lêst de konfiguraasje en aktuele steat fan 'e controller en apparaten dy't dêrmei ferbûn binne fanút de SQLite-database. Om de konfiguraasje fan de controller te feroarjen, stjoert it kontrôlekommando's yn JSON-formaat fia de RESTful API-ynterface fan it serverproses.

Server proses

Server proses - in wichtige komponint dy't al it haadwurk útfiert oer it automatisearjen fan de ynformaasjeprosessen dy't de basis foarmje fan in tûk hûs: ûntfangen en ferwurkjen fan sensoryske gegevens, it útjaan fan kontrôleaksjes ôfhinklik fan 'e ynbêde logika. It doel fan it serverproses is om te ynteraksje mei smart home-apparatuer, útfiere logyske regels foar produksje, ûntfange en ferwurkje kommando's fan 'e grafyske ynterface en de wolk. It tsjinnerproses yn 'e tûke hûscontroller dy't wurdt beskôge wurdt ymplementearre as in multi-threaded applikaasje ûntwikkele yn C ++ en lansearre as in aparte tsjinst systemd bestjoeringssysteem Linux Raspbian.

De haadblokken fan it serverproses binne:

  1. Berjochtbehearder;
  2. IP kamera tsjinner;
  3. Z-Wave apparaat tsjinner;
  4. Tsjinner fan produksje logyske regels;
  5. Databank fan konfiguraasje fan 'e controller en blok fan logyske regels;
  6. RESTful API-tsjinner foar ynteraksje mei de grafyske ynterface;
  7. MQTT-kliïnt foar ynteraksje mei de wolk.

Serverprosesblokken wurde ymplementearre as aparte triedden, ynformaasje tusken dy wurdt oerdroegen yn 'e foarm fan berjochten yn JSON-formaat (as gegevensstruktueren dy't dit formaat yn prosesûnthâld fertsjintwurdigje).

Cloud Smart Home. Diel 1: Controller en sensoren

De wichtichste komponint fan it serverproses is berjocht manager, dy't JSON-berjochten trochstjoert nei alle serverprosesblokken. De soarten JSON-berjochtynformaasjefjilden en de wearden dy't se kinne akseptearje wurde yn 'e tabel neamd:

apparaatType
Protokol
messageType
apparaatState
befel

kamera
onvif
sensorData
on
streaming (oan/út)

sensor
zwave
befel
út
opname (oan/út)

effector
mqtt
businessLogicRule
streaming (oan/út)
evice (taheakje/fuortsmite)

businessLogic
konfiguraasjeData
opname (oan/út)

bluetooth
apparaatState
fersin

wifi

rf

Bygelyks, in berjocht fan in kamerabewegingsdetektor sjocht der sa út:

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

Produksje logika

Om in berjocht te ûntfangen of te ferstjoeren fan 'e dispatcher, abonnearret it serverprosesblok op berjochten fan in bepaald type. Abonnemint is in produksje logyske regel fan it type "As ... dan ...", presintearre yn JSON-formaat, en in keppeling nei de berjochtbehandler binnen it serverprosesblok. Om bygelyks de IP-kamera-tsjinner opdrachten te ûntfangen fan 'e GUI en de wolk, moatte jo de folgjende regel tafoegje:

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

As de betingsten spesifisearre yn antecedent (linkerkant) de regels binne wier, dan is it tefreden konsekwint (rjochterkant) regels, en de handler krijt tagong ta it lichem fan it JSON-berjocht. De antecedent stipet logyske operators dy't JSON-kaai-wearde-pearen fergelykje:

  1. is gelyk oan "lyk";
  2. net gelyk oan "net_lyk";
  3. minder "minder";
  4. mear "grutter";
  5. minder as of gelyk oan "minder_of_gelyk";
  6. grutter as of gelyk oan "greater_or_equal".

De fergelikingsresultaten kinne mei elkoar relatearre wurde mei Booleaanske algebra-operators:

  1. En "en"
  2. OR "of";
  3. NET "net".

Sa kinne jo troch it skriuwen fan operators en operanden yn Poalske notaasje frij komplekse betingsten meitsje mei in grut oantal parameters.

Krekt itselde meganisme, basearre op JSON-berjochten en produksjeregels yn JSON-formaat, wurdt brûkt yn it produksjelogika-serverblok om kennis te fertsjintwurdigjen en logyske konklúzjes út te fieren mei sintúchlike gegevens fan smart home-sensors.

Mei in mobile applikaasje makket de brûker senario's wêrop't it tûke hûs funksjonearje moat. Bygelyks: "As de sensor foar it iepenjen fan 'e foardoar ynskeakele is, dan it ljocht yn' e gong oansette". De applikaasje lêst de identifiers fan sensoren (iepeningssensor) en actuators (smart socket of smart lamp) út 'e database en genereart in logyske regel yn JSON-formaat, dy't wurdt stjoerd nei de smart home controller. Dit meganisme sil yn mear detail besprutsen wurde yn it tredde artikel fan ús searje, wêr't wy sille prate oer de kliïntapplikaasje foar it behearen fan in tûk hûs.

It hjirboppe besprutsen produksjelogikameganisme wurdt ymplementearre mei de bibleteek RapidJSON - SAX-parser foar JSON-formaat yn C++. Opfolgjend lêzen en parsearjen fan in array fan produksjeregels kinne jo de gegevensfergelikingsfunksje maklik ymplementearje binnen antecedinten:

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

it is pFact - in struktuer mei kaai-wearde-pearen fan in JSON-berjocht, m_Rules - rige array fan produksje regels. De ferliking fan it ynkommende berjocht en de produksjeregel wurdt útfierd yn 'e funksje reader.Parse(ruleStream, ruleHandler)wêr regelHandler is in objekt mei de logika fan Boolean en fergelikingsoperators. sRuleId - in unike regelidentifikator, wêrtroch it mooglik is om regels op te slaan en te bewurkjen yn 'e database fan smart home controller. m_pActions - in array mei de resultaten fan logyske konklúzje: JSON-berjochten dy't konsekwinsjes befetsje fan 'e regelbasis en fierder stjoerd nei de berjochtbehearder, sadat abonnee-threads se kinne ferwurkje.

RapidJSON-prestaasjes is te fergelykjen mei de funksje stralen(), en de minimale easken foar systeemboarnen tastean it gebrûk fan dizze bibleteek yn ynbêde apparaten. It gebrûk fan berjochten en logyske regels yn JSON-formaat kinne jo in fleksibel systeem fan ynformaasje-útwikseling ymplementearje tusken alle komponinten fan 'e smart home controller.

Z-Wave sensoren en actuators

It wichtichste foardiel fan in tûk hûs is dat it selsstannich ferskate parameters fan 'e eksterne omjouwing kin mjitte en nuttige funksjes útfiere ôfhinklik fan' e situaasje. Om dit te dwaan, binne sensors en actuators ferbûn mei de smart home controller. Yn 'e hjoeddeistige ferzje binne dit draadloze apparaten dy't wurkje mei it protokol Z-Welle op in spesjaal tawiisde frekwinsje 869 MHz Foar Ruslân. Om te operearjen wurde se kombineare yn in mesh-netwurk, dat sinjaalrepeaters befettet om it dekkingsgebiet te fergrutsjen. De apparaten hawwe ek in spesjale enerzjybesparjende modus - se besteegje it measte fan 'e tiid yn' e sliepmodus en stjoere allinich ynformaasje as har steat feroaret, wat it libben fan 'e ynboude batterij signifikant kin ferlingje.

Cloud Smart Home. Diel 1: Controller en sensoren

Jo kinne no in frij grut oantal ferskillende Z-Wave-apparaten op 'e merke fine. Litte wy nei in pear foarbylden sjen:

  1. De Zipato PAN16 smart socket kin de folgjende parameters mjitte: elektrisiteitsferbrûk (kWh), macht (W), spanning (V) en stroom (A) yn it elektryske netwurk. It hat ek in ynboude skeakel wêrmei jo it oansletten elektryske apparaat kinne kontrolearje;
  2. De Neo Coolcam leaksensor detektearret de oanwêzigens fan spielde flüssigens troch de kontakten fan 'e ôfstânsonde te sluten;
  3. De Zipato PH-PSG01 reek sensor wurdt oanlutsen as reek dieltsjes ynfiere de gas analyzer keamer;
  4. De Neo Coolcam bewegingssensor analysearret de ynfraread strieling fan it minsklik lichem. Dêrneist is der in ljocht sensor (Lx);
  5. Multisensor Philio PST02-A mjit temperatuer (°C), ljocht (%), doar iepening, oanwêzigens fan in persoan yn 'e keamer;
  6. Z-Wave USB Stick ZME E UZB1 netwurk controller, dêr't sensors binne ferbûn.

It is heul wichtich dat de apparaten en de controller op deselde frekwinsje wurkje, oars sille se inoar gewoan net sjen op it momint fan ferbining. Oant 232 apparaten kinne wurde ferbûn oan ien Z-Wave netwurk controller, dat is genôch foar in appartemint of in lânhûs. Om it netwurkdekkingsgebiet binnen te wreidzjen, kin in tûke socket brûkt wurde as sinjaalrepeater.

Cloud Smart Home. Diel 1: Controller en sensoren

Yn it tsjinnerproses foar smart home controller besprutsen yn 'e foarige paragraaf, is de Z-Wave-tsjinner ferantwurdlik foar ynteraksje mei Z-Wave-apparaten. It brûkt in bibleteek om ynformaasje te ûntfangen fan sensors OpenZWave yn C ++, dat jout in ynterface foar ynteraksje mei de Z-Wave netwurk USB controller en wurket mei in ferskaat oan sensoren en actuators. De wearde fan 'e miljeuparameter mjitten troch de sensor wurdt opnommen troch de Z-Wave-tsjinner yn' e foarm fan in JSON-berjocht:

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

It wurdt dan trochstjoerd nei de berjochtbehearder fan it serverproses, sadat abonnee-threads it kinne ûntfange. De wichtichste abonnee is de logika-tsjinner foar produksje, dy't oerienkomt mei de wearden fan it berjochtfjild yn 'e antecedinten fan' e logyske regels. De konklúzjeresultaten mei kontrôlekommando's wurde weromstjoerd nei de berjochtbehearder en gean fan dêrút nei de Z-Wave-tsjinner, dy't se dekodearret en stjoert nei de Z-Wave-netwurk USB-controller. Dan komme se yn 'e actuator, dy't de steat fan miljeu-objekten feroaret, en it tûke hûs docht sa nuttich wurk.

Cloud Smart Home. Diel 1: Controller en sensoren
(klik op de foto om it yn hegere resolúsje te iepenjen)

It ferbinen fan Z-Wave-apparaten wurdt dien yn 'e grafyske ynterface fan' e smart home controller. Om dit te dwaan, gean nei de side mei in list mei apparaten en klikje op de knop "Tafoegje". It kommando tafoegje fia de RESTful API-ynterface komt it serverproses yn en wurdt dan troch de berjochtbehearder stjoerd nei de Z-Wave-tsjinner, dy't de Z-Wave-netwurk USB-controller yn in spesjale modus set foar it tafoegjen fan apparaten. Folgjende, op it Z-Wave-apparaat moatte jo in searje rappe parsjes meitsje (3 druk binnen 1,5 sekonden) fan 'e tsjinstknop. De USB-controller ferbynt it apparaat mei it netwurk en stjoert ynformaasje oer it nei de Z-Wave-tsjinner. Dat makket op syn beurt in nije yngong yn 'e SQLite-database mei de parameters fan it nije apparaat. Nei in oantsjutte tiid ynterval, de grafyske ynterface werom nei de Z-Wave apparaat list side, lêst ynformaasje út de databank en toant it nije apparaat yn de list. Elk apparaat krijt syn eigen unike identifier, dy't wurdt brûkt yn produksjekonferinsjeregels en by it wurkjen yn 'e wolk. De wurking fan dit algoritme wurdt werjûn yn it UML-diagram:

Cloud Smart Home. Diel 1: Controller en sensoren
(klik op de foto om it yn hegere resolúsje te iepenjen)

Ferbine IP-kamera's

It wolk smart home systeem besprutsen yn dit artikel is in upgrade fan it wolkfideo-tafersjochsysteem, ek ûntwikkele troch de auteur, dy't ferskate jierren op 'e merke is en in protte ynstallaasjes hat yn Ruslân.

Foar wolkfideo-tafersjochsystemen is ien fan 'e akute problemen de beheinde seleksje fan apparatuer wêrmei't yntegraasje kin wurde útfierd. De software dy't ferantwurdlik is foar ferbining mei de wolk is yn 'e fideokamera ynstalleare, dy't fuortendaliks serieuze easken stelt oan har hardware - de prosessor en it bedrach fan fergees ûnthâld. Dit ferklearret benammen de hegere priis fan wolk CCTV-kamera's yn ferliking mei gewoane IP-kamera's. Derneist is in lange poadium fan ûnderhannelings mei bedriuwen dy't CCTV-kamera's meitsje, nedich om tagong te krijen ta it kamerabestânsysteem en alle nedige ûntwikkelingsynstruminten.

Cloud Smart Home. Diel 1: Controller en sensoren

Oan 'e oare kant hawwe alle moderne IP-kamera's standert protokollen foar ynteraksje mei oare apparatuer (benammen fideorecorders). Sa, it brûken fan in aparte controller dy't ferbynt fia in standert protokol en útstjoering video streams fan IP kamera nei de wolk jout wichtige konkurrearjende foardielen foar wolk video tafersjoch systemen. Boppedat, as de klant hat al ynstallearre in fideo tafersjoch systeem basearre op ienfâldige IP kamera, dan wurdt it mooglik om te wreidzjen it en omsette it yn in folweardich wolk smart home.

It populêrste protokol foar IP-fideo-tafersjochsystemen, no stipe troch alle fabrikanten fan IP-kamera's sûnder útsûndering, is ONVIF profyl S, waans spesifikaasjes besteane yn in beskriuwingstaal foar webtsjinsten wsdl. Mei help fan nutsbedriuwen út de toolkit gSOAP It is mooglik om boarnekoade te generearjen foar tsjinsten dy't wurkje mei IP-kamera's:

$ 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

As gefolch krije wy in set koptekst "*.h" en boarne "*.cpp" triemmen yn C ++, dy't direkt yn in applikaasje of in aparte bibleteek pleatst wurde kinne en kompilearre wurde mei de GCC-kompiler. Troch de protte funksjes is de koade grut en fereasket ekstra optimalisaasje. De Raspberry Pi 3 model B+ mikrokompjûter hat genôch prestaasjes om dizze koade út te fieren, mar as it nedich is om de koade nei in oar platfoarm te portearjen, is it nedich om de juste prosessorarsjitektuer en systeemboarnen te selektearjen.

IP-kamera's dy't de ONVIF-standert stypje, as se wurkje op in lokaal netwurk, binne ferbûn mei in spesjale multicast-groep mei it adres 239.255.255.250. Der is in protokol WS Discovery, wêrmei jo it sykjen nei apparaten op it lokale netwurk automatisearje kinne.

De grafyske ynterface fan 'e smart home controller ymplementearret in sykfunksje foar IP-kamera's yn PHP, wat heul handich is by ynteraksje mei webtsjinsten fia XML-berjochten. By it selektearjen fan menu-items Apparaten > IP-kamera's > Scannen It algoritme foar it sykjen nei IP-kamera's wurdt lansearre, it resultaat werjaan yn 'e foarm fan in tabel:

Cloud Smart Home. Diel 1: Controller en sensoren
(klik op de foto om it yn hegere resolúsje te iepenjen)

As jo ​​​​in kamera tafoegje oan 'e controller, kinne jo de ynstellings opjaan wêrop't it sil ynteraksje mei de wolk. Ek op dit poadium wurdt it automatysk in unike apparaatidentifikaasje tawiisd, wêrtroch it letter maklik yn 'e wolk identifisearre wurde kin.

Cloud Smart Home. Diel 1: Controller en sensoren

Dêrnei wurdt in berjocht generearre yn JSON-formaat mei alle parameters fan 'e tafoege kamera en stjoerd nei it serverproses fan' e smart home controller fia it kommando RESTful API, wêr't de kameraparameters wurde dekodearre en bewarre yn 'e ynterne SQLite-database, en binne ek brûkt om de folgjende ferwurkingsthreads te starten:

  1. it oprjochtsjen fan in RTSP-ferbining om fideo- en audiostreamen te ûntfangen;
  2. transcoding audio út G.711 mu-Law, G.711 A-Law, G.723, ensfh formaten. nei AAC-formaat;
  3. transkodearjen fan fideostreamen yn H.264-formaat en audio yn AAC-formaat yn in FLV-kontener en it oerjaan nei de wolk fia it RTMP-protokol;
  4. in ferbining meitsje mei it einpunt fan 'e bewegingsdetektor fan' e IP-kamera fia it ONVIF-protokol en it periodyk pollen;
  5. periodyk generearje in thumbnailfoarbyldôfbylding en stjoer it nei de wolk fia it MQTT-protokol;
  6. lokale opname fan fideo- en audiostreamen yn 'e foarm fan aparte bestannen yn MP4-formaat op in SD- as Flash-kaart fan' e smart home controller.

Cloud Smart Home. Diel 1: Controller en sensoren

Om in ferbining te meitsjen mei kamera's, transkodearje, ferwurkje en fideostreamen opnimme yn it serverproses, wurde funksjes út 'e bibleteek brûkt FFmpeg 4.1.0.

Yn it prestaasjetesteksperimint waarden 3 kamera's ferbûn mei de controller:

  1. HiWatch DS-I114W (resolúsje - 720p, kompresje opmaak - H.264, bitrate - 1 Mb / s, lûd G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (resolúsje - 1080p, kompresje opmaak - H.264, bitrate - 1 Mb / s, gjin lûd);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (resolúsje - 1080p, kompresjeformaat - H.264, bitrate - 1.5 Mb/s, AAC audio).

Cloud Smart Home. Diel 1: Controller en sensoren

Alle trije streamen waarden tagelyk útstjoerd nei de wolk, audio-transkodearring waard útfierd fan mar ien kamera, en lokale argyfopname waard útskeakele. CPU load wie likernôch 5%, RAM gebrûk wie 32 MB (per proses), 56 MB (totaal ynklusyf OS).

Sa kinne sawat 20 - 30 kamera's ferbûn wurde mei de smart home controller (ôfhinklik fan resolúsje en bitrate), dat is genôch foar in fideo tafersjochsysteem foar in trije-ferhaal cottage of in lyts pakhús. Foar taken dy't gruttere prestaasjes fereaskje, kinne jo in nettop brûke mei in multi-core Intel-prosessor en Linux Debian Sarge OS. De controller ûndergiet op it stuit proefoperaasje, en gegevens oer har prestaasjes sille wurde bywurke.

Ynteraksje mei de wolk

In cloud-basearre smart home bewarret brûkersgegevens (fideo- en sensormjittingen) yn 'e wolk. De arsjitektuer fan wolk opslach sil yn mear detail wurde besprutsen yn it folgjende artikel yn ús searje. Litte wy no prate oer de ynterface foar it ferstjoeren fan ynformaasjeberjochten fan 'e smart home controller nei de wolk.

De steaten fan ferbûne apparaten en sensormjittingen wurde fia it protokol oerdroegen MQTT, dat wurdt faak brûkt yn Internet of Things projekten fanwege syn ienfâld en enerzjy effisjinsje. MQTT brûkt in client-tsjinner model, dêr't kliïnten ynskriuwe op spesifike ûnderwerpen binnen de makelder en publisearje harren berjochten. De broker stjoert berjochten nei alle abonnees neffens regels bepaald troch it nivo fan QoS (Quality of Service):

  • QoS 0 - maksimaal ien kear (gjin levering garânsje);
  • QoS 1 - op syn minst ien kear (mei levering befêstiging);
  • QoS 2 - krekt ien kear (mei ekstra levering befêstiging).

Yn ús gefal brûke wy Eclipse Mosquito. De ûnderwerpnamme is de unike identifier fan 'e smart home controller. De MQTT-kliïnt binnen it serverproses abonnearret op dit ûnderwerp en fertaalt JSON-berjochten dy't komme fan 'e berjochtbehearder dêryn. Oarsom wurde berjochten fan 'e MQTT-broker trochstjoerd nei de berjochtbehearder, dy't se dan multiplexet nei har abonnees binnen it serverproses:

Cloud Smart Home. Diel 1: Controller en sensoren

Om berjochten oer de status fan 'e smart home controller te ferstjoeren, wurdt it meganisme fan bewarre berjochten brûkt bewarre berjochten MQTT protokol. Hjirmei kinne jo de timing fan opnij ferbiningen korrekt kontrolearje by stroomûnderbrekken.

De MQTT-kliïnt waard ûntwikkele op basis fan 'e biblioteek ymplemintaasje Eclipse Paho yn C++ taal.

H.264 + AAC media streams wurde stjoerd nei de wolk fia de RTMP protokol, dêr't in kluster fan media tsjinners is ferantwurdlik foar it ferwurkjen en bewarje se. Om de lading yn it kluster optimaal te fersprieden en de minste laden mediaserver te selektearjen, makket de smart home-controller in foarriedich fersyk oan 'e wolk load balancer en pas dêrnei stjoert de mediastream.

konklúzje

It artikel ûndersocht ien spesifike ymplemintaasje fan in smart home controller basearre op de Raspberry Pi 3 B+ mikrokompjûter, dy't ynformaasje kin ûntfange, ferwurkje en kontrôle apparatuer fia it Z-Wave protokol, ynteraksje mei IP-kamera's fia it ONVIF-protokol, en ek gegevens útwikselje en kommando's mei de wolk. tsjinst fia MQTT- en RTMP-protokollen. In produksje logyske motor is ûntwikkele basearre op in ferliking fan logyske regels en feiten presintearre yn JSON-formaat.

De smart home controller ûndergiet op it stuit proefoperaasje op ferskate plakken yn Moskou en de Moskouregio.

De folgjende ferzje fan 'e controller is fan plan om oare soarten apparaten te ferbinen (RF, Bluetooth, WiFi, bedrade). Foar it gemak fan brûkers sil de proseduere foar it ferbinen fan sensoren en IP-kamera's wurde oerbrocht nei de mobile applikaasje. D'r binne ek ideeën foar it optimalisearjen fan de serverproseskoade en it portearjen fan de software nei it bestjoeringssysteem iepenwrt. Hjirmei kinne jo besparje op in aparte controller en de funksjonaliteit fan in tûke hûs oerdrage nei in gewoane húshâldrouter.

Boarne: www.habr.com

Add a comment