Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Danes, zahvaljujoč hitremu razvoju mikroelektronike, komunikacijskih kanalov, internetnih tehnologij in umetne inteligence, postaja tema pametnih domov vse bolj aktualna. Človeška stanovanja so se od kamene dobe močno spremenila in v dobi industrijske revolucije 4.0 in interneta stvari so postala udobna, funkcionalna in varna. Na trg prihajajo rešitve, ki stanovanje ali podeželsko hišo spremenijo v kompleksne informacijske sisteme, nadzorovane s pametnega telefona od kjer koli na svetu. Poleg tega interakcija med človekom in strojem ne zahteva več znanja programskih jezikov - zahvaljujoč algoritmom za prepoznavanje govora in sintezo se oseba s pametnim domom pogovarja v svojem maternem jeziku.

Nekateri sistemi pametnega doma, ki so trenutno na trgu, so logičen razvoj oblačnih videonadzornih sistemov, katerih razvijalci so spoznali potrebo po celoviti rešitvi ne samo za nadzor, temveč tudi za upravljanje oddaljenih objektov.

Predstavljamo vam serijo treh člankov, ki vam bodo povedali o vseh glavnih komponentah sistema pametnega doma v oblaku, ki ga je avtor osebno razvil in začel delovati. Prvi članek je posvečen terminalski odjemalski opremi, nameščeni v pametnem domu, drugi arhitekturi sistema za shranjevanje in obdelavo podatkov v oblaku, tretji pa odjemalski aplikaciji za upravljanje sistema na mobilnih in stacionarnih napravah.

Oprema za pametni dom

Najprej se pogovorimo o tem, kako narediti pameten dom iz navadnega stanovanja, dacha ali koče. Da bi to naredili, je praviloma potrebno v dom postaviti naslednjo opremo:

  1. senzorji, ki merijo različne okoljske parametre;
  2. aktuatorji, ki delujejo na zunanje predmete;
  3. krmilnik, ki izvaja izračune v skladu z meritvami senzorjev in vgrajeno logiko ter izdaja ukaze aktuatorjem.

Naslednja slika prikazuje diagram pametnega doma, na katerem so senzorji za puščanje vode (1) v kopalnici, temperaturo (2) in osvetlitev (3) v spalnici, pametna vtičnica (4) v kuhinji in videonadzorna kamera (5) na hodniku.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Trenutno se široko uporabljajo brezžični senzorji, ki delujejo s protokoli RF433, Z-Wave, ZigBee, Bluetooth in WiFi. Njihove glavne prednosti so enostavna namestitev in uporaba, pa tudi nizki stroški in zanesljivost, ker Proizvajalci si prizadevajo, da bi svoje naprave pripeljali na množični trg in jih naredili dostopne povprečnemu uporabniku.

Senzorji in aktuatorji so praviloma preko brezžičnega vmesnika povezani s krmilnikom pametnega doma (6) - specializiranim mikroračunalnikom, ki združuje vse te naprave v eno samo omrežje in jih nadzoruje.

Nekatere rešitve pa lahko združujejo senzor, aktuator in krmilnik hkrati. Pametni vtič je na primer mogoče programirati za vklop ali izklop po urniku, kamera za videonadzor v oblaku pa lahko snema video na podlagi signala detektorja gibanja. V najpreprostejših primerih lahko storite brez ločenega krmilnika, vendar je potrebno ustvariti prilagodljiv sistem s številnimi scenariji.

Za povezavo krmilnika pametnega doma v globalno omrežje lahko uporabite navaden internetni usmerjevalnik (7), ki je že dolgo postal običajna gospodinjska naprava v vsakem domu. Tukaj je še en argument v prid krmilniku pametnega doma – če se povezava z internetom prekine, bo pametni dom še naprej normalno deloval zahvaljujoč logičnemu bloku, ki je shranjen v krmilniku in ne v storitvi v oblaku.

Krmilnik pametnega doma

