Cloud Smart Home. Osa 1: Kontroller ja andurid

Cloud Smart Home. Osa 1: Kontroller ja andurid

Tänapäeval on tänu mikroelektroonika, sidekanalite, Interneti-tehnoloogiate ja tehisintellekti kiirele arengule nutika kodu teema muutumas üha aktuaalsemaks. Inimeste kodu on pärast kiviajast läbi teinud olulisi muutusi ning tööstusrevolutsiooni 4.0 ja asjade interneti ajastul on see muutunud mugavaks, funktsionaalseks ja turvaliseks. Turule on tulemas lahendused, mis muudavad korteri või maamaja keerukateks infosüsteemideks, mida juhitakse kõikjalt maailmast nutitelefoni abil. Pealegi pole inimese ja masina suhtluseks enam programmeerimiskeelte tundmine vajalik – tänu kõnetuvastus- ja sünteesialgoritmidele räägib inimene nutikoduga oma emakeeles.

Mõned praegu turul olevad targa kodu süsteemid on loogiline edasiarendus pilvvideovalvesüsteemidest, mille arendajad on mõistnud vajadust tervikliku lahenduse järele mitte ainult jälgimiseks, vaid ka kaugobjektide haldamiseks.

Teie tähelepanu on oodatud kolmest artiklist koosnevale sarjale, mis räägib kõigist autori isiklikult välja töötatud ja kasutusele võetud pilve nutikodu süsteemi põhikomponentidest. Esimene artikkel on pühendatud targa kodu sisse paigaldatud terminalkliendi seadmetele, teine ​​pilvesalvestus- ja andmetöötlussüsteemi arhitektuurist ning lõpuks kolmas kliendirakendusest süsteemi haldamiseks mobiilis. ja statsionaarsed seadmed.

Targa kodu varustus

Kõigepealt räägime sellest, kuidas teha tavalisest korterist, suvilast või suvilast nutikodu. Selleks on reeglina vaja eluruumi paigutada järgmised seadmed:

  1. väliskeskkonna erinevaid parameetreid mõõtvad andurid;
  2. Välistele objektidele mõjuvad ajamid;
  3. kontroller, mis teostab arvutusi vastavalt andurite mõõtmistele ja nende aluseks olevale loogikale ning annab täiturmehhanismidele käske.

Järgmisel joonisel on targa kodu skeem, mis sisaldab veelekke andureid (1) vannitoas, temperatuuri (2) ja valgustuse (3) andureid magamistoas, nutipistikupesa (4) köögis ja videovalvet. kaamera (5) koridoris.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Praegu on laialdaselt kasutusel RF433, Z-Wave, ZigBee, Bluetooth ja WiFi protokollidel töötavad juhtmevabad andurid. Nende peamised eelised on paigaldamise ja kasutamise lihtsus, samuti madal hind ja töökindlus. tootjad püüavad tuua oma seadmed massiturule ja teha need tavakasutajale kättesaadavaks.

Andurid ja täiturmehhanismid on reeglina ühendatud juhtmevaba liidese kaudu nutika kodu kontrolleriga (6) - spetsiaalse mikroarvutiga, mis ühendab kõik need seadmed ühte võrku ja juhib neid.

Mõned lahendused võivad aga kombineerida anduri, täiturmehhanismi ja kontrolleri korraga. Näiteks saab nutipistiku programmeerida graafiku alusel sisse või välja lülituma ning pilvevideovalvekaamera saab salvestada videot liikumisanduri signaalile. Lihtsaimatel juhtudel saate ilma eraldi kontrollerita hakkama, kuid paljude stsenaariumitega paindliku süsteemi loomiseks on see vajalik.

Nutika kodu kontrolleri ühendamiseks ülemaailmsesse võrku saab kasutada tavalist Interneti-ruuterit (7), millest on ammu saanud tuttav kodumasin igas kodus. Targa kodu kontrolleri kasuks on veel üks argument – ​​kui internetiühendus katkeb, siis tänu kontrolleri sisse salvestatud loogikaplokile, mitte pilveteenusesse, töötab tark kodu normaalselt edasi.

nutika kodu kontroller

