
Šiandien sparčiai tobulėjant mikroelektronikai, komunikacijos kanalams, interneto technologijoms ir dirbtiniam intelektui išmaniųjų namų tema tampa vis aktualesnė. Žmonių būstas nuo akmens amžiaus patyrė didelių pokyčių, o pramoninės revoliucijos 4.0 ir daiktų interneto eroje jis tapo patogus, funkcionalus ir saugus. Į rinką ateina sprendimai, kurie butą ar kaimo namą paverčia sudėtingomis informacinėmis sistemomis, valdomomis iš bet kurios pasaulio vietos išmaniuoju telefonu. Be to, žmogaus ir mašinos sąveikai nebereikia mokėti programavimo kalbų – kalbos atpažinimo ir sintezės algoritmų dėka žmogus su išmaniaisiais namais kalba savo gimtąja kalba.
Kai kurios šiuo metu rinkoje esančios išmaniųjų namų sistemos yra logiška debesų vaizdo stebėjimo sistemų plėtra, kurios kūrėjai suprato kompleksinio sprendimo poreikį ne tik stebėjimui, bet ir nuotoliniams objektams valdyti.
Jūsų dėmesiui pristatome trijų straipsnių seriją, kurioje bus pasakojama apie visus pagrindinius išmaniųjų namų debesų sistemos komponentus, kuriuos asmeniškai sukūrė autorius ir pradėjo eksploatuoti. Pirmasis straipsnis skirtas išmaniojo namo viduje įdiegtai terminalo kliento įrangai, antrasis – debesų saugojimo ir duomenų apdorojimo sistemos architektūrai, o galiausiai trečiasis – kliento programai, skirtai sistemai valdyti mobiliuosiuose ir stacionariuose įrenginiuose.
Išmaniųjų namų įranga
Pirmiausia pakalbėkime apie tai, kaip iš įprasto buto, vasarnamio ar kotedžo padaryti išmanųjį namą. Norėdami tai padaryti, paprastai namuose turite įdėti šią įrangą:
- jutikliai, matuojantys įvairius išorinės aplinkos parametrus;
- Pavaros, veikiančios išorinius objektus;
- valdiklis, kuris atlieka skaičiavimus pagal jutiklių matavimus ir įterptąją logiką bei duoda komandas pavaroms.
Toliau pateiktame paveikslėlyje parodyta išmaniojo namo schema, kurioje yra vandens nutekėjimo (1) vonios kambaryje, temperatūros (2) ir apšvietimo (3) jutikliai miegamajame, išmanusis lizdas (4) virtuvėje ir vaizdo stebėjimo kamera (5) koridoriuje.

Šiuo metu plačiai naudojami belaidžiai jutikliai, veikiantys naudojant RF433, Z-Wave, ZigBee, Bluetooth ir WiFi protokolus. Pagrindiniai jų privalumai yra paprastas montavimas ir naudojimas, taip pat maža kaina ir patikimumas, nes Gamintojai stengiasi pateikti savo įrenginius į masinę rinką ir padaryti juos prieinamus paprastam vartotojui.
Jutikliai ir pavaros, kaip taisyklė, per belaidę sąsają jungiami prie išmaniojo namo valdiklio (6) – specializuoto mikrokompiuterio, kuris visus šiuos įrenginius sujungia į vieną tinklą ir juos valdo.
Tačiau kai kurie sprendimai gali vienu metu sujungti jutiklį, pavarą ir valdiklį. Pavyzdžiui, išmanųjį kištuką galima užprogramuoti taip, kad jis įsijungtų arba išsijungtų pagal grafiką, o debesies vaizdo stebėjimo kamera gali įrašyti vaizdą pagal judesio detektoriaus signalą. Paprasčiausiais atvejais galima apsieiti ir be atskiro valdiklio, tačiau norint sukurti lanksčią sistemą su daugybe scenarijų, tai būtina.
Išmaniojo namo valdikliui prijungti prie pasaulinio tinklo galima naudoti įprastą interneto maršrutizatorių (7), kuris jau seniai tapo įprastu buitiniu prietaisu bet kuriuose namuose. Čia yra dar vienas argumentas išmaniojo namo valdiklio naudai – nutrūkus ryšiui su internetu, išmanusis namas ir toliau veiks kaip įprastai valdiklio viduje, o ne debesijos tarnyboje saugomo loginio bloko dėka.
Išmanusis namų valdiklis
Šiame straipsnyje aptariamas debesų išmaniųjų namų sistemos valdiklis sukurtas remiantis vienos plokštės mikrokompiuteriu , kuris buvo išleistas 2018 m. kovo mėn. ir turi pakankamai išteklių bei našumo išmaniųjų namų užduotims atlikti. Jame yra keturių branduolių Cortex-A53 procesorius, pagrįstas 64 bitų ARMv8-A architektūra, 1.4 GHz dažniu, taip pat 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 ir gigabito Ethernet adapteris, veikiantis per USB 2.0 .