Krmilnik za sistem pametnega doma v oblaku, obravnavan v tem članku, je razvit na osnovi mikroračunalnika z eno ploščo Raspberry Pi 3 model B+, ki je bil izdan marca 2018 in ima dovolj virov in zmogljivosti za opravila pametnega doma. Vključuje štirijedrni procesor Cortex-A53, ki temelji na 64-bitni arhitekturi ARMv8-A s taktom 1.4 GHz, kot tudi 1 GB RAM-a, Wi-Fi 802.11ac, Bluetooth 4.2 in gigabitni ethernetni adapter, ki deluje prek USB 2.0. .

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Sestavljanje krmilnika je zelo preprosto - mikroračunalnik (1) namestimo v plastično ohišje (2), nato pa vanj vstavimo pomnilniško kartico 8 GB formata microSD s programsko opremo (3) in omrežni krmilnik USB Z-Wave (4). ustrezne reže. Krmilnik pametne hiše je povezan z napajalnikom preko napajalnika 5V, 2.1A (5) in USB - micro-USB kabla (6). Vsak krmilnik ima edinstveno identifikacijsko številko, ki je zapisana v konfiguracijski datoteki ob prvem zagonu in je potrebna za interakcijo s storitvami pametnega doma v oblaku.

Programsko opremo krmilnika pametnega doma je razvil avtor tega članka na podlagi operacijskega sistema Linux Raspbian Stretch. Sestavljen je iz naslednjih glavnih podsistemov:

  • strežniški proces za interakcijo z opremo pametnega doma in oblakom;
  • grafični uporabniški vmesnik za nastavitev konfiguracijskih in delovnih parametrov krmilnika;
  • baza podatkov za shranjevanje konfiguracije krmilnika.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Baza podatkov krmilnik pametnega doma je implementiran na podlagi vgrajenega DBMS SQLite in je datoteka na kartici SD s sistemsko programsko opremo. Služi kot shramba za konfiguracijo krmilnika - informacije o priključeni opremi in njenem trenutnem stanju, blok logičnih proizvodnih pravil, kot tudi informacije, ki zahtevajo indeksiranje (na primer imena datotek lokalnega video arhiva). Ko se krmilnik znova zažene, se te informacije shranijo, kar omogoča obnovitev krmilnika v primeru izpada električne energije.

Grafični vmesnik krmilnik pametnega doma, razvit v PHP 7 z uporabo mikroogrodja Slim. Za delovanje aplikacije je odgovoren spletni strežnik. lighttpd, ki se pogosto uporablja v vgrajenih napravah zaradi dobre zmogljivosti in nizkih zahtev po virih.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji
(kliknite na sliko, da jo odprete v višji ločljivosti)

Glavna funkcija grafičnega vmesnika je povezava opreme pametnega doma (IP nadzornih kamer in senzorjev) na krmilnik. Spletna aplikacija prebere konfiguracijo in trenutno stanje krmilnika in nanj povezanih naprav iz baze podatkov SQLite. Če želite spremeniti konfiguracijo krmilnika, pošlje nadzorne ukaze v formatu JSON prek vmesnika RESTful API strežniškega procesa.

Proces strežnika

Proces strežnika - ključna komponenta, ki opravlja vse glavno delo pri avtomatizaciji informacijskih procesov, ki so osnova pametnega doma: sprejemanje in obdelava senzoričnih podatkov, izdajanje nadzornih dejanj glede na vgrajeno logiko. Namen strežniškega procesa je interakcija z opremo pametnega doma, izvajanje produkcijskih logičnih pravil, sprejemanje in obdelava ukazov iz grafičnega vmesnika in oblaka. Strežniški proces v obravnavanem krmilniku pametnega doma je implementiran kot večnitna aplikacija, razvita v C++ in zagnana kot ločena storitev sistemd operacijski sistem Linux Raspbian.

