Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Manapság a mikroelektronika, a kommunikációs csatornák, az internetes technológiák és a mesterséges intelligencia rohamos fejlődésének köszönhetően az okosotthonok témája egyre aktuálisabb. Az emberi lakhatás a kőkorszak óta jelentős változásokon ment keresztül, és az ipari forradalom 4.0 és a tárgyak internete korszakában kényelmessé, működőképessé és biztonságossá vált. Olyan megoldások érkeznek a piacra, amelyek egy lakást vagy egy vidéki házat komplex információs rendszerré varázsolnak, amelyet a világ bármely pontjáról okostelefonnal vezérelnek. Ráadásul az ember-gép interakcióhoz már nincs szükség programozási nyelvek ismeretére – a beszédfelismerési és szintézis algoritmusoknak köszönhetően az ember anyanyelvén beszél egy okosotthonhoz.

A jelenleg piacon lévő okosotthon-rendszerek egy része logikus továbbfejlesztése a felhőalapú videófelügyeleti rendszereknek, amelyek fejlesztői felismerték, hogy nem csak a megfigyelésre, hanem a távoli objektumok kezelésére is átfogó megoldásra van szükség.

Egy három cikkből álló sorozatot mutatunk be, amely a szerző által személyesen kifejlesztett és üzembe helyezett felhőalapú intelligens otthoni rendszer összes fő összetevőjét ismerteti. Az első cikk az okosotthonba telepített terminál kliens berendezéssel foglalkozik, a második a felhőtároló és adatfeldolgozó rendszer architektúrájával, végül a harmadik a rendszert mobil és helyhez kötött eszközökön kezelő kliens alkalmazással.

Intelligens otthoni felszerelés

Először is beszéljünk arról, hogyan készítsünk intelligens otthont egy közönséges lakásból, dachából vagy nyaralóból. Ehhez általában a következő berendezéseket kell elhelyezni az otthonban:

  1. érzékelők, amelyek különféle környezeti paramétereket mérnek;
  2. Külső tárgyakra ható működtetők;
  3. egy vezérlő, amely az érzékelő méréseinek és a beágyazott logikának megfelelően számításokat végez, és parancsokat ad ki az aktuátoroknak.

Az alábbi ábrán egy okosotthon diagramja látható, amelyen a fürdőszobában vízszivárgást (1), a hálószobában a hőmérsékletet (2) és a világítást (3), a konyhában okos aljzatot (4) és a videó megfigyelő kamera (5) a folyosón.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Jelenleg széles körben használják az RF433, Z-Wave, ZigBee, Bluetooth és WiFi protokollokat használó vezeték nélküli érzékelőket. Fő előnyük a könnyű telepítés és használat, valamint az alacsony költség és a megbízhatóság, mert A gyártók arra törekednek, hogy eszközeiket a tömegpiacra vigyék, és az átlagfelhasználók számára is elérhetővé tegyék.

Az érzékelők és aktuátorok általában vezeték nélküli interfészen keresztül csatlakoznak egy intelligens otthoni vezérlőhöz (6) - egy speciális mikroszámítógéphez, amely ezeket az eszközöket egyetlen hálózatba egyesíti és vezérli.

Egyes megoldások azonban kombinálhatnak egy érzékelőt, egy aktuátort és egy vezérlőt egyidejűleg. Például egy intelligens csatlakozó programozható úgy, hogy ütemezetten be- vagy kikapcsoljon, a felhős videó megfigyelő kamera pedig mozgásérzékelő jele alapján tud videót rögzíteni. A legegyszerűbb esetekben külön vezérlő nélkül is megoldható, de egy rugalmas rendszer létrehozásához sok forgatókönyvvel ez szükséges.

Az intelligens otthoni vezérlő globális hálózathoz történő csatlakoztatásához egy szokásos internetes router (7) használható, amely már régóta minden otthon általános háztartási készülékévé vált. Itt van még egy érv az intelligens otthoni vezérlő mellett - ha megszakad az internetkapcsolat, az intelligens otthon a vezérlőben tárolt logikai blokknak köszönhetően továbbra is a megszokott módon fog működni, és nem a felhőszolgáltatásban.

Intelligens otthoni vezérlő