Valdiklio surinkimas yra labai paprastas - mikrokompiuteris (1) montuojamas plastikiniame dėkle (2), tada įdedama 8 GB atminties kortelė microSD formatu su programine įranga (3) ir USB Z-Wave tinklo valdiklis (4). atitinkamus lizdus. Išmaniojo namo valdiklis jungiamas prie maitinimo šaltinio per 5V, 2.1A maitinimo adapterį (5) ir USB – mikro-USB laidą (6). Kiekvienas valdiklis turi unikalų identifikavimo numerį, kuris įrašomas konfigūracijos faile pirmą kartą paleidžiant ir yra būtinas norint sąveikauti su debesų išmaniųjų namų paslaugomis.
Išmaniojo namo valdiklio programinę įrangą šio straipsnio autorius sukūrė remdamasis operacine sistema Linux „Raspbian Stretch“. Jį sudaro šie pagrindiniai posistemiai:
- serverio procesas sąveikai su išmaniųjų namų įranga ir debesimi;
- grafinė vartotojo sąsaja valdiklio konfigūracijai ir veikimo parametrams nustatyti;
- duomenų bazė valdiklio konfigūracijai saugoti.

Duomenų bazė išmanusis namų valdiklis yra įdiegtas remiantis įterptuoju DBVS ir yra failas SD kortelėje su sistemos programine įranga. Jis tarnauja kaip valdiklio konfigūracijos saugykla - informacija apie prijungtą įrangą ir dabartinę jos būseną, loginių gamybos taisyklių blokas, taip pat informacija, kurią reikia indeksuoti (pavyzdžiui, vietinio vaizdo archyvo failų pavadinimai). Kai valdiklis paleidžiamas iš naujo, ši informacija išsaugoma, todėl dingus maitinimui galima atkurti valdiklį.
Grafinė sąsaja išmanusis namų valdiklis, sukurtas PHP 7 naudojant mikrorėmą . Už programos paleidimą atsakingas žiniatinklio serveris. , dažnai naudojamas įterptiniuose įrenginiuose dėl gero našumo ir mažų išteklių poreikių.
(spustelėkite ant nuotraukos, kad atidarytumėte ją didesne raiška)
Pagrindinė grafinės sąsajos funkcija – išmaniojo namo įrangos (IP stebėjimo kamerų ir jutiklių) prijungimas prie valdiklio. Žiniatinklio programa nuskaito valdiklio ir prie jo prijungtų įrenginių konfigūraciją ir esamą būseną iš SQLite duomenų bazės. Norėdami pakeisti valdiklio konfigūraciją, jis siunčia valdymo komandas JSON formatu per serverio proceso RESTful API sąsają.
Serverio procesas
Serverio procesas - pagrindinis komponentas, atliekantis visus pagrindinius darbus automatizuojant informacinius procesus, kurie yra protingo namo pagrindas: sensorinių duomenų priėmimas ir apdorojimas, valdymo veiksmų išdavimas priklausomai nuo įterptos logikos. Serverio proceso tikslas – sąveikauti su išmaniojo namo įranga, vykdyti gamybos logines taisykles, priimti ir apdoroti komandas iš grafinės sąsajos ir debesies. Serverio procesas svarstomame išmaniajame namų valdiklyje yra įdiegtas kaip kelių gijų programa, sukurta C++ ir paleista kaip atskira paslauga systemd Operacinė sistema Linux Raspbian.
Pagrindiniai serverio proceso blokai yra šie:
- Pranešimų tvarkyklė;
- IP kameros serveris;
- Z-Wave įrenginių serveris;
- Gamybos loginių taisyklių serveris;
- Valdiklio konfigūracijos duomenų bazė ir loginių taisyklių blokas;
- RESTful API serveris sąveikai su grafine sąsaja;
- MQTT klientas, skirtas bendrauti su debesimi.
Serverio procesų blokai yra realizuojami kaip atskiros gijos, tarp kurių informacija perduodama JSON formato pranešimų (arba šį formatą reprezentuojančių duomenų struktūrų proceso atmintyje) forma.