Glavni bloki strežniškega procesa so:

  1. Upravitelj sporočil;
  2. strežnik IP kamer;
  3. strežnik naprav Z-Wave;
  4. Strežnik produkcijskih logičnih pravil;
  5. Baza podatkov o konfiguraciji krmilnika in bloka logičnih pravil;
  6. RESTful API strežnik za interakcijo z grafičnim vmesnikom;
  7. Odjemalec MQTT za interakcijo z oblakom.

Procesni bloki strežnika so implementirani kot ločene niti, informacije med katerimi se prenašajo v obliki sporočil v formatu JSON (ali podatkovnih struktur, ki predstavljajo ta format v pomnilniku procesa).

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Glavna komponenta strežniškega procesa je upravitelj sporočil, ki sporočila JSON usmerja v vse bloke strežniškega procesa. Vrste informacijskih polj sporočil JSON in vrednosti, ki jih lahko sprejmejo, so navedene v tabeli:

deviceType
protokol
messageType
deviceState
ukaz

kamera
onvif
senzorData
on
pretakanje (vklop/izklop)

senzor
zwave
ukaz
off
snemanje (vklop/izklop)

efektor
mqtt
businessLogicRule
pretakanje (vklop/izklop)
evice (Dodaj/Odstrani)

businessLogic
konfiguracijski podatki
snemanje (vklop/izklop)

bluetooth
deviceState
Napaka

Wifi

rf

Na primer, sporočilo detektorja gibanja kamere je videti takole:

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

Proizvodna logika

Če želite prejeti ali poslati sporočilo od dispečerja, se procesni blok strežnika naroči na sporočila določene vrste. Naročnina je proizvodno logično pravilo tipa "Če, potem...", predstavljen v formatu JSON, in povezava do upravljalnika sporočil znotraj bloka strežniškega procesa. Na primer, če želite strežniku IP kamer dovoliti prejemanje ukazov iz GUI in oblaka, morate dodati naslednje pravilo:

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

Če so izpolnjeni pogoji iz predhodnik (leva stran) pravila so resnična, potem je zadovoljen posledično (desna stran) in upravljavec dobi dostop do telesa sporočila JSON. Predhodnik podpira logične operatorje, ki primerjajo pare ključ-vrednost JSON:

  1. enako "enako";
  2. ni enako kot "not_equal";
  3. manj "manj";
  4. bolj "večji";
  5. manj kot ali enako "manj_ali_enako";
  6. večje ali enako "večje_ali_enako".

Rezultate primerjave je mogoče med seboj povezati z uporabo operatorjev logične algebre:

  1. In "in"
  2. ALI "ali";
  3. NE "ne".

Tako lahko s pisanjem operatorjev in operandov v poljskem zapisu ustvarite precej zapletene pogoje z velikim številom parametrov.

Popolnoma enak mehanizem, ki temelji na sporočilih JSON in produkcijskih pravilih v formatu JSON, se uporablja v strežniškem bloku produkcijske logike za predstavitev znanja in izvajanje logičnega sklepanja z uporabo senzoričnih podatkov iz senzorjev pametnega doma.

Uporabnik z mobilno aplikacijo ustvari scenarije, po katerih naj bi pametni dom deloval. Na primer: "Če se sproži senzor za odpiranje vhodnih vrat, potem prižgi luč na hodniku". Aplikacija iz baze podatkov prebere identifikatorje senzorjev (senzor odpiranja) in aktuatorjev (pametna vtičnica ali pametna svetilka) ter generira logično pravilo v formatu JSON, ki se pošlje krmilniku pametnega doma. O tem mehanizmu bomo podrobneje razpravljali v tretjem članku naše serije, kjer bomo govorili o odjemalski aplikaciji za upravljanje pametnega doma.

Mehanizem proizvodne logike, obravnavan zgoraj, je implementiran z uporabo knjižnice RapidJSON — Razčlenjevalnik SAX za format JSON v C++. Zaporedno branje in razčlenjevanje matrike produkcijskih pravil vam omogoča enostavno implementacijo funkcije primerjave podatkov znotraj predhodnikov:

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