A cikkben tárgyalt felhőalapú intelligens otthoni rendszer vezérlője egylapos mikroszámítógépre épül Raspberry Pi 3 modell B+, amely 2018 márciusában jelent meg, és elegendő erőforrással és teljesítménnyel rendelkezik az intelligens otthoni feladatokhoz. Tartalmaz egy négymagos, 53 bites ARMv64-A architektúrára épülő Cortex-A8 processzort, 1.4 GHz-es órajellel, valamint 1 GB RAM-ot, Wi-Fi 802.11ac-et, Bluetooth 4.2-t és egy gigabites Ethernet adaptert, amely USB 2.0-n keresztül működik. .

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

A vezérlő összeszerelése nagyon egyszerű - a mikroszámítógépet (1) egy műanyag házba (2), majd egy 8 GB-os microSD formátumú memóriakártyát szoftverrel (3) és egy USB Z-Wave hálózati vezérlőt (4) helyeznek be. a megfelelő nyílásokat. Az intelligens otthoni vezérlő egy 5 V-os, 2.1 A-es hálózati adapteren (5) és egy USB - micro-USB kábelen (6) keresztül csatlakozik a tápegységhez. Minden vezérlő egyedi azonosítószámmal rendelkezik, amely az első indításkor be van írva a konfigurációs fájlba, és szükséges az okosotthon felhőszolgáltatásaival való interakcióhoz.

Az intelligens otthonvezérlő szoftvert a cikk szerzője fejlesztette ki az operációs rendszer alapján Linux Raspbian Stretch. A következő fő alrendszerekből áll:

  • szerverfolyamat az intelligens otthoni berendezésekkel és a felhővel való interakcióhoz;
  • grafikus felhasználói felület a vezérlő konfigurációjának és működési paramétereinek beállításához;
  • adatbázis a vezérlő konfigurációjának tárolására.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Adatbázis Az intelligens otthoni vezérlő egy beágyazott DBMS-en alapul SQLite és egy fájl egy SD-kártyán a rendszerszoftverrel. Tárhelyként szolgál a vezérlő konfigurációjához - a csatlakoztatott berendezéssel és annak aktuális állapotával kapcsolatos információk, logikai gyártási szabályok blokkja, valamint indexelést igénylő információk (például egy helyi videoarchívum fájlnevei). A vezérlő újraindításakor ezek az információk mentésre kerülnek, lehetővé téve a vezérlő visszaállítását áramkimaradás esetén.

Grafikus felület intelligens otthoni vezérlő, amelyet PHP 7-ben fejlesztettek ki mikrokeretrendszer segítségével karcsú. A webszerver felelős az alkalmazás futtatásáért. lighttpd, jó teljesítménye és alacsony erőforrásigénye miatt gyakran használják beágyazott eszközökben.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők
(kattintson a képre a nagyobb felbontású megnyitáshoz)

A grafikus interfész fő funkciója az okosotthon berendezések (IP megfigyelő kamerák és érzékelők) vezérlőhöz való csatlakoztatása. A webalkalmazás az SQLite adatbázisból olvassa be a vezérlő és a hozzá kapcsolódó eszközök konfigurációját és aktuális állapotát. A vezérlő konfigurációjának megváltoztatásához a vezérlőparancsokat JSON formátumban küldi el a kiszolgálófolyamat RESTful API felületén keresztül.

Szerver folyamat

Szerver folyamat - kulcsfontosságú komponens, amely elvégzi az okosotthon alapját képező információs folyamatok automatizálásának minden fő munkáját: szenzoros adatok fogadását és feldolgozását, vezérlő műveletek kiadását a beágyazott logikától függően. A szerverfolyamat célja az intelligens otthoni berendezésekkel való interakció, termelési logikai szabályok végrehajtása, parancsok fogadása és feldolgozása a grafikus felületről és a felhőből. A szóban forgó intelligens otthon vezérlőben a szerverfolyamat egy többszálas alkalmazásként valósul meg, C++ nyelven fejlesztették és külön szolgáltatásként indultak el. systemd operációs rendszer Linux Raspbian.

A szerverfolyamat fő blokkjai a következők:

  1. Üzenetkezelő;
  2. IP kamera szerver;
  3. Z-Wave eszközszerver;
  4. Termelési logikai szabályok szervere;
  5. A vezérlő konfigurációs adatbázisa és a logikai szabályok blokkja;
  6. RESTful API szerver a grafikus felülettel való interakcióhoz;
  7. MQTT kliens a felhővel való interakcióhoz.