Pagrindinis serverio proceso komponentas yra pranešimų tvarkyklė, kuri nukreipia JSON pranešimus į visus serverio procesų blokus. JSON pranešimų informacijos laukų tipai ir reikšmės, kurias jie gali priimti, yra išvardyti lentelėje:
prietaiso tipas
protokolas
pranešimo tipas
įrenginio būsena
komanda
kambarys
onvif
sensorData
on
transliacija (įjungta / išjungta)
jutiklis
zwave
komanda
nuo
įrašymas (įjungtas/išjungtas)
efektorius
mqtt
businessLogicRule
transliacija (įjungta / išjungta)
evice (Pridėti / pašalinti)
verslo logika
konfigūracijos duomenys
įrašymas (įjungtas/išjungtas)
Bluetooth
įrenginio būsena
klaida
wiFi
rf
Pavyzdžiui, fotoaparato judesio detektoriaus pranešimas atrodo taip:
{
"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"
}
Gamybos logika
Norėdami gauti arba išsiųsti pranešimą iš dispečerio, serverio proceso blokas užsiprenumeruoja tam tikro tipo pranešimus. Prenumerata yra tokio tipo gamybos loginė taisyklė "Jei tada...", pateikta JSON formatu, ir nuoroda į pranešimų tvarkyklę serverio proceso bloke. Pavyzdžiui, norėdami leisti IP kameros serveriui gauti komandas iš GUI ir debesies, turite pridėti šią taisyklę:
{
"if": {
"and": [{
"equal": {
"deviceId": "1616453d-30cd-44b7-9bf0-************"
}
},
{
"equal": {
"messageType": "command"
}
}
]
},
"then": {
"result": "true"
}
}
Jei sąlygos nurodytos pirmtakas (kairėje pusėje) taisyklės yra teisingos, tada ji yra patenkinta pasekmė (dešinės pusės) taisyklės, o tvarkytojas gauna prieigą prie JSON pranešimo turinio. Antecedentas palaiko loginius operatorius, kurie lygina JSON raktų ir reikšmių poras:
- lygus „lygus“;
- nelygu "ne_lygus";
- mažiau "mažiau";
- daugiau "didesnis";
- mažesnis arba lygus "mažiau_arba_lygus";
- didesnis arba lygus "didesnis_arba_lygus".
Palyginimo rezultatai gali būti susieti vienas su kitu naudojant Būlio algebros operatorius:
- Ir "ir"
- ARBA "arba";
- NE "ne".
Taigi, rašydami operatorius ir operandus lenkiškai, galite sukurti gana sudėtingas sąlygas su daugybe parametrų.
Lygiai toks pat mechanizmas, pagrįstas JSON pranešimais ir gamybos taisyklėmis JSON formatu, naudojamas gamybos loginio serverio bloke žinioms reprezentuoti ir loginėms išvadoms atlikti naudojant jutiminius duomenis iš išmaniųjų namų jutiklių.
Naudodamasis mobiliąja aplikacija vartotojas kuria scenarijus, pagal kuriuos turėtų funkcionuoti išmanieji namai. Pavyzdžiui: „Jei suveikia priekinių durų atidarymo jutiklis, įjunkite šviesą koridoriuje“. Programa iš duomenų bazės nuskaito jutiklių (atidarymo jutiklio) ir pavarų (išmaniojo lizdo arba išmaniosios lempos) identifikatorius ir JSON formatu sugeneruoja loginę taisyklę, kuri siunčiama į išmaniojo namo valdiklį. Šis mechanizmas bus išsamiau aptartas trečiajame mūsų serijos straipsnyje, kuriame kalbėsime apie kliento programą, skirtą išmaniesiems namams valdyti.
Aukščiau aptartas gamybos logikos mechanizmas įgyvendinamas naudojant biblioteką - SAX analizatorius, skirtas JSON formatui C++. Nuoseklus gamybos taisyklių masyvo skaitymas ir analizavimas leidžia lengvai įdiegti duomenų palyginimo funkciją ankstesnėse dalyse:
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);
}
}
}
Čia pFact — struktūra, kurioje yra JSON pranešimo raktų ir reikšmių poros, m_Taisyklės — gamybos taisyklių masyvas. Įeinančio pranešimo ir gamybos taisyklės palyginimas atliekamas funkcijoje Reader.Parse(ruleStream, ruleHandler)Kur ruleHandler yra objektas, kuriame yra Būlio ir palyginimo operatorių logika. sRuleId — unikalus taisyklių identifikatorius, kurio dėka galima saugoti ir redaguoti taisykles išmaniojo namo valdiklio duomenų bazėje. m_pVeiksmai — masyvas su loginės išvados rezultatais: JSON pranešimai, turintys pasekmes iš taisyklių bazės ir siunčiami toliau į pranešimų tvarkyklę, kad abonentų gijos galėtų juos apdoroti.
RapidJSON našumas yra panašus į funkciją strlen(), o minimalūs sistemos išteklių reikalavimai leidžia naudoti šią biblioteką įterptuosiuose įrenginiuose. Pranešimų ir loginių taisyklių naudojimas JSON formatu leidžia įdiegti lanksčią informacijos mainų sistemą tarp visų išmaniojo namo valdiklio komponentų.
Z-Wave jutikliai ir pavaros
Pagrindinis išmaniojo namo privalumas yra tai, kad jis gali savarankiškai matuoti įvairius išorinės aplinkos parametrus ir atlikti naudingas funkcijas, priklausomai nuo situacijos. Norėdami tai padaryti, jutikliai ir pavaros yra prijungti prie išmaniojo namo valdiklio. Dabartinėje versijoje tai yra belaidžiai įrenginiai, veikiantys naudojant protokolą specialiai paskirtu dažniu 869 MHz Už Rusiją. Kad veiktų, jie yra sujungti į tinklinį tinklą, kuriame yra signalo kartotuvai, siekiant padidinti aprėpties zoną. Įrenginiai taip pat turi specialų energijos taupymo režimą – didžiąją laiko dalį praleidžia miego režimu ir informaciją siunčia tik pasikeitus jų būsenai, o tai gali gerokai pailginti įmontuoto akumuliatoriaus tarnavimo laiką.

