Cloud Smart Home. Osa 1: Ohjain ja anturit

Cloud Smart Home. Osa 1: Ohjain ja anturit

Mikroelektroniikan, viestintäkanavien, Internet-teknologioiden ja tekoälyn nopean kehityksen ansiosta älykotien aihe on nykyään yhä ajankohtaisempi. Ihmisen koti on kokenut merkittäviä muutoksia kivikauden jälkeen, ja teollisen vallankumouksen 4.0 ja esineiden internetin aikakaudella siitä on tullut mukava, toimiva ja turvallinen. Markkinoille on tulossa ratkaisuja, jotka tekevät asunnosta tai maalaistalon monimutkaisiksi tietojärjestelmiksi, joita ohjataan älypuhelimella mistä päin maailmaa tahansa. Lisäksi ihmisen ja koneen vuorovaikutuksessa ohjelmointikielten tuntemusta ei enää tarvita - puheentunnistuksen ja synteesialgoritmien ansiosta ihminen puhuu älykkään kodin kanssa äidinkielellään.

Jotkut tällä hetkellä markkinoilla olevat älykodin järjestelmät ovat loogista kehitystä pilvivideovalvontajärjestelmille, joiden kehittäjät ovat ymmärtäneet kokonaisvaltaisen ratkaisun tarpeen paitsi valvontaan myös etäobjektien hallintaan.

Huomioi pyydetään kolmen artikkelin sarjaan, jossa puhutaan kaikista tekijän henkilökohtaisesti kehittämän ja käyttöön otetun pilvi älykkään kodin järjestelmän pääkomponenteista. Ensimmäinen artikkeli on omistettu älykkään kodin sisään asennetuille pääteasiakaslaitteille, toinen on omistettu pilvitallennus- ja tietojenkäsittelyjärjestelmän arkkitehtuurille ja lopuksi kolmas artikkeli on omistettu järjestelmän hallintaan tarkoitetulle asiakassovellukselle. mobiililaitteissa ja kiinteissä laitteissa.

Älykkään kodin laitteet

Ensin puhutaan kuinka tehdä älykäs koti tavallisesta asunnosta, kesämökistä tai mökistä. Tätä varten asuntoon on pääsääntöisesti sijoitettava seuraavat laitteet:

  1. anturit, jotka mittaavat erilaisia ​​ulkoisen ympäristön parametreja;
  2. ulkoisiin esineisiin vaikuttavat toimilaitteet;
  3. säädin, joka suorittaa laskelmia anturien mittausten ja taustalla olevan logiikan mukaisesti ja antaa komentoja toimilaitteille.

Seuraavassa kuvassa on kaavio älykodista, joka sisältää vesivuotoanturit (1) kylpyhuoneessa, lämpötila (2) ja valaistusanturit (3) makuuhuoneessa, älykäs pistorasia (4) keittiössä ja videovalvonta. kamera (5) käytävällä.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Tällä hetkellä RF433-, Z-Wave-, ZigBee-, Bluetooth- ja WiFi-protokollalla toimivat langattomat sensorit ovat laajalti käytössä. Niiden tärkeimmät edut ovat asennuksen ja käytön helppous sekä alhaiset kustannukset ja luotettavuus. valmistajat pyrkivät tuomaan laitteensa massamarkkinoille ja tarjoamaan ne keskivertokäyttäjien saataville.

Anturit ja toimilaitteet on yleensä kytketty langattoman rajapinnan kautta älykkään kodin ohjaimeen (6) - erikoistuneeseen mikrotietokoneeseen, joka yhdistää kaikki nämä laitteet yhdeksi verkkoksi ja ohjaa niitä.

Jotkut ratkaisut voivat kuitenkin yhdistää samanaikaisesti anturin, toimilaitteen ja ohjaimen. Esimerkiksi älypistoke voidaan ohjelmoida kytkeytymään päälle tai pois päältä aikataulun mukaan, ja pilvivideovalvontakamera voi tallentaa videota liiketunnistimen signaaliin. Yksinkertaisimmissa tapauksissa voit tehdä ilman erillistä ohjainta, mutta joustavan järjestelmän luominen monilla skenaarioilla on välttämätöntä.

