Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

MÅ«sdienās, pateicoties straujajai mikroelektronikas, sakaru kanālu, interneta tehnoloÄ£iju un mākslÄ«gā intelekta attÄ«stÄ«bai, viedās mājas tēma kļūst arvien aktuālāka. KopÅ” akmens laikmeta cilvēku mājokļi ir piedzÄ«vojuÅ”i bÅ«tiskas izmaiņas, un industriālās revolÅ«cijas 4.0 un lietu interneta laikmetā tas ir kļuvis ērts, funkcionāls un droÅ”s. TirgÅ« nāk risinājumi, kas pārvērÅ” dzÄ«vokli vai lauku māju par sarežģītām informācijas sistēmām, kuras tiek vadÄ«tas no jebkuras vietas pasaulē, izmantojot viedtālruni. Turklāt cilvēka un maŔīnas mijiedarbÄ«bai vairs nav vajadzÄ«gas programmÄ“Å”anas valodu zināŔanas - pateicoties runas atpazÄ«Å”anas un sintēzes algoritmiem, cilvēks runā ar viedo māju savā dzimtajā valodā.

Dažas Å”obrÄ«d tirgÅ« esoŔās viedās mājas sistēmas ir loÄ£iska mākoņu videonovēroÅ”anas sistēmu attÄ«stÄ«ba, kuru izstrādātāji saprata nepiecieÅ”amÄ«bu pēc visaptveroÅ”a risinājuma ne tikai uzraudzÄ«bai, bet arÄ« attālinātu objektu pārvaldÄ«Å”anai.

JÅ«su uzmanÄ«bai piedāvājam trÄ«s rakstu sēriju, kurā tiks pastāstÄ«ts par visām galvenajām mākoņa viedās mājas sistēmas sastāvdaļām, kuras autors ir personÄ«gi izstrādājis un nodevis ekspluatācijā. Pirmais raksts ir veltÄ«ts viedās mājas iekÅ”ienē uzstādÄ«tajām termināļa klienta iekārtām, otrais ā€“ mākoņkrātuves un datu apstrādes sistēmas arhitektÅ«rai un visbeidzot, treÅ”ais ā€“ klienta lietojumprogrammai sistēmas pārvaldÄ«Å”anai mobilajās un stacionārajās ierÄ«cēs.

Viedās mājas aprīkojums

Vispirms parunāsim par to, kā no parasta dzīvokļa, vasarnīcas vai kotedžas izveidot gudru māju. Lai to izdarītu, parasti mājās ir jānovieto Ŕāds aprīkojums:

  1. sensori, kas mēra dažādus vides parametrus;
  2. izpildmehānismi, kas iedarbojas uz ārējiem objektiem;
  3. kontrolieris, kas veic aprēķinus saskaņā ar sensoru mērījumiem un iegulto loģiku un izdod komandas izpildmehānismiem.

Nākamajā attēlā parādÄ«ta viedās mājas diagramma, uz kuras ir sensori Å«dens noplÅ«dei (1) vannas istabā, temperatÅ«ras (2) un apgaismojuma (3) sensori guļamistabā, viedā kontaktligzda (4) virtuvē un videonovēroÅ”anas kamera (5) gaitenÄ«.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

PaÅ”laik plaÅ”i tiek izmantoti bezvadu sensori, kas darbojas, izmantojot RF433, Z-Wave, ZigBee, Bluetooth un WiFi protokolus. To galvenās priekÅ”rocÄ«bas ir uzstādÄ«Å”anas un lietoÅ”anas vienkārŔība, kā arÄ« zemās izmaksas un uzticamÄ«ba, jo Ražotāji cenÅ”as ieviest savas ierÄ«ces masu tirgÅ« un padarÄ«t tās pieejamas vidusmēra lietotājam.

Sensori un izpildmehānismi, kā likums, caur bezvadu saskarni ir savienoti ar viedās mājas kontrolieri (6) - specializētu mikrodatoru, kas apvieno visas Ŕīs ierÄ«ces vienā tÄ«klā un kontrolē tās.

Tomēr daži risinājumi var vienlaikus apvienot sensoru, izpildmehānismu un kontrolieri. Piemēram, viedo spraudni var ieprogrammēt, lai tas ieslēgtos vai izslēgtos saskaņā ar grafiku, un mākoņa videonovēroÅ”anas kamera var ierakstÄ«t video, pamatojoties uz kustÄ«bas detektora signālu. VienkārŔākajos gadÄ«jumos var iztikt bez atseviŔķa kontroliera, taču, lai izveidotu elastÄ«gu sistēmu ar daudziem scenārijiem, tas ir nepiecieÅ”ams.