A szerver folyamatblokkjai külön szálakként valósulnak meg, amelyek között az információ JSON formátumú üzenetek formájában (vagy a folyamatmemóriában ezt a formátumot reprezentáló adatszerkezetek formájában) továbbítja.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

A szerverfolyamat fő összetevője az üzenetkezelő, amely a JSON-üzeneteket az összes kiszolgáló folyamatblokkjához irányítja. A JSON-üzenetinformációs mezők típusait és az általuk elfogadható értékeket a táblázat tartalmazza:

eszköztípus
protokoll
üzenetTípus
deviceState
parancs

szoba
onvif
sensorData
on
streaming (be/ki)

érzékelő
zwave
parancs
kedvezmény
felvétel (be/ki)

effektor
mqtt
businessLogicRule
streaming (be/ki)
evice (Hozzáadás/eltávolítás)

üzleti logika
konfigurációs adatok
felvétel (be/ki)

Bluetooth
deviceState
hiba

wifi

rf

Például egy kamera mozgásérzékelő üzenete így néz ki:

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

Termelési logika

A diszpécsertől üzenet fogadásához vagy küldéséhez a kiszolgáló folyamatblokkja előfizet bizonyos típusú üzenetekre. Az előfizetés egy ilyen típusú termelési logikai szabály "Ha akkor...", JSON formátumban jelenik meg, és egy hivatkozás az üzenetkezelőre a kiszolgáló folyamatblokkjában. Például ahhoz, hogy az IP-kameraszerver parancsokat fogadhasson a grafikus felhasználói felületről és a felhőből, hozzá kell adnia a következő szabályt:

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

pontjában meghatározott feltételek esetén előzmény (bal oldal) a szabályok igazak, akkor teljesül következetes (jobb oldali) szabályokat, és a kezelő hozzáfér a JSON-üzenet törzséhez. Az előzmény támogatja a JSON kulcs-érték párokat összehasonlító logikai operátorokat:

  1. egyenlő "egyenlő";
  2. nem egyenlő a "nem_egyenlő"-vel;
  3. kevesebb „kevesebb”;
  4. "nagyobb";
  5. kisebb vagy egyenlő, mint "kevesebb_vagy_egyenlő";
  6. nagyobb vagy egyenlő, mint "nagyobb_vagy egyenlő".

Az összehasonlítási eredmények Boole-algebrai operátorok segítségével hozhatók kapcsolatba egymással:

  1. Ésés"
  2. Vagy vagy";
  3. Nem nem".

Így az operátorok és operandusok lengyel jelöléssel történő írásával meglehetősen összetett feltételeket hozhatunk létre nagyszámú paraméterrel.

Pontosan ugyanezt a JSON-üzeneteken és JSON-formátumú termelési szabályokon alapuló mechanizmust használják az éles logikai szerver blokkban a tudás megjelenítésére és az intelligens otthon érzékelőiből származó szenzoros adatok felhasználásával logikai következtetések levonására.

Egy mobilalkalmazás segítségével a felhasználó forgatókönyveket készít, amelyek szerint az okosotthonnak működnie kell. Például: "Ha a bejárati ajtó nyitására szolgáló érzékelő működésbe lép, kapcsolja be a lámpát a folyosón". Az alkalmazás beolvassa az érzékelők (nyitásérzékelő) és működtetők (okos aljzat vagy intelligens lámpa) azonosítóit az adatbázisból, és létrehoz egy logikai szabályt JSON formátumban, amelyet elküld az intelligens otthon vezérlőjének. Erről a mechanizmusról sorozatunk harmadik cikkében lesz szó részletesebben, ahol az okosotthon kezeléséhez szükséges kliens alkalmazásról lesz szó.

A fent tárgyalt termelési logikai mechanizmus a könyvtár segítségével valósul meg RapidJSON — SAX elemző JSON formátumhoz C++ nyelven. A termelési szabályok tömbjének szekvenciális beolvasása és elemzése lehetővé teszi az adat-összehasonlítási funkció egyszerű megvalósítását az előzményeken belül:

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