Älykodin ohjaimen yhdistämiseen globaaliin verkkoon voidaan käyttää tavallista Internet-reititintä (7), josta on jo pitkään tullut tuttu kodinkone missä tahansa kodissa. Älykodin ohjaimen puolesta on toinenkin argumentti - jos yhteys Internetiin katkeaa, niin älykoti jatkaa toimintaansa normaalisti ohjaimen sisään tallennetun logiikkalohkon ansiosta, ei pilvipalveluun.

älykäs kodin ohjain

Tässä artikkelissa käsitelty älykotipilvijärjestelmän ohjain on kehitetty yksilevyisen mikrotietokoneen pohjalta Raspberry Pi 3 malli B+, joka julkaistiin maaliskuussa 2018 ja jossa on tarpeeksi resursseja ja suorituskykyä älykkään kodin tehtäviin. Siinä on neliytiminen Cortex-A53-prosessori 64-bittisellä ARMv8-A-arkkitehtuurilla, kellotaajuus 1.4 GHz, sekä 1 Gt RAM-muistia, Wi-Fi 802.11ac, Bluetooth 4.2 ja gigabit Ethernet-sovitin, joka toimii USB 2.0:n kautta linja-auto.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Ohjaimen kokoaminen on hyvin yksinkertaista - mikrotietokone (1) asennetaan muovikoteloon (2), sitten asennetaan 8 Gt:n microSD-muistikortti ohjelmistoineen (3) ja USB Z-Wave -verkkoohjain (4). sopivat paikat. Älykodin ohjain on kytketty verkkovirtaan 5 V, 2.1 A virtalähteellä (5) ja USB-mikro-USB-kaapelilla (6). Jokaisella ohjaimella on yksilöllinen tunnistenumero, joka kirjoitetaan konfigurointitiedostoon ensimmäisen käynnistyksen yhteydessä ja jota tarvitaan vuorovaikutuksessa älykotipilven palveluiden kanssa.

Tämän artikkelin kirjoittaja on kehittänyt älykkään kodin ohjainohjelmiston käyttöjärjestelmän perusteella Linux Raspbian Stretch. Se koostuu seuraavista pääalijärjestelmistä:

  • palvelinprosessi älykodin laitteiden ja pilven kanssa vuorovaikutukseen;
  • graafinen käyttöliittymä ohjaimen konfigurointi- ja toimintaparametrien asettamiseen;
  • tietokanta ohjaimen kokoonpanon tallentamiseen.

Cloud Smart Home. Osa 1: Ohjain ja anturit

tietokanta älykäs kodin ohjain on toteutettu sulautetun DBMS:n pohjalta SQLite ja on SD-kortilla oleva tiedosto järjestelmäohjelmistolla. Se toimii ohjaimen konfiguraatiovarastona — tiedot liitetyistä laitteista ja sen nykyisestä tilasta, lohko loogisista tuotantosäännöistä sekä indeksointia vaativat tiedot (esimerkiksi paikallisen videoarkiston tiedostonimet). Kun ohjain käynnistetään uudelleen, nämä tiedot tallennetaan, mikä mahdollistaa ohjaimen toiminnan palauttamisen sähkökatkojen sattuessa.

Graafinen käyttöliittymä älykäs kodin ohjain on kehitetty PHP 7:ssä käyttämällä mikrokehystä Slim. Verkkopalvelin on vastuussa sovelluksen suorittamisesta. lighttpd, jota käytetään usein sulautetuissa laitteissa sen hyvän suorituskyvyn ja alhaisten resurssivaatimusten vuoksi.

Cloud Smart Home. Osa 1: Ohjain ja anturit
(klikkaa kuvaa avataksesi suuremman resoluution)