Tukaj pFact — strukturo, ki vsebuje pare ključ-vrednost iz sporočila JSON, m_Pravila — niz nizov proizvodnih pravil. V funkciji se izvede primerjava dohodnega sporočila in produkcijskega pravila reader.Parse(ruleStream, ruleHandler)Če ruleHandler je objekt, ki vsebuje logiko logičnih in primerjalnih operatorjev. sRuleId — edinstven identifikator pravil, zahvaljujoč kateremu je mogoče shranjevati in urejati pravila v bazi podatkov krmilnika pametnega doma. m_pActions — matrika z rezultati logičnega sklepanja: sporočila JSON, ki vsebujejo posledice iz baze pravil in so poslana naprej upravljalcu sporočil, da jih lahko naročniške niti obdelajo.

Zmogljivost RapidJSON je primerljiva s funkcijo strlen(), minimalne zahteve za sistemske vire pa omogočajo uporabo te knjižnice v vdelanih napravah. Uporaba sporočil in logičnih pravil v formatu JSON vam omogoča implementacijo prilagodljivega sistema izmenjave informacij med vsemi komponentami krmilnika pametnega doma.

Senzorji in aktuatorji Z-Wave

Glavna prednost pametnega doma je, da lahko neodvisno meri različne parametre zunanjega okolja in glede na situacijo izvaja uporabne funkcije. Za to so senzorji in aktuatorji povezani s krmilnikom pametnega doma. V trenutni različici so to brezžične naprave, ki delujejo po protokolu Z-val na posebej dodeljeni frekvenci 869 MHz Za Rusijo. Za delovanje so združeni v mrežno mrežo, ki vsebuje repetitorje signala za povečanje območja pokritosti. Naprave imajo tudi poseben način varčevanja z energijo – večino časa preživijo v stanju mirovanja in pošiljajo informacije šele, ko se spremeni njihovo stanje, kar lahko bistveno podaljša življenjsko dobo vgrajene baterije.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Zdaj lahko na trgu najdete precej veliko število različnih naprav Z-Wave. Oglejmo si nekaj primerov:

  1. Pametna vtičnica Zipato PAN16 lahko meri naslednje parametre: porabo električne energije (kWh), moč (W), napetost (V) in tok (A) v električnem omrežju. Vgrajeno ima tudi stikalo, s katerim upravljate priključen električni aparat;
  2. Senzor puščanja Neo Coolcam zazna prisotnost razlite tekočine tako, da zapre kontakte oddaljene sonde;
  3. Senzor dima Zipato PH-PSG01 se sproži, ko delci dima vstopijo v komoro analizatorja plina;
  4. Senzor gibanja Neo Coolcam analizira infrardeče sevanje človeškega telesa. Dodatno je senzor svetlobe (Lx);
  5. Multisenzor Philio PST02-A meri temperaturo (°C), svetlobo (%), odpiranje vrat, prisotnost osebe v prostoru;
  6. Z-Wave USB Stick ZME E UZB1 mrežni krmilnik, na katerega se priklopijo senzorji.

Zelo pomembno je, da naprave in krmilnik delujejo na isti frekvenci, sicer se v trenutku povezave enostavno ne vidijo. Na en omrežni krmilnik Z-Wave je mogoče povezati do 232 naprav, kar je povsem dovolj za stanovanje ali podeželsko hišo. Za razširitev območja pokritosti omrežja v zaprtih prostorih lahko pametno vtičnico uporabite kot repetitor signala.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

V procesu strežnika krmilnika pametnega doma, obravnavanem v prejšnjem odstavku, je strežnik Z-Wave odgovoren za interakcijo z napravami Z-Wave. Za sprejemanje informacij iz senzorjev uporablja knjižnico OpenZWave v C++, ki zagotavlja vmesnik za interakcijo z omrežnim krmilnikom USB Z-Wave in deluje z različnimi senzorji in aktuatorji. Vrednost okoljskega parametra, ki ga meri senzor, zabeleži strežnik Z-Wave v obliki sporočila JSON:

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