Selles artiklis käsitletav pilve nutika kodu süsteemi kontroller on välja töötatud ühe plaadiga mikroarvuti baasil Raspberry Pi 3 mudel B+, mis ilmus 2018. aasta märtsis ja millel on targa kodu ülesannete jaoks piisavalt ressursse ja jõudlust. See sisaldab neljatuumalist Cortex-A53 protsessorit 64-bitise ARMv8-A arhitektuuriga, taktsagedusega 1.4 GHz, samuti 1 GB muutmälu, Wi-Fi 802.11ac, Bluetooth 4.2 ja gigabitist Etherneti adapterit, mis töötab USB 2.0 kaudu. buss.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Kontrolleri kokkupanek on väga lihtne - mikroarvuti (1) paigaldatakse plastikust korpusesse (2), seejärel paigaldatakse 8 GB microSD mälukaart koos tarkvaraga (3) ja USB Z-Wave võrgukontroller (4). vastavad pesad. Nutika kodu kontroller on ühendatud vooluvõrku 5V, 2.1A toiteadapteri (5) ja USB-mikro-USB kaabli (6) kaudu. Igal kontrolleril on kordumatu identifitseerimisnumber, mis kirjutatakse konfiguratsioonifaili esimesel käivitamisel ja mis on vajalik pilve nutikodu teenustega suhtlemiseks.

Nutika kodu kontrolleri tarkvara töötas selle artikli autor välja operatsioonisüsteemi põhjal Linux Raspbian Stretch. See koosneb järgmistest peamistest alamsüsteemidest:

  • serveriprotsess nutikodu seadmete ja pilvega suhtlemiseks;
  • graafiline kasutajaliides kontrolleri konfiguratsiooni ja tööparameetrite seadistamiseks;
  • andmebaas kontrolleri konfiguratsiooni salvestamiseks.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Andmebaas nutika kodu kontroller on rakendatud manustatud DBMS-i alusel SQLite ja see on süsteemitarkvaraga SD-kaardil olev fail. See toimib kontrolleri konfiguratsioonimäluna — teave ühendatud seadmete ja selle hetkeseisu kohta, loogiliste tootmisreeglite plokk, samuti indekseerimist vajav teave (nt kohaliku videoarhiivi failinimed). Kontrolleri taaskäivitamisel see teave salvestatakse, mis võimaldab elektrikatkestuse korral kontrolleri funktsionaalsust taastada.

Graafiline liides nutika kodu kontroller on välja töötatud PHP 7-s, kasutades mikroraamistikku sale. Veebiserver vastutab rakenduse käitamise eest. lighttpd, mida kasutatakse selle hea jõudluse ja vähese ressursivajaduse tõttu sageli manustatud seadmetes.

Cloud Smart Home. Osa 1: Kontroller ja andurid
(suurema eraldusvõimega avamiseks klõpsake pildil)

GUI põhifunktsioon on nutika kodu seadmete (IP-kaamerad ja andurid) ühendamine kontrolleriga. Veebirakendus loeb SQLite andmebaasist kontrolleri ja sellega ühendatud seadmete konfiguratsiooni ja hetkeseisu. Kontrolleri konfiguratsiooni muutmiseks saadab see JSON-vormingus juhtkäsud serveriprotsessi RESTful API kaudu.

Serveri protsess

Serveri protsess - võtmekomponent, mis teeb kogu põhitööd targa kodu aluseks olevate infoprotsesside automatiseerimisel: sensoorsete andmete vastuvõtmine ja töötlemine, juhttoimingute väljastamine sõltuvalt aluseks olevast loogikast. Serveriprotsessi eesmärk on suhelda nutikodu seadmetega, täita tootmisloogika reegleid, vastu võtta ja töödelda käske graafilisest liidesest ja pilvest. Serveriprotsess vaadeldavas targa kodu kontrolleris on rakendatud mitme lõimega rakendusena, mis on arendatud C ++ keeles ja käivitatakse eraldi teenusena systemd operatsioonisüsteem Linux Raspbian.