GUI:n päätehtävä on liittää älykodin laitteet (IP-kamerat ja anturit) ohjaimeen. Verkkosovellus lukee ohjaimen ja siihen kytkettyjen laitteiden konfiguraation ja nykyisen tilan SQLite-tietokannasta. Ohjaimen kokoonpanon muuttamiseksi se lähettää ohjauskomennot JSON-muodossa palvelinprosessin RESTful API:n kautta.

Palvelinprosessi

Palvelinprosessi - avainkomponentti, joka suorittaa kaiken päätyön älykodin perustan muodostavien tietoprosessien automatisoimiseksi: aistitietojen vastaanottaminen ja käsittely, ohjaustoimenpiteiden suorittaminen taustalla olevasta logiikasta riippuen. Palvelinprosessin tarkoituksena on olla vuorovaikutuksessa älykkään kodin laitteiden kanssa, suorittaa tuotantologiikkasääntöjä, vastaanottaa ja käsitellä komentoja graafisesta käyttöliittymästä ja pilvestä. Tarkastelun älykkään kodin ohjaimen palvelinprosessi on toteutettu monisäikeisenä sovelluksena, joka on kehitetty C ++ -kielellä ja lanseerattu erillisenä palveluna systemd käyttöjärjestelmä Linux Raspbian.

Palvelinprosessin päälohkot ovat:

  1. Viestinhallinta;
  2. IP-kamerapalvelin;
  3. Z-Wave laitepalvelin;
  4. Palvelin tuotannon loogiset säännöt;
  5. Ohjaimen konfiguraatiotietokanta ja loogisten sääntöjen lohko;
  6. RESTful API-palvelin vuorovaikutukseen graafisen käyttöliittymän kanssa;
  7. MQTT-asiakas vuorovaikutukseen pilven kanssa.

Palvelimen prosessilohkot on toteutettu erillisinä virroina, joiden välillä tiedot siirretään JSON-muotoisten sanomien muodossa (tai tätä muotoa edustavina tietorakenteina prosessimuistissa).

Cloud Smart Home. Osa 1: Ohjain ja anturit

Palvelinprosessin pääkomponentti on viestien hallinta, joka reitittää JSON-viestit kaikkiin palvelinprosessin lohkoihin. JSON-viestin tietokenttien tyypit ja arvot, jotka ne voivat saada, on lueteltu taulukossa:

laitetyyppi
protokolla
viestin tyyppi
laitetila
komento

kamera
onvif
sensorData
on
suoratoisto (päällä/pois)

anturi
zwave
komento
pois
tallennus (päällä/pois)

vaikuttaja
mqtt
businessLogicRule
suoratoisto (päällä/pois)
laite (lisää/poista)

businessLogic
konfigurointitiedot
tallennus (päällä/pois)

Bluetooth
laitetila
virhe

wifi

rf

Esimerkiksi kameran liiketunnistimen viesti näyttää tältä:

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

Tuotantologiikka

Vastaanottaakseen tai lähettääkseen viestin lähettäjältä palvelinprosessilohko tilaa tietyn tyyppiset viestit. Tilaus on tyyppinen tuotannon looginen sääntö "Jos sitten...", joka on esitetty JSON-muodossa, ja linkki viestien käsittelijään palvelimen prosessilohkossa. Esimerkiksi, jotta IP-kamerapalvelin voi vastaanottaa komentoja graafisesta käyttöliittymästä ja pilvestä, sinun on lisättävä seuraava sääntö:

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

Jos kohdassa määritellyt ehdot edeltäjä (vasemman puolen) säännöt ovat totta seurausta (oikea puoli) säännöt, ja käsittelijä saa pääsyn JSON-viestin runkoon. Edellytys tukee loogisia operaattoreita, jotka vertaavat JSON-avainarvopareja:

  1. on yhtä suuri kuin "yhtä";
  2. ei ole yhtä suuri kuin "not_equal";
  3. vähemmän kuin "vähemmän";
  4. enemmän "suurempaa";
  5. pienempi tai yhtä suuri kuin "vähemmän_tai_saa";
  6. suurempi tai yhtä suuri kuin "suurempi_tai_yhtä".