Nato se posreduje upravitelju sporočil strežniškega procesa, tako da ga lahko prejmejo naročniške niti. Glavni naročnik je produkcijski logični strežnik, ki se ujema z vrednostmi sporočilnega polja v predhodnikih logičnih pravil. Rezultati sklepanja, ki vsebujejo nadzorne ukaze, se pošljejo nazaj v upravitelj sporočil in od tam gredo na strežnik Z-Wave, ki jih dekodira in pošlje omrežnemu krmilniku USB Z-Wave. Nato vstopijo v aktuator, ki spreminja stanje okoljskih objektov, pametni dom pa tako opravlja koristno delo.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji
(kliknite na sliko, da jo odprete v višji ločljivosti)

Povezovanje naprav Z-Wave poteka v grafičnem vmesniku krmilnika pametnega doma. Če želite to narediti, pojdite na stran s seznamom naprav in kliknite gumb »Dodaj«. Ukaz za dodajanje prek vmesnika RESTful API vstopi v strežniški proces, nato pa ga upravitelj sporočil pošlje strežniku Z-Wave, ki omrežni USB krmilnik Z-Wave postavi v poseben način za dodajanje naprav. Nato morate na napravi Z-Wave narediti niz hitrih pritiskov (3 pritiski v 1,5 sekunde) storitvenega gumba. USB krmilnik poveže napravo v omrežje in pošlje informacije o njej na strežnik Z-Wave. To pa ustvari nov vnos v bazi podatkov SQLite s parametri nove naprave. Po določenem časovnem intervalu se grafični vmesnik vrne na stran s seznamom naprav Z-Wave, prebere podatke iz baze podatkov in prikaže novo napravo na seznamu. Vsaka naprava prejme svoj edinstven identifikator, ki se uporablja v pravilih sklepanja proizvodnje in pri delu v oblaku. Delovanje tega algoritma je prikazano v diagramu UML:

Pametni dom v oblaku. 1. del: Krmilnik in senzorji
(kliknite na sliko, da jo odprete v višji ločljivosti)

Priključitev IP kamer

Oblačni sistem pametne hiše, o katerem govorimo v tem članku, je nadgradnja oblačnega videonadzornega sistema, ki ga je prav tako razvil avtor in je na trgu že nekaj let in ima veliko namestitev v Rusiji.

Pri oblačnih videonadzornih sistemih je eden od akutnih problemov omejena izbira opreme, s katero je mogoče izvesti integracijo. Programska oprema, odgovorna za povezavo z oblakom, je nameščena znotraj video kamere, kar takoj postavlja resne zahteve za njeno strojno opremo - procesor in količino prostega pomnilnika. To predvsem pojasnjuje višjo ceno oblačnih CCTV kamer v primerjavi z navadnimi IP kamerami. Poleg tega je za pridobitev dostopa do datotečnega sistema kamer in vseh potrebnih razvojnih orodij potrebna dolgotrajna faza pogajanj s podjetji, ki proizvajajo kamere CCTV.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Po drugi strani pa imajo vse sodobne IP kamere standardne protokole za interakcijo z drugo opremo (zlasti videorekorderji). Tako uporaba ločenega krmilnika, ki se povezuje prek standardnega protokola in oddaja video tokove iz IP kamer v oblak, zagotavlja pomembne konkurenčne prednosti videonadzornih sistemov v oblaku. Poleg tega, če je stranka že namestila videonadzorni sistem, ki temelji na preprostih IP kamerah, ga je mogoče razširiti in spremeniti v popoln pametni dom v oblaku.

Najbolj priljubljen protokol za IP videonadzorne sisteme, ki ga podpirajo vsi proizvajalci IP kamer brez izjeme, je ONVIF profil S, katerega specifikacije obstajajo v opisnem jeziku spletnih storitev wsdl. Uporaba pripomočkov iz kompleta orodij gSOAP Možno je ustvariti izvorno kodo za storitve, ki delujejo z IP kamerami:

$ 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