Serveriprotsessi peamised plokid on järgmised:

  1. Sõnumihaldur;
  2. IP-kaamera server;
  3. Z-Wave seadme server;
  4. Tootmisloogiliste reeglite server;
  5. Kontrolleri konfiguratsiooni andmebaas ja loogiliste reeglite plokk;
  6. RESTful API server graafilise liidesega suhtlemiseks;
  7. MQTT klient pilvega suhtlemiseks.

Serveri protsessiplokid on realiseeritud eraldi voogudena, mille vahel edastatakse teave JSON-vormingus sõnumite kujul (või seda vormingut esindavate andmestruktuuride kujul protsessimälus).

Cloud Smart Home. Osa 1: Kontroller ja andurid

Serveriprotsessi põhikomponent on sõnumihaldur, mis suunab JSON-sõnumid serveriprotsessi kõikidesse plokkidesse. JSON-sõnumi teabeväljade tüübid ja väärtused, mida need võivad võtta, on loetletud tabelis:

seadme tüüp
protokoll
sõnumi tüüp
seadme olek
käsk

kaamera
onvif
sensorData
on
voogesitus (sees/väljas)

andur
zwave
käsk
maha
salvestamine (sees/väljas)

efektor
mqtt
BusinessLogicRule
voogesitus (sees/väljas)
seade (lisa/eemalda)

äriloogika
konfiguratsiooniandmed
salvestamine (sees/väljas)

Bluetooth
seadme olek
viga

wifi

rf

Näiteks näeb kaamera liikumisanduri teade välja selline:

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

Tootmisloogika

Dispetšerilt sõnumi vastuvõtmiseks või saatmiseks tellib serveri protsessiplokk teatud tüüpi sõnumid. Tellimus on seda tüüpi tootmise loogiline reegel "Kui siis...", mis on esindatud JSON-vormingus, ja link sõnumitöötlejale serveri protsessiplokis. Näiteks selleks, et IP-kaamera server saaks GUI-lt ja pilvest käske, peate lisama järgmise reegli:

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

Kui punktis nimetatud tingimused eelnev (vasakpoolsed) reeglid on siis tõesed tagajärg (parempoolsed) reeglid ja töötleja saab juurdepääsu JSON-sõnumi sisule. Eelkäija toetab loogilisi operaatoreid, mis võrdlevad JSON-i võtme-väärtuste paare:

  1. on võrdne "võrdne";
  2. ei ole võrdne "mitte_võrdne";
  3. vähem kui "vähem";
  4. rohkem "suurem";
  5. väiksem kui "vähem_või_võrdne" või sellega võrdne;
  6. suurem kui "suurem_või_võrdne" või sellega võrdne.

Võrdluse tulemusi saab omavahel ühendada Boole'i ​​algebra operaatorite abil:

  1. Ja "ja";
  2. VÕI "või";
  3. EI "mitte".

Seega, kirjutades operaatoreid ja operande poola noodikirjas, saab moodustada üsna keerukaid tingimusi suure hulga parameetritega.

Täpselt sama mehhanismi, mis põhineb JSON-sõnumitel ja JSON-vormingus tootmisreeglitel, kasutatakse tootmisloogika serveriplokis teadmiste esitamiseks ja järelduste tegemiseks nutika kodu andurite andurite andmete põhjal.

Kasutaja koostab mobiilirakenduse abil stsenaariumid, mille järgi tark kodu peaks toimima. Näiteks: "Kui välisukse avamise andur rakendub, lülitage koridoris valgus sisse". Rakendus loeb andmebaasist välja andurite (avamisandur) ja täiturite (nutipesa või nutilamp) identifikaatorid ning genereerib JSON formaadis loogilise reegli, mis saadetakse targa kodu kontrollerile. Sellest mehhanismist tuleb lähemalt juttu meie tsükli kolmandas artiklis, kus räägime targa kodu haldamise kliendirakendusest.

Eespool käsitletud tootmisloogika mehhanismi rakendatakse raamatukogu abil Kiire JSON — JSON-vormingu SAX-parser C++ keeles. Tootmisreeglite massiivi järjestikune lugemine ja sõelumine hõlbustab andmete sobitamise funktsiooni juurutamist eelmiste perioodide raames.

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