Lai pieslēgtu viedās mājas kontrolieri globālajam tÄ«klam, var izmantot parasto interneta marÅ”rutētāju (7), kas jau sen ir kļuvis par ierastu sadzÄ«ves tehniku ā€‹ā€‹jebkurā mājā. Å eit ir vēl viens arguments par labu viedās mājas kontrollerim ā€“ ja zÅ«d savienojums ar internetu, viedā māja turpinās darboties kā parasti, pateicoties kontrollera iekÅ”ienē saglabātajam loÄ£ikas blokam, nevis mākoņpakalpojumā.

Viedās mājas kontrolieris

Å ajā rakstā aplÅ«kotais mākoņa viedās mājas sistēmas kontrolieris ir izstrādāts, pamatojoties uz vienas plates mikrodatoru Raspberry Pi 3 modelis B+, kas tika izlaista 2018. gada martā un kurā ir pietiekami resursi un veiktspēja viedās mājas uzdevumu veikÅ”anai. Tas ietver četrkodolu Cortex-A53 procesoru, kura pamatā ir 64 bitu ARMv8-A arhitektÅ«ra ar takts frekvenci 1.4 GHz, kā arÄ« 1 GB RAM, Wi-Fi 802.11ac, Bluetooth 4.2 un gigabitu Ethernet adapteri, kas darbojas, izmantojot USB 2.0. .

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Kontroliera salikÅ”ana ir ļoti vienkārÅ”a - mikrodators (1) tiek ievietots plastmasas korpusā (2), pēc tam tiek uzstādÄ«ta 8 GB atmiņas karte microSD formātā ar programmatÅ«ru (3) un USB Z-Wave tÄ«kla kontrolleris (4). atbilstoŔās slots. Viedās mājas kontrolieris ir pievienots baroÅ”anas avotam, izmantojot 5V, 2.1A strāvas adapteri (5) un USB - mikro-USB kabeli (6). Katram kontrollerim ir unikāls identifikācijas numurs, kas tiek ierakstÄ«ts konfigurācijas failā pirmās palaiÅ”anas brÄ«dÄ« un ir nepiecieÅ”ams, lai mijiedarbotos ar mākoņa viedās mājas pakalpojumiem.

Viedās mājas kontrollera programmatÅ«ru izstrādāja Ŕī raksta autors, pamatojoties uz operētājsistēmu Linux Raspbian Stretch. Tas sastāv no Ŕādām galvenajām apakÅ”sistēmām:

  • servera process mijiedarbÄ«bai ar viedās mājas aprÄ«kojumu un mākoni;
  • grafiskā lietotāja saskarne kontrollera konfigurācijas un darbÄ«bas parametru iestatÄ«Å”anai;
  • datu bāze kontroliera konfigurācijas glabāŔanai.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Datu bāze viedās mājas kontrolieris ir ieviests, pamatojoties uz iegulto DBVS SQLite un ir fails SD kartē ar sistēmas programmatÅ«ru. Tas kalpo kā kontrollera konfigurācijas krātuve - informācija par pievienoto aprÄ«kojumu un tā paÅ”reizējo stāvokli, loÄ£isko ražoÅ”anas noteikumu bloks, kā arÄ« informācija, kurai nepiecieÅ”ama indeksācija (piemēram, lokālā video arhÄ«va failu nosaukumi). Kad kontrolieris tiek pārstartēts, Ŕī informācija tiek saglabāta, ļaujot atjaunot kontrolieri strāvas padeves pārtraukuma gadÄ«jumā.

Grafiskais interfeiss viedās mājas kontrolieris, kas izstrādāts PHP 7, izmantojot mikroietvaru slaids. TÄ«mekļa serveris ir atbildÄ«gs par lietojumprogrammas palaiÅ”anu. lighttpd, ko bieži izmanto iegultās ierÄ«cēs labās veiktspējas un zemo resursu prasÄ«bu dēļ.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori
(noklikŔķiniet uz attēla, lai to atvērtu augstākā izŔķirtspējā)