Dabar rinkoje galite rasti gana daug skirtingų Z-Wave įrenginių. Pažvelkime į kelis pavyzdžius:
- Išmaniuoju lizdu Zipato PAN16 galima išmatuoti šiuos parametrus: elektros suvartojimą (kWh), galią (W), įtampą (V) ir srovę (A) elektros tinkle. Jame taip pat yra įmontuotas jungiklis, kuriuo galite valdyti prijungtą elektros prietaisą;
- Neo Coolcam nuotėkio jutiklis aptinka išsiliejusio skysčio buvimą uždarydamas nuotolinio zondo kontaktus;
- Zipato PH-PSG01 dūmų jutiklis suveikia, kai dūmų dalelės patenka į dujų analizatoriaus kamerą;
- Neo Coolcam judesio jutiklis analizuoja žmogaus kūno infraraudonąją spinduliuotę. Papildomai yra šviesos jutiklis (Lx);
- Multisensor Philio PST02-A matuoja temperatūrą (°C), šviesą (%), durų atidarymą, žmogaus buvimą patalpoje;
- Z-Wave USB Stick ZME E UZB1 tinklo valdiklis, prie kurio prijungiami jutikliai.
Labai svarbu, kad įrenginiai ir valdiklis veiktų tuo pačiu dažniu, kitaip prisijungimo momentu jie vienas kito tiesiog nematys. Prie vieno Z-Wave tinklo valdiklio galima prijungti iki 232 įrenginių, kurių pilnai pakanka butui ar kaimo namui. Norint išplėsti tinklo aprėpties zoną patalpose, išmanųjį lizdą galima naudoti kaip signalo kartotuvą.