see on pFact - struktuur, mis sisaldab JSON-sõnumi võtme-väärtuse paare, m_Reeglid — tootmisreeglite stringi massiiv. Sissetuleva sõnumi ja tootmisreegli sobitamine toimub funktsioonis reader.Parse(ruleStream, ruleHandler)Kus reegliHandler on objekt, mis sisaldab tõeväärtuste ja võrdlusoperaatorite loogikat. sRuleId - unikaalne reegliidentifikaator, tänu millele on võimalik reegleid salvestada ja redigeerida targa kodu kontrolleri andmebaasis. m_pActions - massiiv järelduste tulemustega: JSON-sõnumid, mis sisaldavad reeglibaasist tulenevaid tagajärgi ja saadetakse edasi sõnumihaldurisse, et abonendi lõimed saaksid neid töödelda.

RapidJSONi jõudlus on funktsiooniga võrreldav strlen()ja minimaalsed süsteemiressursinõuded võimaldavad seda teeki kasutada manustatud seadmetes. Sõnumite ja loogiliste reeglite kasutamine JSON-vormingus võimaldab teil rakendada paindlikku teabevahetussüsteemi nutika kodu kontrolleri kõigi komponentide vahel.

Andurid ja ajamid Z-Wave

Targa kodu peamiseks eeliseks on see, et see suudab iseseisvalt mõõta erinevaid väliskeskkonna parameetreid ja täita olenevalt olukorrast kasulikke funktsioone. Selleks ühendatakse targa kodu kontrolleriga andurid ja ajamid. Praeguses versioonis on need traadita seadmed, mis töötavad protokolli alusel Z-laine spetsiaalsel sagedusel 869 MHz Venemaa jaoks. Oma tööks ühendatakse need võrguks, milles leviala suurendamiseks on signaalireiiterid. Seadmetel on ka spetsiaalne säästurežiim – nad veedavad suurema osa ajast unerežiimis ja saadavad infot vaid oleku muutumisel, mis võib oluliselt pikendada sisseehitatud aku eluiga.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Tänapäeval on turul üsna palju erinevaid Z-Wave seadmeid. Näiteks kaaluge mõnda:

  1. Nutipesaga Zipato PAN16 saab mõõta järgmisi parameetreid: elektrikulu (kWh), võimsus (W), pinge (V) ja voolutugevus (A) võrgus. Sellel on ka sisseehitatud lüliti, millega saate ühendatud elektriseadet juhtida;
  2. Lekkeandur Neo Coolcam tuvastab mahaloksunud vedeliku olemasolu, sulgedes kaugsondi kontaktid;
  3. Zipato PH-PSG01 suitsuandur käivitub, kui suitsuosakesed sisenevad gaasianalüsaatori kambrisse;
  4. Neo Coolcam liikumisandur analüüsib inimkeha infrapunakiirgust. Lisaks on valgusandur (Lx);
  5. Multisensor Philio PST02-A mõõdab temperatuuri (°C), valgustust (%), ukse avanemist, inimese viibimist ruumis;
  6. Võrgukontroller Z-Wave USB Stick ZME E UZB1, mille külge on ühendatud andurid.

On väga oluline, et seadmed ja kontroller töötaksid samal sagedusel, vastasel juhul ei näe nad ühenduse ajal üksteist lihtsal viisil. Ühe Z-Wave võrgukontrolleri külge saab ühendada kuni 232 seadet, mis on korteri või maamaja jaoks täiesti piisav. Siseruumides võrgu leviala laiendamiseks saab signaali repiiterina kasutada nutipesa.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Eelmises lõigus käsitletud nutika kodu kontrolleri serveri protsessis vastutab Z-Wave'i server Z-Wave'i seadmetega suhtlemise eest. Anduritelt teabe saamiseks kasutab see raamatukogu OpenZWave keeles C++, mis pakub liidest Z-Wave võrgu USB-kontrolleriga suhtlemiseks ning töötab erinevate andurite ja täiturmehhanismidega. Anduri poolt mõõdetud keskkonnaparameetri väärtuse kirjutab Z-Wave server JSON-teatena:

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