Grafiskā interfeisa galvenā funkcija ir viedās mājas aprÄ«kojuma (IP novēroÅ”anas kameru un sensoru) pieslēgÅ”ana kontrollerim. TÄ«mekļa lietojumprogramma no SQLite datu bāzes nolasa kontrollera un tam pievienoto ierīču konfigurāciju un paÅ”reizējo stāvokli. Lai mainÄ«tu kontrollera konfigurāciju, tas nosÅ«ta vadÄ«bas komandas JSON formātā, izmantojot servera procesa RESTful API saskarni.

Servera process

Servera process - galvenā sastāvdaļa, kas veic visu galveno darbu pie informācijas procesu automatizÄ“Å”anas, kas veido viedās mājas pamatu: sensoro datu saņemÅ”ana un apstrāde, kontroles darbÄ«bu izsniegÅ”ana atkarÄ«bā no iegultās loÄ£ikas. Servera procesa mērÄ·is ir mijiedarboties ar viedo mājas aprÄ«kojumu, izpildÄ«t ražoÅ”anas loÄ£iskos noteikumus, saņemt un apstrādāt komandas no grafiskā interfeisa un mākoņa. Servera process aplÅ«kojamajā viedās mājas kontrollerÄ« ir ieviests kā daudzpavedienu lietojumprogramma, kas izstrādāta C++ valodā un tiek palaists kā atseviŔķs pakalpojums systemd operētājsistēma Linux Raspbian.

Galvenie servera procesa bloki ir:

  1. Ziņojumu pārvaldnieks;
  2. IP kameras serveris;
  3. Z-Wave ierīces serveris;
  4. RažoŔanas loģisko noteikumu serveris;
  5. Kontroliera konfigurācijas datu bāze un loģisko noteikumu bloks;
  6. RESTful API serveris mijiedarbībai ar grafisko interfeisu;
  7. MQTT klients mijiedarbībai ar mākoni.

Servera procesu bloki tiek realizēti kā atseviŔķi pavedieni, starp kuriem informācija tiek pārsÅ«tÄ«ta ziņojumu veidā JSON formātā (vai datu struktÅ«ras, kas attēlo Å”o formātu procesa atmiņā).

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Servera procesa galvenā sastāvdaļa ir ziņojumu pārvaldnieks, kas marÅ”rutē JSON ziņojumus uz visiem servera procesu blokiem. JSON ziņojumu informācijas lauku veidi un vērtÄ«bas, ko tie var pieņemt, ir norādÄ«ti tabulā:

ierīces veids
protokols
ziņojuma veids
deviceState
komanda

kamera
onvif
sensorData
on
straumÄ“Å”ana (ieslēgta/izslēgta)

devējs
zwave
komanda
no
ierakstÄ«Å”ana (ieslēgts/izslēgts)

efektors
mqtt
businessLogicRule
straumÄ“Å”ana (ieslēgta/izslēgta)
evice (pievienot/noņemt)

biznesa loģika
konfigurācijas dati
ierakstÄ«Å”ana (ieslēgts/izslēgts)

Bluetooth
deviceState
kļūda

bezvadu internets

rf

Piemēram, ziņojums no kameras kustÄ«bas detektora izskatās Ŕādi:

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

RažoŔanas loģika

Lai saņemtu vai nosÅ«tÄ«tu ziņojumu no dispečera, servera procesa bloks abonē noteikta veida ziņojumus. AbonÄ“Å”ana ir Ŕāda veida ražoÅ”anas loÄ£iskais noteikums "Ja tad...", kas tiek parādÄ«ts JSON formātā, un saite uz ziņojumu apstrādātāju servera procesa blokā. Piemēram, lai ļautu IP kameras serverim saņemt komandas no GUI un mākoņa, jums jāpievieno Ŕāds noteikums:

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

Ja nosacÄ«jumi, kas norādÄ«ti apakÅ”punktā priekÅ”tecis (kreisajā pusē) noteikumi ir patiesi, tad tas ir apmierināts izrietoÅ”i (labās puses) noteikumi, un apstrādātājs iegÅ«st piekļuvi JSON ziņojuma pamattekstam. PriekÅ”tecis atbalsta loÄ£iskos operatorus, kas salÄ«dzina JSON atslēgu un vērtÄ«bu pārus:

  1. vienāds ar "vienāds";
  2. nav vienāds ar "not_equal";
  3. mazāk "mazāk";
  4. vairāk "lielāks";
  5. mazāks par vai vienāds ar "mazāk_vai_vienāds";
  6. lielāks par vai vienāds ar "lielāks_vai_vienāds".

SalÄ«dzināŔanas rezultātus var savstarpēji saistÄ«t, izmantojot BÅ«la algebras operatorus:

  1. Un "un"
  2. VAI "vai";
  3. NAV "nē".