Vertailun tulokset voidaan yhdistää toisiinsa Boolen algebra-operaattoreiden avulla:

  1. Ja ja";
  2. TAI "tai";
  3. EI "ei".

Täten kirjoitettaessa operaattoreita ja operandeja puolalaisella merkinnällä voidaan muodostaa melko monimutkaisia ​​ehtoja suurella määrällä parametreja.

Täsmälleen samaa mekanismia, joka perustuu JSON-sanomiin ja tuotantosääntöihin JSON-muodossa, käytetään tuotannon logiikkapalvelinlohkossa tiedon esittämiseen ja päätelmien tekemiseen älykodin antureiden anturidatan avulla.

Käyttäjä luo mobiilisovelluksella skenaarioita, joiden mukaan älykodin tulee toimia. Esimerkiksi: "Jos etuoven avaamisen anturi laukeaa, sytytä valot käytävässä". Sovellus lukee tietokannasta anturien (avautumisanturi) ja toimilaitteiden (älykäs pistorasia tai älylamppu) tunnisteet ja generoi JSON-muodossa loogisen säännön, joka lähetetään älykodin ohjaimelle. Tätä mekanismia käsitellään tarkemmin syklimme kolmannessa artikkelissa, jossa puhumme älykodin hallintaan tarkoitetusta asiakassovelluksesta.

Edellä kuvattu tuotantologiikan mekanismi toteutetaan kirjaston avulla Nopea JSON — JSON-muodon SAX-jäsennin C++-kielellä. Tuotantosääntöjen joukon peräkkäinen lukeminen ja jäsentäminen helpottaa tietojen täsmäystoiminnon toteuttamista edeltäjiin:

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

Täällä pFact - rakenne, joka sisältää avain-arvo-pareja JSON-sanomasta, m_Säännöt — tuotantosääntöjen merkkijono. Tulevan viestin ja tuotantosäännön vastaavuus tehdään funktiossa reader.Parse(ruleStream, ruleHandler)Missä ruleHandler on objekti, joka sisältää loogisten operaattoreiden ja vertailuoperaattoreiden logiikan. sRuleId - ainutlaatuinen sääntötunniste, jonka ansiosta on mahdollista tallentaa ja muokata sääntöjä älykodin ohjaintietokannan sisällä. m_pActions - taulukko, jossa on päätelmien tulokset: JSON-viestit, jotka sisältävät seurauksia sääntökannasta ja lähetetään edelleen sanomanhallintaan, jotta tilaajaketjut voivat käsitellä niitä.

RapidJSONin suorituskyky on verrattavissa toimintoon strlen(), ja järjestelmän resurssien vähimmäisvaatimukset mahdollistavat tämän kirjaston käytön sulautetuissa laitteissa. Viestien ja loogisten sääntöjen käyttö JSON-muodossa mahdollistaa joustavan tiedonvaihtojärjestelmän toteuttamisen älykodin ohjaimen kaikkien komponenttien välillä.

Anturit ja toimilaitteet Z-Wave