Seejärel saadetakse see serveriprotsessi sõnumihaldurisse, et abonendi lõimed saaksid selle vastu võtta. Peamine tellija on tootmisloogikaserver, mis ühtib loogikareeglite eelmistes sõnumivälja väärtustega. Juhtkäske sisaldavad järeldustulemused saadetakse tagasi sõnumihaldurisse ja sealt edasi Z-Wave serverisse, mis need dekodeerib ja saadab Z-Wave võrgu USB-kontrollerile. Seejärel satuvad nad täitevseadmesse, mis muudab objektide olekut väliskeskkonnas ja tark kodu teeb seega kasulikku tööd.

Cloud Smart Home. Osa 1: Kontroller ja andurid
(suurema eraldusvõimega avamiseks klõpsake pildil)

Z-Wave seadmete ühendamine toimub targa kodu kontrolleri graafilises liideses. Selleks minge seadmete loendiga lehele ja klõpsake nuppu "Lisa". Lisakäsk RESTful API liidese kaudu siseneb serveri protsessi ja seejärel saadab sõnumihaldur selle Z-Wave serverisse, mis seab Z-Wave USB võrgukontrolleri seadmete lisamiseks spetsiaalsesse režiimi. Järgmisena peate Z-Wave seadmel tegema hooldusnupule mitu kiirvajutust (3 vajutust 1,5 sekundi jooksul). USB-kontroller ühendab seadme võrku ja saadab selle kohta info Z-Wave serverisse. See omakorda loob SQLite'i andmebaasis uue kirje koos uue seadme parameetritega. Graafiline liides naaseb pärast määratud ajavahemikku Z-Wave'i seadmete loendi lehele, loeb teavet andmebaasist ja kuvab loendis uue seadme. Samas saab iga seade oma kordumatu identifikaatori, mida kasutatakse tootmise järeldamise reeglites ja pilves töötamisel. Selle algoritmi toimimine on näidatud UML diagrammil:

Cloud Smart Home. Osa 1: Kontroller ja andurid
(suurema eraldusvõimega avamiseks klõpsake pildil)

IP-kaamerate ühendamine

Käesolevas artiklis käsitletav pilve nutikodu süsteem on samuti autori poolt välja töötatud pilvevideovalvesüsteemi uuendus, mis on olnud turul juba mitu aastat ja millel on Venemaal palju installatsioone.

Pilvevideovalvesüsteemide puhul on üheks teravaks probleemiks piiratud seadmete valik, millega saab integreerida. Pilvega ühenduse loomise eest vastutav tarkvara on installitud videokaamera sisse, mis seab selle riistvaralisele täidisele - protsessorile ja vaba mälu hulgale - kohe tõsised nõuded. See seletab peamiselt pilvevalvekaamerate kõrgemat hinda võrreldes tavaliste IP-kaameratega. Lisaks on kaamera failisüsteemile ja kõikidele vajalikele arendusvahenditele ligipääsemiseks vajalik pikk läbirääkimiste etapp CCTV kaamerafirmadega.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Teisest küljest on kõigil kaasaegsetel IP-kaameratel standardprotokollid muude seadmetega (eriti videosalvestitega) suhtlemiseks. Seega annab standardprotokolli kaudu ühenduse loova ja IP-kaameratest videovooge pilve edastava eraldi kontrolleri kasutamine pilvevideovalvesüsteemidele märkimisväärse konkurentsieelise. Veelgi enam, kui klient on juba installinud lihtsatel IP-kaameratel põhineva videovalvesüsteemi, on võimalik seda laiendada ja muuta see täisväärtuslikuks pilve nutikaks koduks.

Kõige populaarsem IP-videovalvesüsteemide protokoll, mida toetavad nüüd eranditult kõik IP-kaamerate tootjad, on ONVIF-i profiil S, mille spetsifikatsioonid on veebiteenuste kirjelduskeeles olemas wsdl. Tööriistakomplekti utiliitide kasutamine gSOAP IP-kaameratega töötavate teenuste lähtekoodi on võimalik genereerida:

$ 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