Tādējādi, rakstot operatorus un operandus poļu apzīmējumos, var izveidot diezgan sarežģītus nosacījumus ar lielu skaitu parametru.

TieÅ”i tāds pats mehānisms, kura pamatā ir JSON ziņojumi un ražoÅ”anas noteikumi JSON formātā, tiek izmantots ražoÅ”anas loÄ£ikas servera blokā, lai attēlotu zināŔanas un veiktu loÄ£iskus secinājumus, izmantojot sensoros datus no viedās mājas sensoriem.

Izmantojot mobilo aplikāciju, lietotājs veido scenārijus, pēc kuriem jāfunkcionē viedajai mājai. Piemēram: ā€œJa iedarbojas priekŔējo durvju atvērÅ”anas sensors, ieslēdziet gaismu gaitenÄ«ā€. Lietojumprogramma nolasa no datu bāzes sensoru (atvērÅ”anas sensora) un izpildmehānismu (viedā ligzda vai viedā lampa) identifikatorus un Ä£enerē loÄ£isku noteikumu JSON formātā, kas tiek nosÅ«tÄ«ts uz viedās mājas kontrolieri. Å is mehānisms tiks apspriests sÄ«kāk mÅ«su sērijas treÅ”ajā rakstā, kur mēs runāsim par klienta lietojumprogrammu viedās mājas pārvaldÄ«Å”anai.

IepriekÅ” apskatÄ«tais ražoÅ”anas loÄ£ikas mehānisms tiek Ä«stenots, izmantojot bibliotēku RapidJSON ā€” SAX parsētājs JSON formātam programmā C++. RažoÅ”anas noteikumu masÄ«va secÄ«ga lasÄ«Å”ana un parsÄ“Å”ana ļauj viegli ieviest datu salÄ«dzināŔanas funkciju priekÅ”teču ietvaros:

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

Å eit pFact ā€” struktÅ«ra, kas satur atslēgu un vērtÄ«bu pārus no JSON ziņojuma, m_Noteikumi ā€” ražoÅ”anas noteikumu virkņu masÄ«vs. Funkcijā tiek veikts ienākoŔā ziņojuma un ražoÅ”anas noteikuma salÄ«dzinājums Reader.Parse(ruleStream, ruleHandler)Kur ruleHandler ir objekts, kas satur BÅ«la un salÄ«dzināŔanas operatoru loÄ£iku. sRuleId ā€” unikāls noteikumu identifikators, pateicoties kuram ir iespējams saglabāt un rediģēt noteikumus viedās mājas kontrollera datubāzē. m_pActions ā€” masÄ«vs ar loÄ£isko secinājumu rezultātiem: JSON ziņojumi, kas satur kārtulu bāzes sekas un tālāk tiek nosÅ«tÄ«ti ziņojumu pārvaldniekam, lai abonentu pavedieni varētu tos apstrādāt.

RapidJSON veiktspēja ir salÄ«dzināma ar funkciju strlen(), un minimālās sistēmas resursu prasÄ«bas ļauj izmantot Å”o bibliotēku iegultās ierÄ«cēs. Ziņojumu un loÄ£isko noteikumu izmantoÅ”ana JSON formātā ļauj ieviest elastÄ«gu informācijas apmaiņas sistēmu starp visiem viedās mājas kontrollera komponentiem.

Z-Wave sensori un izpildmehānismi