Itt pFact — egy JSON-üzenetből származó kulcs-érték párokat tartalmazó struktúra, m_Rules — termelési szabályok karakterlánc-tömbje. A bejövő üzenet és a termelési szabály összehasonlítása a függvényben történik Reader.Parse(ruleStream, ruleHandler)Ahol ruleHandler a logikai és összehasonlító operátorok logikáját tartalmazó objektum. sRuleId — Egyedi szabályazonosító, melynek köszönhetően az intelligens otthon vezérlő adatbázisában tárolhatók és szerkeszthetők a szabályok. m_pActions — egy tömb a logikai következtetések eredményeivel: JSON-üzenetek, amelyek a szabálybázis következményeit tartalmazzák, és továbbküldik az üzenetkezelőnek, hogy az előfizetői szálak feldolgozhassák azokat.

A RapidJSON teljesítménye összehasonlítható a funkcióval strlen(), és a minimális rendszererőforrás-követelmények lehetővé teszik a könyvtár használatát beágyazott eszközökön. A JSON formátumú üzenetek és logikai szabályok használata lehetővé teszi az intelligens otthoni vezérlő összes összetevője közötti rugalmas információcsere-rendszer megvalósítását.

Z-Wave érzékelők és működtetők

Az okosotthon fő előnye, hogy önállóan képes mérni a külső környezet különböző paramétereit, és a helyzettől függően hasznos funkciókat lát el. Ehhez érzékelőket és aktuátorokat kell csatlakoztatni az okosotthon vezérlőhöz. A jelenlegi verzióban ezek a protokollt használó vezeték nélküli eszközök Z-Hullám speciálisan kijelölt frekvencián 869 MHz Oroszország számára. Működésükhöz egy mesh hálózatba egyesítik, amely jelismétlőket tartalmaz a lefedettség növelése érdekében. A készülékek speciális energiatakarékos üzemmóddal is rendelkeznek - az idő nagy részét alvó üzemmódban töltik, és csak állapotváltozás esetén küldenek információt, ami jelentősen meghosszabbíthatja a beépített akkumulátor élettartamát.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Ma már meglehetősen sok különböző Z-Wave készüléket találhat a piacon. Nézzünk néhány példát:

  1. A Zipato PAN16 intelligens aljzat a következő paramétereket tudja mérni: villamosenergia-fogyasztás (kWh), teljesítmény (W), feszültség (V) és áram (A) az elektromos hálózatban. Beépített kapcsolóval is rendelkezik, amellyel a csatlakoztatott elektromos készüléket vezérelheti;
  2. A Neo Coolcam szivárgásérzékelő a távoli szonda érintkezőinek lezárásával érzékeli a kiömlött folyadék jelenlétét;
  3. A Zipato PH-PSG01 füstérzékelő akkor aktiválódik, amikor füstrészecskék belépnek a gázelemző kamrájába;
  4. A Neo Coolcam mozgásérzékelő elemzi az emberi test infravörös sugárzását. Ezen kívül van egy fényérzékelő (Lx);
  5. Multiszenzor Philio PST02-A méri a hőmérsékletet (°C), a fényt (%), az ajtónyitást, egy személy jelenlétét a szobában;
  6. Z-Wave USB Stick ZME E UZB1 hálózati vezérlő, amelyhez érzékelők csatlakoznak.

Nagyon fontos, hogy az eszközök és a vezérlő azonos frekvencián működjenek, különben egyszerűen nem látják egymást a csatlakozás pillanatában. Egy Z-Wave hálózati vezérlőhöz akár 232 eszköz csatlakoztatható, ami elég egy lakáshoz vagy egy vidéki házhoz. A hálózati lefedettség beltéri bővítéséhez egy intelligens aljzat használható jelismétlőként.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Az előző bekezdésben tárgyalt intelligens otthonvezérlő szerver folyamatban a Z-Wave szerver felelős a Z-Wave eszközökkel való interakcióért. Egy könyvtárat használ az érzékelőktől származó információk fogadására OpenZWave C++ nyelven, amely interfészt biztosít a Z-Wave hálózati USB-vezérlővel való interakcióhoz, és számos érzékelővel és működtetővel működik. Az érzékelő által mért környezeti paraméter értékét a Z-Wave szerver JSON üzenet formájában rögzíti:

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