Älykodin tärkein etu on, että se voi itsenäisesti mitata erilaisia ​​ulkoisen ympäristön parametreja ja suorittaa hyödyllisiä toimintoja tilanteesta riippuen. Tätä varten anturit ja toimilaitteet liitetään älykodin ohjaimeen. Nykyisessä versiossa nämä ovat langattomia laitteita, jotka toimivat protokollalla Z-aalto omistetulla taajuudella 869 MHz Venäjän puolesta. Työtään varten ne yhdistetään mesh-verkkoon, jossa on signaalitoistimet peittoalueen lisäämiseksi. Laitteissa on myös erityinen virransäästötila - ne viettävät suurimman osan ajastaan ​​lepotilassa ja lähettävät tietoja vain tilan muuttuessa, mikä voi pidentää merkittävästi sisäänrakennetun akun käyttöikää.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Markkinoilla on nykyään useita erilaisia ​​Z-Wave-laitteita. Harkitse esimerkiksi muutamia:

  1. Zipato PAN16 älykäs pistorasia voi mitata seuraavat parametrit: sähkönkulutus (kWh), teho (W), jännite (V) ja virta (A) verkkovirrassa. Siinä on myös sisäänrakennettu kytkin, jolla voit ohjata kytkettyä sähkölaitetta;
  2. Neo Coolcam -vuototunnistin havaitsee läikkyneen nesteen sulkemalla kauko-anturin koskettimet;
  3. Zipato PH-PSG01 -savuilmaisin laukeaa, kun savuhiukkasia tulee kaasuanalysaattorin kammioon;
  4. Neo Coolcam -liiketunnistin analysoi ihmiskehon infrapunasäteilyä. Lisäksi on valoanturi (Lx);
  5. Multisensor Philio PST02-A mittaa lämpötilaa (°C), valaistusta (%), oven avautumista, ihmisen läsnäoloa huoneessa;
  6. Verkko-ohjain Z-Wave USB Stick ZME E UZB1, johon anturit on kytketty.

On erittäin tärkeää, että laitteet ja ohjain toimivat samalla taajuudella, muuten ne, yksinkertaisella tavalla, eivät näe toisiaan yhdistämishetkellä. Yhdelle Z-Wave-verkkoohjaimelle voidaan kytkeä jopa 232 laitetta, mikä riittää asuntoon tai maalaistaloon. Sisätilojen verkon peittoalueen laajentamiseksi signaalin toistimena voidaan käyttää älyliitäntää.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Edellisessä kappaleessa käsitellyssä älykkään kodin ohjainpalvelinprosessissa Z-Wave-palvelin on vastuussa vuorovaikutuksesta Z-Wave-laitteiden kanssa. Tietojen saamiseksi antureista se käyttää kirjastoa OpenZWave C++:ssa, joka tarjoaa käyttöliittymän vuorovaikutukseen Z-Wave-verkon USB-ohjaimen kanssa ja toimii useiden eri antureiden ja toimilaitteiden kanssa. Z-Wave-palvelin kirjoittaa anturin mittaaman ympäristöparametrin arvon JSON-viestinä:

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

Se lähetetään sitten palvelinprosessin viestien hallintaan, jotta tilaajaketjut voivat vastaanottaa sen. Ensisijainen tilaaja on tuotantologiikkapalvelin, joka vastaa logiikkasääntöjen edeltäjän sanomakenttien arvoja. Ohjauskomentoja sisältävät päättelytulokset lähetetään takaisin sanomanhallintaan ja sieltä Z-Wave-palvelimelle, joka purkaa ne ja lähettää ne Z-Wave-verkon USB-ohjaimelle. Sitten he pääsevät toimeenpanolaitteeseen, joka muuttaa esineiden tilaa ulkoisessa ympäristössä, ja älykäs koti tekee siten hyödyllistä työtä.

Cloud Smart Home. Osa 1: Ohjain ja anturit
(klikkaa kuvaa avataksesi suuremman resoluution)

Z-Wave-laitteiden kytkentä tehdään älykodin ohjaimen graafisessa käyttöliittymässä. Voit tehdä tämän siirtymällä laiteluettelon sivulle ja napsauttamalla "Lisää" -painiketta. Add-komento RESTful API -rajapinnan kautta pääsee palvelinprosessiin ja viestinhallinta lähettää sen sitten Z-Wave-palvelimelle, mikä asettaa Z-Wave USB-verkkoohjaimen erityiseen tilaan laitteiden lisäämistä varten. Seuraavaksi Z-Wave-laitteessa sinun on tehtävä sarja pikapainalluksia (3 painallusta 1,5 sekunnin sisällä) huoltopainikkeesta. USB-ohjain yhdistää laitteen verkkoon ja lähettää siitä tiedot Z-Wave-palvelimelle. Tämä puolestaan ​​luo uuden tietueen SQLite-tietokantaan uuden laitteen parametreilla. Graafinen käyttöliittymä palaa määritetyn ajan kuluttua Z-Wave-laiteluettelosivulle, lukee tiedot tietokannasta ja näyttää luettelossa uuden laitteen. Samalla jokainen laite saa oman yksilöllisen tunnisteensa, jota käytetään tuotannon päättelysäännöissä ja pilvessä työskennellessä. Tämän algoritmin toiminta näkyy UML-kaaviossa:

Cloud Smart Home. Osa 1: Ohjain ja anturit
(klikkaa kuvaa avataksesi suuremman resoluution)

IP-kameroiden liittäminen

Tässä artikkelissa käsitelty älykäs pilvijärjestelmä on myös tekijän kehittämän pilvivideovalvontajärjestelmän päivitys, joka on ollut markkinoilla useita vuosia ja jolla on useita asennuksia Venäjällä.

Pilvivideovalvontajärjestelmissä yksi akuuteista ongelmista on rajallinen valikoima laitteita, joiden kanssa integrointi voidaan tehdä. Pilveen yhdistämisestä vastaava ohjelmisto on asennettu videokameran sisään, mikä asettaa heti vakavat vaatimukset sen laitteistotäytteelle - prosessorille ja vapaan muistin määrälle. Tämä selittää lähinnä pilvivalvontakameroiden korkeamman hinnan verrattuna tavallisiin IP-kameroihin. Lisäksi tarvitaan pitkä neuvotteluvaihe CCTV-kamerayhtiöiden kanssa päästäkseen käsiksi kameran tiedostojärjestelmään ja kaikkiin tarvittaviin kehitystyökaluihin.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Toisaalta kaikissa nykyaikaisissa IP-kameroissa on standardiprotokollat ​​vuorovaikutukseen muiden laitteiden (erityisesti videonauhurien) kanssa. Näin ollen erillisen ohjaimen käyttö, joka muodostaa yhteyden vakioprotokollan kautta ja lähettää videovirtoja IP-kameroista pilveen, tarjoaa pilvivideovalvontajärjestelmille merkittäviä kilpailuetuja. Lisäksi, jos asiakas on jo asentanut yksinkertaisiin IP-kameroihin perustuvan videovalvontajärjestelmän, on mahdollista laajentaa sitä ja muuttaa siitä täysimittainen pilvi älykäs koti.

IP-videovalvontajärjestelmien suosituin protokolla, jota nyt poikkeuksetta kaikki IP-kameravalmistajat tukevat, on ONVIF-profiili S, jonka määritykset ovat olemassa Web Services -kuvauskielessä wsdl. Työkalupakin apuohjelmien käyttäminen gSOAP on mahdollista luoda IP-kameroiden kanssa toimivien palveluiden lähdekoodi:

$ 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

Tuloksena saadaan C ++ -kielellä otsikko "*.h" ja lähde "*.cpp" tiedostot, jotka voidaan sijoittaa suoraan sovellukseen tai erilliseen kirjastoon ja kääntää GCC-kääntäjällä. Monien toimintojen vuoksi koodi on suuri ja vaatii lisäoptimointia. Raspberry Pi 3 malli B+ -mikrotietokoneessa on tarpeeksi suorituskykyä tämän koodin suorittamiseen, mutta jos koodi on tarpeen siirtää toiselle alustalle, on tarpeen valita oikea prosessoriarkkitehtuuri ja järjestelmäresurssit.

ONVIF-standardia tukevat IP-kamerat liitetään paikallisverkossa toimiessaan erityiseen monilähetysryhmään osoitteella 239.255.255.250. On protokolla WS-löytö, jonka avulla voit automatisoida laitteiden haun paikallisverkosta.

Älykodin ohjaimen graafisessa käyttöliittymässä on toteutettu IP-kameroiden hakutoiminto PHP-kielellä, mikä on erittäin kätevää vuorovaikutuksessa web-palvelujen kanssa XML-sanomien kautta. Valittaessa valikkokohtia Laitteet > IP-kamerat > Skannaa IP-kameroiden etsintäalgoritmi käynnistetään näyttäen tuloksen taulukon muodossa:

Cloud Smart Home. Osa 1: Ohjain ja anturit
(klikkaa kuvaa avataksesi suuremman resoluution)

Kun lisäät kameran ohjaimeen, voit määrittää asetukset, joiden mukaan se on vuorovaikutuksessa pilven kanssa. Myös tässä vaiheessa sille määritetään automaattisesti yksilöllinen laitetunniste, jonka avulla se on helppo tunnistaa pilvessä jatkossa.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Seuraavaksi luodaan JSON-muodossa viesti, joka sisältää kaikki lisätyn kameran parametrit ja lähetetään älykodin ohjaimen palvelinprosessille RESTful API -komennon kautta, jossa kameran parametrit puretaan ja tallennetaan sisäiseen SQLite-tietokantaan. Käytetään myös seuraavien käsittelysäikeiden käynnistämiseen:

  1. RTSP-yhteyden muodostaminen video- ja äänivirtojen vastaanottamiseksi;
  2. äänen transkoodaus G.711 mu-Lawista, G.711 A-Lawista, G.723:sta jne. AAC-muotoon;
  3. H.264-muotoisen videovirran ja AAC-muodon äänen muuntaminen FLV-säilöksi ja siirtäminen pilveen RTMP-protokollan kautta;
  4. Yhteyden muodostaminen IP-kameran liiketunnistimen päätepisteeseen ONVIF-protokollaa käyttäen ja sen ajoittain pollaus;
  5. generoidaan määräajoin pikkukuvan esikatselukuva (esikatselu) ja lähetetään se pilveen käyttämällä MQTT-protokollaa;
  6. video- ja äänivirtojen paikallinen tallennus erillisinä tiedostoina MP4-muodossa älykodin ohjaimen SD- tai Flash-kortille.

Cloud Smart Home. Osa 1: Ohjain ja anturit

Yhteyden muodostamiseen kameroihin, muuntamiseen, käsittelemiseen ja tallentamiseen palvelinprosessissa käytetään kirjaston toimintoja FFmpeg 4.1.0.

Suorituskykytestauskokeessa ohjaimeen liitettiin kolme kameraa:

  1. HiWatch DS-I114W (resoluutio - 720p, pakkausmuoto - H.264, bittinopeus - 1 Mb / s, ääni G.711 mu-Law);
  2. Mikrodigitaalinen MDC-M6290FTD-1 (resoluutio - 1080p, pakkausmuoto - H.264, bittinopeus - 1 Mb / s, ei ääntä);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (resoluutio - 1080p, pakkausmuoto - H.264, bittinopeus - 1.5 Mb/s, AAC-ääni).

Cloud Smart Home. Osa 1: Ohjain ja anturit

Kaikki kolme streamia lähetettiin samanaikaisesti pilveen, ääni transkoodattiin vain yhdestä kamerasta ja paikallisen arkiston tallennus poistettiin käytöstä. Suorittimen kuormitus oli noin 5 %, RAM-muistin käyttö oli 32 MB (prosessia kohti), 56 MB (yhteensä käyttöjärjestelmän kanssa).

Näin älykodin ohjaimeen voidaan liittää noin 20-30 kameraa (resoluutiosta ja bittinopeudesta riippuen), mikä riittää kolmikerroksisen mökin tai pienen varaston videovalvontajärjestelmään. Tehtävissä, joissa vaaditaan korkeaa suorituskykyä, voit käyttää verkkolaitetta, jossa on moniytiminen Intel-prosessori ja Linux Debian Sarge. Rekisterinpitäjä on parhaillaan koekäytössä ja tiedot sen työn suorituksesta tarkentuvat.

Vuorovaikutus pilven kanssa