Viedās mājas galvenā priekÅ”rocÄ«ba ir tā, ka tā var patstāvÄ«gi izmērÄ«t dažādus ārējās vides parametrus un veikt noderÄ«gas funkcijas atkarÄ«bā no situācijas. Lai to izdarÄ«tu, sensori un izpildmehānismi ir savienoti ar viedās mājas kontrolieri. PaÅ”reizējā versijā tās ir bezvadu ierÄ«ces, kas darbojas, izmantojot protokolu Z-vilnis Ä«paÅ”i pieŔķirtā frekvencē 869 MHz Par Krieviju. Lai darbotos, tie ir apvienoti tÄ«kla tÄ«klā, kurā ir signāla atkārtotāji, lai palielinātu pārklājuma zonu. IerÄ«cēm ir arÄ« Ä«paÅ”s enerÄ£ijas taupÄ«Å”anas režīms ā€“ tās lielāko daļu laika pavada miega režīmā un informāciju sÅ«ta tikai tad, kad mainās to stāvoklis, kas var bÅ«tiski pagarināt iebÅ«vētā akumulatora darbÄ«bas laiku.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Tagad tirgū var atrast diezgan lielu skaitu dažādu Z-Wave ierīču. Apskatīsim dažus piemērus:

  1. Zipato PAN16 viedligzda var izmērÄ«t Ŕādus parametrus: elektroenerÄ£ijas patēriņŔ (kWh), jauda (W), spriegums (V) un strāva (A) elektrotÄ«klā. Tajā ir arÄ« iebÅ«vēts slēdzis, ar kuru var vadÄ«t pieslēgto elektroierÄ«ci;
  2. Neo Coolcam noplūdes sensors nosaka izlijuŔa Ŕķidruma klātbūtni, aizverot tālvadības zondes kontaktus;
  3. Zipato PH-PSG01 dūmu sensors tiek iedarbināts, kad dūmu daļiņas nonāk gāzes analizatora kamerā;
  4. Neo Coolcam kustības sensors analizē cilvēka ķermeņa infrasarkano starojumu. Papildus ir gaismas sensors (Lx);
  5. Multisensors Philio PST02-A mēra temperatÅ«ru (Ā°C), gaismu (%), durvju atvērÅ”anu, cilvēka klātbÅ«tni telpā;
  6. Z-Wave USB Stick ZME E UZB1 tīkla kontrolleris, kuram pievienoti sensori.

Ir ļoti svarÄ«gi, lai ierÄ«ces un kontrolieris darbotos vienā frekvencē, pretējā gadÄ«jumā savienojuma brÄ«dÄ« tie vienkārÅ”i neredzēs viens otru. Vienam Z-Wave tÄ«kla kontrollerim var pieslēgt lÄ«dz 232 ierÄ«cēm, kas ir pilnÄ«gi pietiekami dzÄ«voklim vai lauku mājai. Lai paplaÅ”inātu tÄ«kla pārklājuma zonu iekÅ”telpās, viedligzdu var izmantot kā signāla atkārtotāju.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Viedās mājas kontrollera servera procesā, kas tika apspriests iepriekŔējā punktā, Z-Wave serveris ir atbildÄ«gs par mijiedarbÄ«bu ar Z-Wave ierÄ«cēm. Tas izmanto bibliotēku, lai saņemtu informāciju no sensoriem OpenZWave valodā C++, kas nodroÅ”ina saskarni mijiedarbÄ«bai ar Z-Wave tÄ«kla USB kontrolleri un darbojas ar dažādiem sensoriem un izpildmehānismiem. Sensora izmērÄ«tā vides parametra vērtÄ«bu Z-Wave serveris reÄ£istrē JSON ziņojuma veidā:

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

Pēc tam tas tiek pārsÅ«tÄ«ts uz servera procesa ziņojumu pārvaldnieku, lai abonentu pavedieni to varētu saņemt. Galvenais abonents ir ražoÅ”anas loÄ£ikas serveris, kas atbilst ziņojuma lauku vērtÄ«bām loÄ£ikas noteikumu priekÅ”tecēs. Secinājumu rezultāti, kas satur vadÄ«bas komandas, tiek nosÅ«tÄ«ti atpakaļ uz ziņojumu pārvaldnieku un no turienes pāriet uz Z-Wave serveri, kas tos atkodē un nosÅ«ta uz Z-Wave tÄ«kla USB kontrolieri. Tad tie nonāk pievadā, kas maina vides objektu stāvokli, un viedā māja tādējādi veic noderÄ«gu darbu.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori
(noklikŔķiniet uz attēla, lai to atvērtu augstākā izŔķirtspējā)