Išmaniojo namų valdiklio serverio procese, aptartame ankstesnėje pastraipoje, Z-Wave serveris yra atsakingas už sąveiką su Z-Wave įrenginiais. Ji naudoja biblioteką, kad gautų informaciją iš jutiklių C++, kuri suteikia sąsają sąveikai su Z-Wave tinklo USB valdikliu ir veikia su įvairiais jutikliais ir pavaromis. Jutiklio išmatuotą aplinkos parametro reikšmę Z-Wave serveris įrašo JSON pranešimo forma:
{
"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"
}
Tada jis persiunčiamas į serverio proceso pranešimų tvarkyklę, kad abonentų gijos galėtų jį gauti. Pagrindinis abonentas yra gamybos loginis serveris, atitinkantis pranešimo lauko reikšmes loginių taisyklių anketose. Išvadų rezultatai su valdymo komandomis siunčiami atgal į pranešimų tvarkyklę, o iš ten patenka į Z-Wave serverį, kuris juos iššifruoja ir siunčia į Z-Wave tinklo USB valdiklį. Tada jie patenka į pavarą, kuri keičia aplinkos objektų būklę, o išmanusis namas taip atlieka naudingą darbą.
(spustelėkite ant nuotraukos, kad atidarytumėte ją didesne raiška)
Z-Wave įrenginių prijungimas atliekamas išmaniojo namo valdiklio grafinėje sąsajoje. Norėdami tai padaryti, eikite į puslapį su įrenginių sąrašu ir spustelėkite mygtuką „Pridėti“. Pridėti komanda per RESTful API sąsają patenka į serverio procesą, o tada pranešimų tvarkyklė siunčia ją į Z-Wave serverį, o tai įjungia Z-Wave tinklo USB valdiklį į specialų režimą įrenginių pridėjimui. Tada „Z-Wave“ įrenginyje turite greitai paspausti aptarnavimo mygtuką (3 paspaudimai per 1,5 sekundės). USB valdiklis prijungia įrenginį prie tinklo ir siunčia informaciją apie jį į Z-Wave serverį. Tai savo ruožtu sukuria naują įrašą SQLite duomenų bazėje su naujojo įrenginio parametrais. Po nurodyto laiko intervalo grafinė sąsaja grįžta į Z-Wave įrenginių sąrašo puslapį, nuskaito informaciją iš duomenų bazės ir sąraše parodo naują įrenginį. Kiekvienas įrenginys gauna savo unikalų identifikatorių, kuris naudojamas gamybos išvadų taisyklėse ir dirbant debesyje. Šio algoritmo veikimas parodytas UML diagramoje:
(spustelėkite ant nuotraukos, kad atidarytumėte ją didesne raiška)
IP kamerų prijungimas
Šiame straipsnyje aptariama debesų išmaniųjų namų sistema yra debesų vaizdo stebėjimo sistemos, taip pat autoriaus sukurta, atnaujinimas, kuris rinkoje yra jau kelerius metus ir turi daug instaliacijų Rusijoje.
Vaizdo stebėjimo debesyje sistemose viena iš opiausių problemų yra ribotas įrangos, su kuria galima atlikti integraciją, pasirinkimas. Vaizdo kameros viduje įdiegta programinė įranga, atsakinga už prisijungimą prie debesies, kuri iš karto kelia rimtus reikalavimus jos techninei įrangai – procesoriui ir laisvos atminties kiekiui. Tai daugiausia paaiškina didesnę debesų vaizdo stebėjimo kamerų kainą, palyginti su įprastomis IP kameromis. Be to, norint gauti prieigą prie kamerų failų sistemos ir visų reikalingų kūrimo priemonių, reikalingas ilgas derybų etapas su vaizdo stebėjimo kamerų gamybos įmonėmis.