Pilviälykoti tallentaa käyttäjätiedot (video- ja anturimittaukset) pilveen. Pilvitallennusarkkitehtuuria käsitellään tarkemmin sarjamme seuraavassa artikkelissa. Puhutaan nyt käyttöliittymästä tietoviestien välittämiseen älykodin ohjaimesta pilveen.

Protokollan kautta välitetään kytkettyjen laitteiden tilat ja anturimittaukset MQTT, jota käytetään usein Internet of Things -projekteissa sen yksinkertaisuuden ja energiatehokkuuden vuoksi. MQTT käyttää asiakas-palvelin-mallia, jossa asiakkaat tilaavat tiettyjä aiheita välittäjän sisällä ja julkaisevat viestinsä. Välittäjä lähettää viestejä kaikille tilaajille QoS (Quality of Service) -tason määrittelemien sääntöjen mukaisesti:

  • QoS 0 - enintään kerran (ei toimitustakuuta);
  • QoS 1 - vähintään kerran (toimitusvahvistuksen kanssa);
  • QoS 2 - täsmälleen kerran (toimituksen lisävahvistuksen kanssa).

Meidän tapauksessamme MQTT-välittäjä on Eclipse Mosquito. Aiheen nimi on älykkään kodin ohjaimen yksilöllinen tunnus. Palvelinprosessin sisällä oleva MQTT-asiakas tilaa tämän aiheen ja kääntää siihen JSON-viestit, jotka tulevat sanomanvälittäjältä. Ja päinvastoin, MQTT-välittäjän viestit välitetään edelleen viestien hallintaan, joka sitten multipleksoi ne tilaajilleen palvelinprosessin sisällä:

Cloud Smart Home. Osa 1: Ohjain ja anturit

Älykodin ohjaimen tilasta kertovien viestien lähettämiseen käytetään tallennettujen viestien mekanismia. säilytetyt viestit MQTT-protokolla. Tämän avulla voit seurata oikein uudelleenkytkennän hetkiä sähkökatkon sattuessa.

MQTT-asiakas on kehitetty kirjaston toteutuksen pohjalta Pimennys Paho C++:ssa.

H.264 + AAC -mediavirrat lähetetään pilveen RTMP-protokollan kautta, jossa mediapalvelimien klusteri vastaa niiden käsittelystä ja tallentamisesta. Optimaalisen kuorman jakautumisen klusterissa ja vähiten kuormitetun mediapalvelimen valitsemiseksi älykkään kodin ohjain tekee alustavan pyynnön pilven kuormituksen tasapainottajalle ja lähettää vasta sitten mediavirran.

Johtopäätös

Artikkelissa käsiteltiin yhtä erityistä Raspberry Pi 3 B+ -mikrotietokoneeseen perustuvan älykkään kodin ohjaimen toteutusta, joka voi vastaanottaa, käsitellä tietoa ja ohjata Z-Wave-protokollaa käyttäviä laitteita, olla vuorovaikutuksessa ONVIF-protokollaa käyttävien IP-kameroiden kanssa sekä vaihtaa tietoja ja komennot pilvipalvelun kanssa MQTT- ja RTMP-protokollien kautta. Tuotantologiikkamoottori on kehitetty perustuen JSON-muodossa esitettyjen loogisten sääntöjen ja tosiasioiden vertailuun.

Älykodin ohjain on nyt koekäytössä useissa tiloissa Moskovassa ja Moskovan alueella.

Ohjaimen seuraavassa versiossa on tarkoitus yhdistää muun tyyppisiä laitteita (RF, Bluetooth, WiFi, langallinen). Käyttäjien mukavuuden vuoksi anturien ja IP-kameroiden yhdistämismenettely siirretään mobiilisovellukseen. Ideoita on myös palvelimen prosessikoodin optimointiin ja ohjelmistojen siirtämiseen käyttöjärjestelmään OpenWRT. Tämä säästää erillisestä ohjaimesta ja siirtää älykodin toiminnallisuuden tavalliseen kotitalousreitittimeen.

Lähde: will.com

Lisää kommentti