Z-Wave ierīču pievienoÅ”ana tiek veikta viedās mājas kontrollera grafiskajā saskarnē. Lai to izdarÄ«tu, dodieties uz lapu ar ierīču sarakstu un noklikŔķiniet uz pogas "Pievienot". PievienoÅ”anas komanda, izmantojot RESTful API saskarni, tiek ievadÄ«ta servera procesā, un pēc tam ziņojumu pārvaldnieks to nosÅ«ta Z-Wave serverim, kas Z-Wave tÄ«kla USB kontrolieri pārslēdz Ä«paŔā režīmā ierīču pievienoÅ”anai. Pēc tam Z-Wave ierÄ«cē ātri jānospiež apkalpoÅ”anas poga (3 nospieÅ”anas 1,5 sekunžu laikā). USB kontrolleris savieno ierÄ«ci ar tÄ«klu un nosÅ«ta informāciju par to Z-Wave serverim. Tas savukārt izveido jaunu ierakstu SQLite datu bāzē ar jaunās ierÄ«ces parametriem. Pēc noteikta laika intervāla grafiskais interfeiss atgriežas Z-Wave ierīču saraksta lapā, nolasa informāciju no datu bāzes un parāda jauno ierÄ«ci sarakstā. Katra ierÄ«ce saņem savu unikālo identifikatoru, kas tiek izmantots ražoÅ”anas secinājumu noteikumos un strādājot mākonÄ«. Å Ä« algoritma darbÄ«ba ir parādÄ«ta UML diagrammā:

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori
(noklikŔķiniet uz attēla, lai to atvērtu augstākā izŔķirtspējā)

IP kameru pievienoŔana

Å ajā rakstā aplÅ«kotā mākoņa viedās mājas sistēma ir mākoņa videonovēroÅ”anas sistēmas jauninājums, ko arÄ« izstrādājis autors un kas ir tirgÅ« jau vairākus gadus un ir daudz instalāciju Krievijā.

Mākoņu videonovēroÅ”anas sistēmām viena no akÅ«tām problēmām ir ierobežotā aprÄ«kojuma izvēle, ar kuru var veikt integrāciju. Videokameras iekÅ”pusē ir instalēta programmatÅ«ra, kas ir atbildÄ«ga par savienojumu ar mākoni, kas uzreiz izvirza nopietnas prasÄ«bas tās aparatÅ«rai - procesoram un brÄ«vās atmiņas apjomam. Tas galvenokārt izskaidro mākoņa videonovēroÅ”anas kameru augstāko cenu salÄ«dzinājumā ar parastajām IP kamerām. Turklāt ir nepiecieÅ”ams ilgstoÅ”s sarunu posms ar videonovēroÅ”anas kameru ražoÅ”anas uzņēmumiem, lai piekļūtu kameru failu sistēmai un visiem nepiecieÅ”amajiem izstrādes rÄ«kiem.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

No otras puses, visām mÅ«sdienu IP kamerām ir standarta protokoli mijiedarbÄ«bai ar citām iekārtām (jo Ä«paÅ”i ar videoreÄ£istratoriem). Tādējādi atseviŔķa kontroliera izmantoÅ”ana, kas savienojas, izmantojot standarta protokolu un pārraida video straumes no IP kamerām uz mākoni, nodroÅ”ina bÅ«tiskas konkurences priekÅ”rocÄ«bas mākoņa videonovēroÅ”anas sistēmām. Turklāt, ja klients jau ir uzstādÄ«jis videonovēroÅ”anas sistēmu, kas balstÄ«ta uz vienkārŔām IP kamerām, tad kļūst iespējams to paplaÅ”ināt un pārvērst par pilnvērtÄ«gu mākoņa viedo māju.

Populārākais IP videonovēroÅ”anas sistēmu protokols, ko tagad atbalsta visi IP kameru ražotāji bez izņēmuma, ir ONVIF profils S, kuras specifikācijas pastāv tÄ«mekļa pakalpojumu apraksta valodā wsdl. UtilÄ«tu izmantoÅ”ana no rÄ«kkopas gSOAP Ir iespējams Ä£enerēt pirmkodu pakalpojumiem, kas darbojas ar IP kamerām:

$ 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

Rezultātā mēs iegÅ«stam C++ galvenes ā€œ*.hā€ un avota ā€œ*.cppā€ failu kopu, ko var ievietot tieÅ”i lietojumprogrammā vai atseviŔķā bibliotēkā un apkopot, izmantojot GCC kompilatoru. Daudzo funkciju dēļ kods ir liels un prasa papildu optimizāciju. Raspberry Pi 3 modeļa B+ mikrodatoram ir pietiekama veiktspēja, lai izpildÄ«tu Å”o kodu, taču, ja rodas nepiecieÅ”amÄ«ba kodu pārnest uz citu platformu, ir jāizvēlas pareiza procesora arhitektÅ«ra un sistēmas resursi.

IP kameras, kas atbalsta ONVIF standartu, darbojoties lokālajā tÄ«klā, ir savienotas ar Ä«paÅ”u multiraides grupu ar adresi 239.255.255.250. Ir protokols WS atklājums, kas ļauj automatizēt ierīču meklÄ“Å”anu lokālajā tÄ«klā.