Kita vertus, visos šiuolaikinės IP kameros turi standartinius sąveikos su kita įranga (ypač vaizdo registratoriais) protokolus. Taigi, naudojant atskirą valdiklį, kuris jungiasi per standartinį protokolą ir transliuoja vaizdo srautus iš IP kamerų į debesį, suteikia didelių konkurencinių pranašumų debesų vaizdo stebėjimo sistemoms. Be to, jei klientas jau įdiegė vaizdo stebėjimo sistemą, pagrįstą paprastomis IP kameromis, tada ją galima išplėsti ir paversti visaverčiu debesies išmaniuoju namu.
Populiariausias IP vaizdo stebėjimo sistemų protokolas, kurį dabar palaiko visi be išimties IP kamerų gamintojai , kurios specifikacijos yra žiniatinklio paslaugų aprašymo kalba . Priemonių naudojimas iš įrankių rinkinio Galima sugeneruoti šaltinio kodą paslaugoms, kurios veikia su IP kameromis:
$ 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
Dėl to mes gauname C++ antraštės „*.h“ ir šaltinio „*.cpp“ failų rinkinį, kurį galima įdėti tiesiai į programą arba atskirą biblioteką ir sukompiliuoti naudojant GCC kompiliatorių. Dėl daugybės funkcijų kodas yra didelis ir reikalauja papildomo optimizavimo. Raspberry Pi 3 modelio B+ mikrokompiuteris turi pakankamai našumo šiam kodui vykdyti, tačiau jei reikia kodą perkelti į kitą platformą, būtina pasirinkti tinkamą procesoriaus architektūrą ir sistemos resursus.
IP kameros, palaikančios ONVIF standartą, kai veikia vietiniame tinkle, yra prijungiamos prie specialios daugialypės siuntimo grupės su adresu 239.255.255.250. Yra protokolas , kuri leidžia automatizuoti įrenginių paiešką vietiniame tinkle.
Išmaniojo namo valdiklio grafinėje sąsajoje PHP įdiegta IP kamerų paieškos funkcija, kuri yra labai patogu bendraujant su interneto paslaugomis per XML pranešimus. Renkantis meniu elementus Įrenginiai > IP kameros > Nuskaitymas Paleidžiamas IP kamerų paieškos algoritmas, rodantis rezultatą lentelės pavidalu:
(spustelėkite ant nuotraukos, kad atidarytumėte ją didesne raiška)
Pridėję kamerą prie valdiklio, galite nurodyti nustatymus, pagal kuriuos ji sąveikaus su debesimi. Taip pat šiame etape jam automatiškai priskiriamas unikalus įrenginio identifikatorius, pagal kurį vėliau jį galima lengvai atpažinti debesyje.

Tada JSON formatu sugeneruojamas pranešimas su visais pridėtos kameros parametrais ir siunčiamas į išmaniojo namo valdiklio serverio procesą per komandą RESTful API, kur kameros parametrai iškoduojami ir išsaugomi vidinėje SQLite duomenų bazėje ir yra taip pat naudojamas paleisti šias apdorojimo gijas:
- RTSP ryšio užmezgimas vaizdo ir garso srautams priimti;
- garso perkodavimas iš G.711 mu-Law, G.711 A-Law, G.723 ir kt. formatų. į AAC formatą;
- vaizdo srautų H.264 formatu ir garso AAC formatu perkodavimas į FLV konteinerį ir perdavimas į debesį RTMP protokolu;
- ryšio su IP kameros judesio detektoriaus galiniu tašku užmezgimas per ONVIF protokolą ir periodinis jo apklausa;
- periodiškai generuoti miniatiūros peržiūros vaizdą ir siųsti jį į debesį per MQTT protokolą;
- vietinis vaizdo ir garso srautų įrašymas atskirų failų pavidalu MP4 formatu į išmaniojo namų valdiklio SD arba Flash kortelę.

Norėdami užmegzti ryšį su kameromis, perkoduoti, apdoroti ir įrašyti vaizdo srautus serverio procese, naudojamos bibliotekos funkcijos 4.1.0.
Veikimo testavimo eksperimente prie valdiklio buvo prijungtos 3 kameros:
- HiWatch DS-I114W (raiška – 720p, glaudinimo formatas – H.264, bitų sparta – 1 Mb/s, garsas G.711 mu-Teisė);
- Mikroskaitmeninis MDC-M6290FTD-1 (raiška – 1080p, glaudinimo formatas – H.264, bitų sparta – 1 Mb/s, nėra garso);
- Dahua DH-IPC-HDW4231EMP-AS-0360B (skyra – 1080p, glaudinimo formatas – H.264, bitų sparta – 1.5 Mb/s, AAC garsas).