Kot rezultat dobimo nabor datotek glave »*.h« in izvornih datotek »*.cpp« v C++, ki jih je mogoče postaviti neposredno v aplikacijo ali ločeno knjižnico in prevesti s prevajalnikom GCC. Zaradi številnih funkcij je koda velika in zahteva dodatno optimizacijo. Mikroračunalnik Raspberry Pi 3 model B+ ima zadostno zmogljivost za izvajanje te kode, če pa je treba kodo prenesti na drugo platformo, je treba izbrati pravilno arhitekturo procesorja in sistemske vire.

IP kamere, ki podpirajo standard ONVIF, so pri delovanju v lokalnem omrežju povezane v posebno multicast skupino z naslovom 239.255.255.250. Obstaja protokol WS Discovery, ki omogoča avtomatizirano iskanje naprav v lokalnem omrežju.

Grafični vmesnik krmilnika pametnega doma izvaja funkcijo iskanja IP kamer v PHP, kar je zelo priročno pri interakciji s spletnimi storitvami prek sporočil XML. Pri izbiri elementov menija Naprave > Kamere IP > Skeniranje Zažene se algoritem za iskanje IP kamer, ki prikaže rezultat v obliki tabele:

Pametni dom v oblaku. 1. del: Krmilnik in senzorji
(kliknite na sliko, da jo odprete v višji ločljivosti)

Ko krmilniku dodate kamero, lahko določite nastavitve, v skladu s katerimi bo sodelovala z oblakom. Tudi na tej stopnji se ji samodejno dodeli unikaten identifikator naprave, po katerem jo je kasneje mogoče enostavno prepoznati znotraj oblaka.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Nato se generira sporočilo v formatu JSON, ki vsebuje vse parametre dodane kamere in se preko ukaza RESTful API pošlje v strežniški proces krmilnika pametnega doma, kjer se parametri kamere dekodirajo in shranijo v notranjo bazo podatkov SQLite ter se uporablja se tudi za zagon naslednjih niti obdelave:

  1. vzpostavitev povezave RTSP za sprejem video in avdio tokov;
  2. prekodiranje zvoka iz formatov G.711 mu-Law, G.711 A-Law, G.723 itd. v format AAC;
  3. transkodiranje video tokov v formatu H.264 in zvoka v formatu AAC v vsebnik FLV in prenos v oblak prek protokola RTMP;
  4. vzpostavitev povezave s končno točko detektorja gibanja IP kamere preko ONVIF protokola in periodično anketiranje le-tega;
  5. občasno generiranje predogleda sličice in pošiljanje v oblak prek protokola MQTT;
  6. lokalno snemanje video in avdio tokov v obliki ločenih datotek v MP4 formatu na SD ali Flash kartico krmilnika pametnega doma.

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Za vzpostavitev povezave s kamerami, transkodiranje, obdelavo in snemanje video tokov v procesu strežnika se uporabljajo funkcije iz knjižnice FFmpeg 4.1.0.