Selle tulemusena saame C ++ keeles päise "*.h" ja lähtefailide "*.cpp" komplekti, mille saab paigutada otse rakendusse või eraldi teeki ja kompileerida GCC kompilaatori abil. Tänu paljudele funktsioonidele on kood suur ja vajab täiendavat optimeerimist. Raspberry Pi 3 mudel B+ mikroarvutil on selle koodi täitmiseks piisavalt jõudlust, kuid juhul, kui tekib vajadus koodi portimiseks teisele platvormile, on vaja valida õige protsessori arhitektuur ja süsteemiressursid.

ONVIF-standardit toetavad IP-kaamerad on kohalikus võrgus töötades ühendatud spetsiaalse multisaaterühmaga, millel on aadress 239.255.255.250. Protokoll on olemas WS Discovery, mis võimaldab automatiseerida seadmete otsimist kohtvõrgus.

Targa kodu kontrolleri graafilises liideses on realiseeritud PHP-keeles IP-kaamerate otsimise funktsioon, mis on väga mugav XML-sõnumite kaudu veebiteenustega suhtlemisel. Menüüelementide valimisel Seadmed > IP-kaamerad > Skannimine käivitatakse IP-kaamerate otsimise algoritm, mis kuvab tulemuse tabeli kujul:

Cloud Smart Home. Osa 1: Kontroller ja andurid
(suurema eraldusvõimega avamiseks klõpsake pildil)

Kaamerat kontrollerile lisades saab määrata seaded, mille järgi see pilvega suhtlema hakkab. Ka selles etapis määratakse sellele automaatselt unikaalne seadme identifikaator, mille järgi saab seda edaspidi pilves hõlpsalt tuvastada.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Järgmisena genereeritakse JSON-vormingus teade, mis sisaldab kõiki lisatud kaamera parameetreid ja saadetakse RESTful API käsu kaudu targa kodu kontrolleri serveriprotsessi, kus kaamera parameetrid dekodeeritakse ja salvestatakse sisemisse SQLite andmebaasi ning kasutatakse ka järgmiste töötlemislõimede käivitamiseks:

  1. RTSP-ühenduse loomine video- ja helivoogude vastuvõtmiseks;
  2. heli ümberkodeerimine G.711 mu-Law, G.711 A-Law, G.723 jne. AAC-vormingusse;
  3. H.264-vormingus videovoogude ja AAC-vormingus heli ümberkodeerimine FLV-konteinerisse ja pilve edastamine RTMP-protokolli kaudu;
  4. IP-kaamera liikumisanduri lõpp-punktiga ühenduse loomine ONVIF-protokolli abil ja selle perioodiline pollimine;
  5. perioodiliselt pisipildi eelvaate pildi (eelvaate) genereerimine ja MQTT protokolli abil pilve saatmine;
  6. video- ja helivoogude lokaalne salvestamine eraldi failidena MP4-vormingus nutika kodu kontrolleri SD- või Flash-kaardile.

Cloud Smart Home. Osa 1: Kontroller ja andurid

Kaameratega ühenduse loomiseks, serveriprotsessis videovoogude ümberkodeerimiseks, töötlemiseks ja salvestamiseks kasutatakse raamatukogu funktsioone FFmpeg 4.1.0.

Jõudluse testimise katses ühendati kontrolleriga 3 kaamerat:

  1. HiWatch DS-I114W (eraldusvõime - 720p, tihendusvorming - H.264, bitikiirus - 1 Mb / s, heli G.711 mu-Law);
  2. Mikrodigitaalne MDC-M6290FTD-1 (eraldusvõime - 1080p, tihendusvorming - H.264, bitikiirus - 1 Mb / s, heli puudub);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (eraldusvõime - 1080p, tihendusvorming - H.264, bitikiirus - 1.5 Mb/s, AAC heli).

Cloud Smart Home. Osa 1: Kontroller ja andurid

Kõik kolm voogu väljastati samaaegselt pilve, heli transkodeeriti ainult ühest kaamerast ja kohaliku arhiivi salvestamine keelati. Protsessori koormus oli umbes 5%, RAM-i kasutus oli 32 MB (protsessi kohta), 56 MB (kokku OS-iga).