Visi trys srautai vienu metu buvo išvesti į debesį, garso perkodavimas buvo atliktas tik iš vienos kameros, o vietinio archyvo įrašymas buvo išjungtas. CPU apkrova buvo maždaug 5%, RAM naudojimas buvo 32 MB (vienam procesui), 56 MB (iš viso įskaitant OS).
Taigi, prie išmaniojo namo valdiklio galima prijungti maždaug 20–30 kamerų (priklausomai nuo raiškos ir bitų spartos), kurių pakanka trijų aukštų namo ar nedidelio sandėlio vaizdo stebėjimo sistemai. Užduotims, reikalaujančioms didesnio našumo, galima naudoti nešiojamąjį kompiuterį su kelių branduolių „Intel“ procesoriumi ir OS. Linux Debian Sarge. Šiuo metu valdiklis yra bandomasis, o našumo duomenys bus atnaujinti.
Sąveika su debesimi
Debesyje veikiantys išmanieji namai saugo vartotojo duomenis (vaizdo įrašų ir jutiklių matavimus) debesyje. Debesų saugyklos architektūra bus išsamiau aptarta kitame mūsų serijos straipsnyje. Dabar pakalbėkime apie sąsają, skirtą informaciniams pranešimams perduoti iš išmaniojo namų valdiklio į debesį.
Prijungtų įrenginių būsenos ir jutiklių matavimai perduodami protokolu , kuris dėl savo paprastumo ir energetinio efektyvumo dažnai naudojamas daiktų interneto projektuose. MQTT naudoja kliento-serverio modelį, kai klientai prenumeruoja tam tikras brokerio temas ir skelbia savo pranešimus. Brokeris siunčia pranešimus visiems abonentams pagal taisykles, nustatytas QoS (paslaugų kokybės) lygiu:
- QoS 0 – daugiausiai vieną kartą (be pristatymo garantijos);
- QoS 1 - bent vieną kartą (su pristatymo patvirtinimu);
- QoS 2 – lygiai vieną kartą (su papildomu pristatymo patvirtinimu).
Mūsų atveju mes naudojame . Temos pavadinimas yra unikalus išmaniojo namų valdiklio identifikatorius. MQTT klientas, esantis serverio procese, prenumeruoja šią temą ir verčia į ją iš pranešimų tvarkyklės gaunamus JSON pranešimus. Ir atvirkščiai, pranešimus iš MQTT tarpininko jis persiunčia pranešimų tvarkytuvui, kuris vėliau juos multipleksuoja savo abonentams serverio procese:

Pranešimams apie išmaniojo namo valdiklio būseną perduoti naudojamas išsaugotų pranešimų mechanizmas MQTT protokolas. Tai leidžia teisingai stebėti pakartotinių sujungimų laiką dingus elektrai.
MQTT klientas buvo sukurtas remiantis bibliotekos įgyvendinimu C++ kalba.
H.264 + AAC medijos srautai siunčiami į debesį per RTMP protokolą, kur medijos serverių grupė yra atsakinga už jų apdorojimą ir saugojimą. Norėdami optimaliai paskirstyti apkrovą klasteryje ir pasirinkti mažiausiai apkrautą medijos serverį, išmanusis namų valdiklis pateikia išankstinę užklausą debesies apkrovos balansuotojui ir tik po to siunčia medijos srautą.
išvada
Straipsnyje buvo nagrinėjamas vienas konkretus išmaniojo namo valdiklio, paremto Raspberry Pi 3 B+ mikrokompiuteriu, įgyvendinimas, kuris gali priimti, apdoroti informaciją ir valdyti įrangą per Z-Wave protokolą, sąveikauti su IP kameromis per ONVIF protokolą, taip pat keistis duomenimis ir komandas su debesies paslauga per MQTT ir RTMP protokolus. Gamybos loginis variklis buvo sukurtas remiantis loginių taisyklių ir faktų, pateiktų JSON formatu, palyginimu.
Išmaniojo namo valdiklis šiuo metu bandomas keliose Maskvos ir Maskvos srities vietose.
Kita valdiklio versija planuoja prijungti kitų tipų įrenginius (RF, Bluetooth, WiFi, laidinius). Vartotojų patogumui jutiklių ir IP kamerų prijungimo procedūra bus perkelta į mobiliąją aplikaciją. Taip pat yra idėjų, kaip optimizuoti serverio proceso kodą ir perkelti programinę įrangą į operacinę sistemą . Tai leis sutaupyti už atskirą valdiklį ir perkelti išmaniojo namo funkcionalumą į įprastą buitinį maršrutizatorių.
Šaltinis: www.habr.com