Ezt követően a kiszolgáló folyamat üzenetkezelőjébe továbbítják, hogy az előfizetői szálak fogadhassák. A fő előfizető a termelési logikai szerver, amely megegyezik a logikai szabályok előzményeiben szereplő üzenetmező értékekkel. A vezérlőparancsokat tartalmazó következtetési eredmények visszakerülnek az üzenetkezelőbe, és onnan a Z-Wave szerverre kerülnek, amely dekódolja és elküldi a Z-Wave hálózati USB vezérlőnek. Ezután belépnek az aktuátorba, amely megváltoztatja a környezeti objektumok állapotát, és az okosotthon így hasznos munkát végez.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők
(kattintson a képre a nagyobb felbontású megnyitáshoz)

A Z-Wave eszközök csatlakoztatása az okosotthon vezérlő grafikus felületén történik. Ehhez lépjen az eszközök listáját tartalmazó oldalra, és kattintson a „Hozzáadás” gombra. Az add parancs a RESTful API interfészen keresztül belép a szerver folyamatba, majd az üzenetkezelő elküldi a Z-Wave szervernek, amely a Z-Wave hálózati USB vezérlőt speciális módba helyezi az eszközök hozzáadásához. Ezután a Z-Wave készüléken gyorsan meg kell nyomnia a szerviz gombot (3 megnyomás 1,5 másodpercen belül). Az USB vezérlő csatlakoztatja az eszközt a hálózathoz, és információkat küld róla a Z-Wave szervernek. Ez viszont egy új bejegyzést hoz létre az SQLite adatbázisban az új eszköz paramétereivel. Egy meghatározott időintervallum elteltével a grafikus felület visszatér a Z-Wave eszközlista oldalára, kiolvassa az adatbázisból az információkat, és megjeleníti a listában az új eszközt. Minden eszköz saját egyedi azonosítót kap, amelyet a termelési következtetési szabályokban és a felhőben végzett munka során használnak. Ennek az algoritmusnak a működése az UML diagramon látható:

Cloud Smart Home. 1. rész: Vezérlő és érzékelők
(kattintson a képre a nagyobb felbontású megnyitáshoz)

IP kamerák csatlakoztatása

Az ebben a cikkben tárgyalt felhőalapú intelligens otthoni rendszer a szintén a szerző által kifejlesztett felhőalapú videó megfigyelő rendszer frissítése, amely több éve van a piacon, és számos telepítéssel rendelkezik Oroszországban.

A felhőalapú videofelügyeleti rendszerek esetében az egyik akut probléma az integrált berendezések korlátozott választéka. A videókamera belsejébe telepítik a felhőhöz való csatlakozásért felelős szoftvert, amely azonnal komoly követelményeket támaszt annak hardverével - a processzorral és a szabad memória mennyiségével - szemben. Ez elsősorban a felhőalapú CCTV kamerák magasabb árát magyarázza a hagyományos IP-kamerákhoz képest. Ezenkívül a CCTV kamerákat gyártó cégekkel folytatott tárgyalások hosszas szakasza szükséges ahhoz, hogy hozzáférjenek a kamera fájlrendszeréhez és az összes szükséges fejlesztőeszközhöz.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Másrészt minden modern IP-kamerának szabványos protokollja van a többi berendezéssel (különösen a videorögzítőkkel) való interakcióhoz. Így egy különálló vezérlő használata, amely szabványos protokollon keresztül csatlakozik, és az IP-kamerákból a felhőbe sugározza a videofolyamokat, jelentős versenyelőnyt jelent a felhőalapú videófelügyeleti rendszerek számára. Sőt, ha az ügyfél már telepített egy egyszerű IP-kamerákon alapuló videó megfigyelő rendszert, akkor lehetővé válik annak bővítése és teljes értékű felhő intelligens otthonná alakítása.

Az IP videó megfigyelő rendszerek legnépszerűbb protokollja, amelyet ma már kivétel nélkül minden IP-kameragyártó támogat, az ONVIF Profile S, amelynek specifikációi egy webszolgáltatás-leíró nyelven léteznek wsdl. Segédprogramok használata az eszközkészletből gSOAP Lehetőség van forráskód létrehozására az IP-kamerákkal működő szolgáltatásokhoz:

$ 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