Nii saab targa kodu kontrolleriga ühendada umbes 20-30 kaamerat (olenevalt resolutsioonist ja bitikiirusest), millest piisab kolmekorruselise suvila või väikese lao videovalvesüsteemi jaoks. Ülesannetes, kus on vaja suurt jõudlust, saate kasutada mitmetuumalise Inteli protsessori ja Linux Debian Sarge'iga nettopi. Praegu on kontrolleril proovitöö ning andmed selle töö toimimise kohta täpsustuvad.

Suhtlemine pilvega

Pilvetark kodu salvestab kasutajaandmed (video- ja andurite mõõtmised) pilve. Pilvesalvestuse arhitektuurist räägitakse üksikasjalikumalt meie sarja järgmises artiklis. Nüüd räägime liidesest infosõnumite edastamiseks targa kodu kontrollerist pilve.

Protokolli kaudu edastatakse ühendatud seadmete olekud ja andurite mõõtmised MQTT, mida oma lihtsuse ja energiatõhususe tõttu sageli kasutatakse asjade interneti projektides. MQTT kasutab klient-serveri mudelit, kus kliendid tellivad maakleris teatud teemasid ja avaldavad oma sõnumeid. Maakler saadab kõigile abonentidele sõnumeid vastavalt QoS-i (Quality of Service) tasemega määratud reeglitele:

  • QoS 0 - maksimaalselt üks kord (tarne garantii puudub);
  • QoS 1 - vähemalt üks kord (koos kohaletoimetamise kinnitusega);
  • QoS 2 - täpselt üks kord (täiendava kohaletoimetamise kinnitusega).

Meie puhul on MQTT maakler Eclipse Mosquito. Teema nimi on nutika kodu kontrolleri kordumatu ID. Serveriprotsessis olev MQTT-klient tellib selle teema ja tõlgib sellesse sõnumisaatjalt tulevad JSON-sõnumid. Ja vastupidi, MQTT maakleri sõnumid edastatakse sõnumihaldurile, mis seejärel multipleksib need serveriprotsessis oma abonentidele:

Cloud Smart Home. Osa 1: Kontroller ja andurid

Targa kodu kontrolleri oleku kohta teadete saatmiseks kasutatakse salvestatud sõnumite mehhanismi. säilitatud sõnumid MQTT protokoll. See võimaldab teil elektrikatkestuse korral õigesti jälgida taasühendamise hetki.

MQTT klient töötati välja raamatukogu juurutamise põhjal Varjutus Paho keeles C++.

H.264 + AAC meediavood saadetakse RTMP-protokolli kaudu pilve, kus meediumiserverite klaster vastutab nende töötlemise ja salvestamise eest. Koormuse optimaalseks jaotamiseks klastris ja kõige vähem koormatud meediumiserveri valimiseks teeb nutikodu kontroller eelpäringu pilvekoormuse tasakaalustajale ja saadab alles seejärel meediavoo.

Järeldus

Artiklis käsitleti üht konkreetset Raspberry Pi 3 B+ mikroarvutil põhineva nutika kodu kontrolleri teostust, mis suudab vastu võtta, töödelda teavet ja juhtida Z-Wave protokolli kasutavaid seadmeid, suhelda ONVIF-protokolli kasutades IP-kaameratega ning vahetada andmeid ja käske pilveteenusega MQTT ja RTMP protokollide kaudu. Tootmisloogikamootor on välja töötatud JSON-vormingus esitatud loogiliste reeglite ja faktide võrdluse põhjal.

Nüüd on targa kodu kontroller proovitöös mitmes Moskva ja Moskva piirkonna rajatises.

Kontrolleri järgmises versioonis on plaanis ühendada muud tüüpi seadmeid (RF, Bluetooth, WiFi, juhtmega). Kasutajate mugavuse huvides viiakse andurite ja IP-kaamerate ühendamise protseduur üle mobiilirakendusse. Ideid on ka serveri protsessikoodi optimeerimiseks ja tarkvara portimiseks operatsioonisüsteemi openwrt. See säästab eraldi kontrolleri arvelt ja edastab targa kodu funktsionaalsuse tavalisele majapidamises kasutatavale ruuterile.

Allikas: www.habr.com

Lisa kommentaar