Viedās mājas kontrollera grafiskais interfeiss ievieÅ” IP kameru meklÄ“Å”anas funkciju PHP, kas ir ļoti ērti, mijiedarbojoties ar tÄ«mekļa pakalpojumiem, izmantojot XML ziņojumus. Izvēloties izvēlnes vienumus IerÄ«ces > IP kameras > SkenÄ“Å”ana Tiek palaists IP kameru meklÄ“Å”anas algoritms, parādot rezultātu tabulas veidā:

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori
(noklikŔķiniet uz attēla, lai to atvērtu augstākā izŔķirtspējā)

Kad kontrolierim pievienojat kameru, varat norādÄ«t iestatÄ«jumus, saskaņā ar kuriem tā mijiedarbosies ar mākoni. ArÄ« Å”ajā posmā tai automātiski tiek pieŔķirts unikāls ierÄ«ces identifikators, pēc kura to vēlāk var viegli identificēt mākonÄ«.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Pēc tam JSON formātā tiek Ä£enerēts ziņojums, kas satur visus pievienotās kameras parametrus un tiek nosÅ«tÄ«ts uz viedās mājas kontrollera servera procesu, izmantojot komandu RESTful API, kur kameras parametri tiek atÅ”ifrēti un saglabāti iekŔējā SQLite datu bāzē un tiek nosÅ«tÄ«ti uz viedās mājas kontrollera servera procesu. izmanto arÄ« Ŕādu apstrādes pavedienu palaiÅ”anai:

  1. RTSP savienojuma izveidoÅ”ana video un audio straumju saņemÅ”anai;
  2. audio pārkodÄ“Å”ana no G.711 mu-Law, G.711 A-Law, G.723 uc formātiem. uz AAC formātu;
  3. video straumju H.264 formātā un audio AAC formātā pārkodÄ“Å”ana FLV konteinerā un pārsÅ«tÄ«Å”ana uz mākoni, izmantojot RTMP protokolu;
  4. savienojuma izveidoŔana ar IP kameras kustības detektora galapunktu caur ONVIF protokolu un periodiska tā aptauja;
  5. periodiski Ä£enerējot sÄ«ktēlu priekÅ”skatÄ«juma attēlu un nosÅ«tot to uz mākoni, izmantojot MQTT protokolu;
  6. lokāla video un audio straumju ierakstÄ«Å”ana atseviŔķu failu veidā MP4 formātā viedās mājas kontrollera SD vai Flash kartē.

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Lai izveidotu savienojumu ar kamerām, pārkodētu, apstrādātu un ierakstītu video straumes servera procesā, tiek izmantotas bibliotēkas funkcijas FFmpeg 4.1.0.

Veiktspējas testÄ“Å”anas eksperimentā kontrolierim tika pievienotas 3 kameras:

  1. HiWatch DS-I114W (izŔķirtspēja - 720p, kompresijas formāts - H.264, bitu pārraides ātrums - 1 Mb/s, skaņa G.711 mu-Law);
  2. Mikrodigitālais MDC-M6290FTD-1 (izŔķirtspēja - 1080p, kompresijas formāts - H.264, bitrate - 1 Mb/s, bez skaņas);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (izŔķirtspēja - 1080p, kompresijas formāts - H.264, bitu pārraides ātrums - 1.5 Mb/s, AAC audio).

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Visas trÄ«s straumes vienlaikus tika izvadÄ«tas mākonÄ«, audio pārkodÄ“Å”ana tika veikta tikai no vienas kameras, un vietējā arhÄ«va ierakstÄ«Å”ana tika atspējota. CPU slodze bija aptuveni 5%, RAM lietojums bija 32 MB (vienam procesam), 56 MB (kopā, ieskaitot OS).

Tādējādi viedās mājas kontrollerim var pieslēgt aptuveni 20 - 30 kameras (atkarÄ«bā no izŔķirtspējas un bitrate), kas ir pietiekami videonovēroÅ”anas sistēmai trÄ«sstāvu kotedžai vai nelielai noliktavai. Uzdevumiem, kuriem nepiecieÅ”ama lielāka veiktspēja, varat izmantot tÄ«kla datoru ar daudzkodolu Intel procesoru un Linux Debian Sarge OS. Kontrolierim paÅ”laik tiek veikta izmēģinājuma darbÄ«ba, un dati par tā veiktspēju tiks atjaunināti.

Mijiedarbība ar mākoni