Ennek eredményeként egy „*.h” fejlécből és „*.cpp” forrásfájlból álló készletet kapunk C++ nyelven, amelyeket közvetlenül elhelyezhetünk egy alkalmazásba vagy külön könyvtárba, és a GCC fordító segítségével lefordíthatjuk. A sok funkció miatt a kód nagy és további optimalizálást igényel. A Raspberry Pi 3 B+ típusú mikroszámítógép elegendő teljesítménnyel rendelkezik ennek a kódnak a végrehajtásához, de ha a kódot másik platformra kell portolni, akkor ki kell választani a megfelelő processzorarchitektúrát és rendszererőforrásokat.

Az ONVIF szabványt támogató IP-kamerák helyi hálózaton működve egy speciális multicast csoporthoz csatlakoznak a címmel. 239.255.255.250. Van egy protokoll WS Discovery, amely lehetővé teszi a helyi hálózaton lévő eszközök keresésének automatizálását.

Az intelligens otthoni vezérlő grafikus felülete az IP-kamerák keresési funkcióját valósítja meg PHP-ben, ami nagyon kényelmes a webszolgáltatásokkal való interakció során XML üzeneteken keresztül. A menüpontok kiválasztásakor Eszközök > IP-kamerák > Szkennelés Elindul az IP-kamerák keresésének algoritmusa, amely táblázat formájában jeleníti meg az eredményt:

Cloud Smart Home. 1. rész: Vezérlő és érzékelők
(kattintson a képre a nagyobb felbontású megnyitáshoz)

Amikor kamerát ad a vezérlőhöz, megadhatja azokat a beállításokat, amelyek szerint az interakcióba lép a felhővel. Ebben a szakaszban is automatikusan hozzárendel egy egyedi eszközazonosítót, amellyel később könnyen azonosítható a felhőn belül.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Ezután JSON formátumban generál egy üzenetet, amely tartalmazza a hozzáadott kamera összes paraméterét, és elküldi az intelligens otthon vezérlő szerverfolyamatának a RESTful API paranccsal, ahol a kamera paraméterei dekódolódnak és elmentésre kerülnek a belső SQLite adatbázisba. a következő feldolgozási szálak indítására is szolgál:

  1. RTSP kapcsolat létrehozása video- és hangfolyamok fogadásához;
  2. hang átkódolása G.711 mu-Law, G.711 A-Law, G.723 stb. formátumokból. AAC formátumba;
  3. H.264 formátumú videofolyamok és AAC formátumú hangok átkódolása FLV tárolóba, és RTMP protokollon keresztül a felhőbe továbbítása;
  4. kapcsolat létrehozása az IP kamera mozgásérzékelő végpontjával az ONVIF protokollon keresztül és annak időszakos lekérdezése;
  5. időszakonként miniatűr előnézeti kép generálása és elküldése a felhőbe az MQTT protokollon keresztül;
  6. video- és hangfolyamok helyi rögzítése MP4 formátumú különálló fájlok formájában az intelligens otthon vezérlő SD vagy Flash kártyájára.

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

A kamerákkal való kapcsolat létrehozásához, a szerverfolyamatban a videofolyamok átkódolásához, feldolgozásához és rögzítéséhez a könyvtár funkcióit használják FFmpeg 4.1.0.

A teljesítményteszt során 3 kamerát csatlakoztattak a vezérlőhöz:

  1. HiWatch DS-I114W (felbontás - 720p, tömörítési formátum - H.264, bitráta - 1 Mb/s, hang G.711 mu-Law);
  2. Mikrodigitális MDC-M6290FTD-1 (felbontás - 1080p, tömörítési formátum - H.264, bitráta - 1 Mb/s, nincs hang);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (felbontás - 1080p, tömörítési formátum - H.264, bitráta - 1.5 Mb/s, AAC hang).

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Mindhárom adatfolyam egyszerre került a felhőbe, a hangátkódolás csak egy kamerából történt, és a helyi archív felvétel le volt tiltva. A CPU-terhelés körülbelül 5%, a RAM-használat 32 MB (folyamatonként), 56 MB (összesen az operációs rendszerrel együtt).