V poskusu testiranja zmogljivosti so bile na krmilnik povezane 3 kamere:

  1. HiWatch DS-I114W (ločljivost - 720p, format stiskanja - H.264, bitna hitrost - 1 Mb/s, zvok G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (ločljivost - 1080p, format stiskanja - H.264, bitna hitrost - 1 Mb/s, brez zvoka);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (ločljivost - 1080p, format stiskanja - H.264, bitna hitrost - 1.5 Mb/s, zvok AAC).

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Vsi trije tokovi so bili hkrati izhodni v oblak, zvočno prekodiranje je bilo izvedeno samo iz ene kamere, lokalno arhivsko snemanje pa je bilo onemogočeno. Obremenitev procesorja je bila približno 5 %, uporaba RAM-a je bila 32 MB (na proces), 56 MB (skupaj vključno z OS).

Tako lahko na krmilnik pametnega doma povežemo približno 20 - 30 kamer (odvisno od ločljivosti in bitne hitrosti), kar je dovolj za videonadzorni sistem trinadstropne koče ali manjšega skladišča. Za naloge, ki zahtevajo večjo zmogljivost, lahko uporabite nettop z večjedrnim Intel procesorjem in Linux Debian Sarge OS. Krmilnik je trenutno v poskusnem obratovanju, podatki o njegovem delovanju pa bodo posodobljeni.

Interakcija z oblakom

Pametni dom v oblaku shranjuje uporabniške podatke (video in senzorske meritve) v oblaku. O arhitekturi shranjevanja v oblaku bomo podrobneje razpravljali v naslednjem članku v naši seriji. Zdaj pa se pogovorimo o vmesniku za prenos informacijskih sporočil iz krmilnika pametnega doma v oblak.

Prek protokola se prenašajo stanja priključenih naprav in meritve senzorjev MQTT, ki se zaradi svoje preprostosti in energijske učinkovitosti pogosto uporablja v projektih interneta stvari. MQTT uporablja model odjemalec-strežnik, kjer se stranke naročijo na določene teme znotraj posrednika in objavijo svoja sporočila. Posrednik pošilja sporočila vsem naročnikom v skladu s pravili, ki jih določa raven QoS (Quality of Service):

  • QoS 0 - največ enkrat (brez garancije dostave);
  • QoS 1 - vsaj enkrat (s potrditvijo dostave);
  • QoS 2 - točno enkrat (z dodatno potrditvijo dostave).

V našem primeru uporabljamo Eclipse Komar. Ime teme je enolični identifikator krmilnika pametnega doma. Odjemalec MQTT znotraj strežniškega procesa se naroči na to temo in vanjo prevede sporočila JSON, ki prihajajo iz upravitelja sporočil. Nasprotno pa sporočila posrednika MQTT ta posreduje upravitelju sporočil, ki jih nato multipleksira svojim naročnikom znotraj strežniškega procesa:

Pametni dom v oblaku. 1. del: Krmilnik in senzorji

Za prenos sporočil o statusu krmilnika pametnega doma se uporablja mehanizem shranjenih sporočil zadržanih sporočil MQTT protokol. To vam omogoča pravilno spremljanje časa ponovnih povezav med izpadi električne energije.

Odjemalec MQTT je bil razvit na podlagi implementacije knjižnice Mrk Paho v jeziku C++.

Medijski tokovi H.264 + AAC se prek protokola RTMP pošiljajo v oblak, kjer je za njihovo obdelavo in shranjevanje odgovoren grozd medijskih strežnikov. Za optimalno porazdelitev obremenitve v gruči in izbiro najmanj obremenjenega medijskega strežnika krmilnik pametnega doma predhodno zahteva izravnalnik obremenitve v oblaku in šele po tem pošlje medijski tok.

Zaključek

Članek je preučil eno specifično izvedbo krmilnika pametnega doma, ki temelji na mikroračunalniku Raspberry Pi 3 B+, ​​ki lahko sprejema, obdeluje informacije in nadzoruje opremo preko protokola Z-Wave, komunicira z IP kamerami preko protokola ONVIF ter si izmenjuje podatke in ukaze s storitvijo v oblaku prek protokolov MQTT in RTMP. Proizvodni logični motor je bil razvit na podlagi primerjave logičnih pravil in dejstev, predstavljenih v formatu JSON.

Krmilnik pametnega doma je trenutno v poskusnem obratovanju na več lokacijah v Moskvi in ​​moskovski regiji.

Naslednja različica krmilnika načrtuje povezovanje drugih vrst naprav (RF, Bluetooth, WiFi, žično). Za udobje uporabnikov bo postopek povezovanja senzorjev in IP kamer prenesen v mobilno aplikacijo. Obstajajo tudi ideje za optimizacijo procesne kode strežnika in prenos programske opreme v operacijski sistem openwrt. To vam bo omogočilo, da prihranite na ločenem krmilniku in prenesete funkcionalnost pametnega doma na običajni gospodinjski usmerjevalnik.

Vir: www.habr.com

Dodaj komentar