MākonÄ« balstÄ«ta viedā māja glabā lietotāja datus (video un sensoru mērÄ«jumus) mākonÄ«. Mākoņu krātuves arhitektÅ«ra tiks sÄ«kāk aplÅ«kota nākamajā mÅ«su sērijas rakstā. Tagad parunāsim par saskarni informācijas ziņojumu pārsÅ«tÄ«Å”anai no viedās mājas kontrollera uz mākoni.

Pieslēgto ierīču stāvokļi un sensoru mērÄ«jumi tiek pārraidÄ«ti, izmantojot protokolu MQTT, ko tās vienkārŔības un energoefektivitātes dēļ bieži izmanto lietiskā interneta projektos. MQTT izmanto klienta-servera modeli, kurā klienti brokera ietvaros abonē noteiktas tēmas un publicē savus ziņojumus. Brokeris sÅ«ta ziņojumus visiem abonentiem saskaņā ar noteikumiem, ko nosaka QoS (pakalpojuma kvalitātes) lÄ«menis:

  • QoS 0 - maksimāli vienu reizi (bez piegādes garantijas);
  • QoS 1 - vismaz vienu reizi (ar piegādes apstiprinājumu);
  • QoS 2 - tieÅ”i vienu reizi (ar papildu piegādes apstiprinājumu).

MÅ«su gadÄ«jumā mēs izmantojam Aptumsuma ods. Tēmas nosaukums ir viedās mājas kontrollera unikālais identifikators. MQTT klients servera procesā abonē Å”o tēmu un pārvērÅ” tajā JSON ziņojumus, kas nāk no ziņojumu pārvaldnieka. Un otrādi, ziņojumus no MQTT brokera tas pārsÅ«ta ziņojumu pārvaldniekam, kas pēc tam tos multipleksē saviem abonentiem servera procesā:

Mākoņa viedā māja. 1. daļa: Kontrolieris un sensori

Lai pārsūtītu ziņojumus par viedās mājas kontrollera statusu, tiek izmantots saglabāto ziņojumu mehānisms saglabātās ziņas MQTT protokols. Tas ļauj pareizi uzraudzīt atkārtotu savienojumu laiku strāvas padeves pārtraukumu laikā.

MQTT klients tika izstrādāts, pamatojoties uz bibliotēkas ievieÅ”anu Aptumsums Paho C++ valodā.

H.264 + AAC multivides straumes tiek nosÅ«tÄ«tas uz mākoni, izmantojot RTMP protokolu, kur multivides serveru kopa ir atbildÄ«ga par to apstrādi un uzglabāŔanu. Lai optimāli sadalÄ«tu slodzi klasterÄ« un atlasÄ«tu vismazāk noslogoto multivides serveri, viedās mājas kontrolieris veic iepriekŔēju pieprasÄ«jumu mākoņa slodzes balansētājam un tikai pēc tam nosÅ«ta multivides straumi.

Secinājums

Rakstā tika apskatÄ«ta viena konkrēta viedās mājas kontrollera ievieÅ”ana, kuras pamatā ir mikrodators Raspberry Pi 3 B+ un kas var saņemt, apstrādāt informāciju un vadÄ«bas iekārtas, izmantojot Z-Wave protokolu, mijiedarboties ar IP kamerām, izmantojot ONVIF protokolu, kā arÄ« apmainÄ«ties ar datiem un komandas ar mākoņa pakalpojumu, izmantojot MQTT un RTMP protokolus. RažoÅ”anas loÄ£ikas dzinējs ir izstrādāts, pamatojoties uz loÄ£isko noteikumu un faktu salÄ«dzinājumu JSON formātā.

Viedās mājas kontrolieris paÅ”laik tiek izmēģināts vairākās vietās Maskavā un Maskavas reÄ£ionā.

Nākamā kontroliera versija plāno savienot cita veida ierÄ«ces (RF, Bluetooth, WiFi, vadu). Lietotāju ērtÄ«bām sensoru un IP kameru pieslēgÅ”anas procedÅ«ra tiks pārcelta uz mobilo aplikāciju. Ir arÄ« idejas servera procesa koda optimizÄ“Å”anai un programmatÅ«ras pārneÅ”anai uz operētājsistēmu openwrt. Tas ļaus ietaupÄ«t uz atseviŔķa kontroliera un pārsÅ«tÄ«t viedās mājas funkcionalitāti uz parastu mājsaimniecÄ«bas marÅ”rutētāju.

Avots: www.habr.com

Pievieno komentāru