Így hozzávetőlegesen 20-30 kamera csatlakoztatható az okosotthon vezérlőhöz (felbontástól és bitrátától függően), ami elegendő egy háromszintes nyaraló vagy egy kis raktár videó megfigyelő rendszeréhez. A nagyobb teljesítményt igénylő feladatokhoz használhat többmagos Intel processzorral és Linux Debian Sarge OS-sel ellátott nettopot. A vezérlő jelenleg próbaüzem alatt áll, a teljesítményére vonatkozó adatok frissülnek.

Kölcsönhatás a felhővel

A felhőalapú intelligens otthon a felhasználói adatokat (videó- ​​és szenzorméréseket) a felhőben tárolja. A felhőalapú tárolás architektúrájáról sorozatunk következő cikkében lesz szó részletesebben. Most beszéljünk az információs üzenetek továbbítására szolgáló felületről az intelligens otthoni vezérlőről a felhőbe.

A protokollon keresztül továbbítják a csatlakoztatott eszközök állapotát és az érzékelő méréseit MQTT, amelyet egyszerűsége és energiahatékonysága miatt gyakran használnak a tárgyak internete projektjeiben. Az MQTT kliens-szerver modellt használ, ahol az ügyfelek bizonyos témákra feliratkoznak a brókeren belül, és közzéteszik üzeneteiket. A bróker üzeneteket küld minden előfizetőnek a QoS (Quality of Service) szinten meghatározott szabályok szerint:

  • QoS 0 - maximum egyszer (nincs szállítási garancia);
  • QoS 1 - legalább egyszer (szállítási visszaigazolással);
  • QoS 2 - pontosan egyszer (további szállítási visszaigazolással).

A mi esetünkben használjuk Eclipse Mosquito. A téma neve az intelligens otthoni vezérlő egyedi azonosítója. A kiszolgálói folyamaton belüli MQTT-ügyfél feliratkozik erre a témakörre, és lefordítja az üzenetkezelőből érkező JSON-üzeneteket. Ezzel szemben az MQTT bróker üzeneteit továbbítja az üzenetkezelőnek, amely azután multiplexeli azokat az előfizetőihez a szerver folyamaton belül:

Cloud Smart Home. 1. rész: Vezérlő és érzékelők

Az intelligens otthoni vezérlő állapotáról szóló üzenetek továbbításához a mentett üzenetek mechanizmusát használják megtartott üzenetek MQTT protokoll. Ez lehetővé teszi, hogy megfelelően nyomon kövesse az újracsatlakozások időzítését áramkimaradás esetén.

Az MQTT klienst a könyvtári megvalósítás alapján fejlesztettük ki Eclipse Paho C++ nyelven.

A H.264 + AAC médiafolyamok az RTMP protokollon keresztül kerülnek a felhőbe, ahol a médiaszerverek fürtje felelős azok feldolgozásáért és tárolásáért. A terhelés optimális elosztása a fürtben és a legkevésbé terhelt médiaszerver kiválasztásához az intelligens otthon vezérlő előzetes kérést küld a felhőterheléselosztónak, és csak ezután küldi el a médiafolyamot.

Következtetés

A cikk egy olyan Raspberry Pi 3 B+ mikroszámítógépre épülő intelligens otthoni vezérlő egy konkrét megvalósítását vizsgálta, amely a Z-Wave protokollon keresztül képes információkat fogadni, feldolgozni és berendezéseket vezérelni, az ONVIF protokollon keresztül IP-kamerákkal kommunikálni, valamint adatcserét, ill. parancsokat a felhő szolgáltatással MQTT és RTMP protokollokon keresztül. A termelési logikai motort a logikai szabályok és a JSON formátumban bemutatott tények összehasonlítása alapján fejlesztették ki.

Az intelligens otthoni vezérlő jelenleg próbaüzem alatt áll több moszkvai és moszkvai régióban.

A vezérlő következő verziója más típusú eszközök (RF, Bluetooth, WiFi, vezetékes) csatlakoztatását tervezi. A felhasználók kényelme érdekében az érzékelők és az IP-kamerák csatlakoztatásának eljárása átkerül a mobilalkalmazásba. Vannak ötletek a szerver folyamatkódjának optimalizálására és a szoftverek operációs rendszerre történő portolására is OpenWrt. Ez lehetővé teszi, hogy megtakarítson egy külön vezérlőt, és átvigye az intelligens otthon funkcióit egy normál háztartási útválasztóra.

Forrás: will.com

Hozzászólás