Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Сёння, дзякуючы бурнаму развіццю мікраэлектронікі, каналаў сувязі, Інтэрнэт-тэхналогій і Штучнага Інтэлекту, тэма разумных дамоў становіцца ўсё больш і больш актуальнай. Чалавечае жыллё зведала істотныя змены з часоў каменнага веку і ў эпоху Прамысловай Рэвалюцыі 4.0 і Інтэрнэту Рэчаў стала зручным, функцыянальным і бяспечным. На рынак прыходзяць рашэнні, якія ператвараюць кватэру ці загарадную хату ў складаныя інфармацыйныя сістэмы, кіраваныя з любой кропкі свету з дапамогай смартфона. Прычым, для чалавека-машыннага ўзаемадзеяння ўжо не патрабуюцца веды моў праграмавання, — дзякуючы алгарытмам распазнання і сінтэзу гаворкі чалавек гаворыць з разумнай хатай на роднай мове.

Некаторыя сістэмы разумнай хаты, прадстаўленыя цяпер на рынку, з'яўляюцца лагічным развіццём сістэм хмарнага відэаназірання, распрацоўнікі якіх усвядомілі неабходнасць у комплексным рашэнні не толькі для кантролю, але і для кіравання выдаленымі аб'ектамі.

Вашай увазе прапануецца цыкл з трох артыкулаў, дзе будзе расказана аб усіх асноўных кампанентах сістэмы хмарнага разумнага дома, асабіста распрацаванай аўтарам і запушчанай у эксплуатацыю. Першы артыкул прысвечаны канцавым кліенцкаму абсталяванню, якое ўсталёўваецца ўсярэдзіне разумнай хаты, другая - архітэктуры сістэмы хмарнага захоўвання і апрацоўкі дадзеных, і, нарэшце, трэцяя - кліенцкаму з дадаткам для кіравання сістэмай на мабільных і стацыянарных прыладах.

Абсталяванне для разумнага дома

Перш пагаворым аб тым, як з звычайнай кватэры, дачы ці катэджа зрабіць разумную хату. Для гэтага, як правіла, патрабуецца размясціць у жыллі наступнае абсталяванне:

  1. датчыкі, якія вымяраюць розныя параметры навакольнага асяроддзя;
  2. выканаўчыя прылады, якія ўздзейнічаюць на вонкавыя аб'екты;
  3. кантролер, які вырабляе вылічэнні ў адпаведнасці з вымярэннямі датчыкаў і закладзенай логікай, і які выдае каманды для выканаўчых прылад.

На наступным малюнку паказана схема разумнай хаты, на якой размешчаны датчыкі працёку вады (1) у ваннай, тэмпературы (2) і асвятленні (3) у спальні, разумная разетка (4) на кухні і камера відэаназірання (5) у пярэднім пакоі.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

У цяперашні час шырокае распаўсюджванне атрымалі бесправадныя датчыкі, якія працуюць па пратаколах RF433, Z-Wave, ZigBee, Bluetooth і WiFi. Іх галоўныя перавагі - зручнасць мантажу і выкарыстання, а таксама таннасць і надзейнасць, т.я. вытворцы імкнуцца вывесці свае прылады на масавы рынак і зрабіць іх даступнымі радавому карыстачу.

Датчыкі і выканаўчыя прылады, як правіла, падлучаюцца па бесправадным інтэрфейсе да кантролера разумнай хаты (6) – спецыялізаванаму мікракампутару, які аб'ядноўвае ўсе гэтыя прылады ў адзіную сетку і кіраўніку імі.

Зрэшты, некаторыя рашэнні могуць сумяшчаць у сабе датчык, выканаўчая прылада і кантролер адначасова. Напрыклад, разумная разетка можа быць запраграмавана на ўключэнне ці выключэнне па раскладзе, а камера хмарнага відэаназірання ўмее запісваць відэа па сігнале дэтэктара руху. У найпростых выпадках можна абыйсціся без асобнага кантролера, але для стварэння гнуткай сістэмы са мноствам сцэнараў ён неабходзен.

Для падлучэння кантролера разумнай хаты да глабальнай сеткі можа быць скарыстаны звычайны Інтэрнэт-роўтар (7), які ўжо даўно стаў звыклым бытавым прыборам у любой хаце. Тут ёсць яшчэ адзін аргумент у карысць кантролера разумнай хаты - калі знікне сувязь з Інтэрнэт, то разумная хата працягне працу ў штатным рэжыме дзякуючы блоку логікі, якая захоўваецца ўсярэдзіне кантролера, а не ў хмарным сэрвісе.

Кантролер разумнай хаты

Кантролер для сістэмы хмарнай разумнай хаты, разгляданай у дадзеным артыкуле, распрацаваны на аснове аднаплатнага мікракампутара Raspberry Pi 3 model B+, Які быў выпушчаны ў сакавіку 2018 года і валодае дастатковымі рэсурсамі і прадукцыйнасцю для задач разумнага дома. У яго склад уваходзіць чатырохядзерны працэсар Cortex-A53 на 64-бітнай архітэктуры ARMv8-A, з тактавай частатой 1.4/1 Ггц, а таксама 802.11 ГБ АЗП, Wi-Fi 4.2ac, Bluetooth 2.0 і гігабітны адаптар Ethernet, які працуе праз шыну USB XNUMX.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Зборка кантролера вельмі простая – мікракампутар (1) усталёўваецца ў пластыкавы корпус (2), далей у яго ў адпаведныя слоты усталёўваецца 8 ГБ карта памяці ў фармаце microSD з праграмным забеспячэннем (3) і USB-кантролер сеткі Z-Wave (4). Кантролер разумнай хаты падлучаецца да электрасеткі праз адаптар сілкавання 5В, 2.1А (5) і кабель USB – micro-USB (6). Кожны кантролер мае ўнікальны ідэнтыфікацыйны нумар, які запісваецца ў файле канфігурацыі пры першым запуску і неабходзен для ўзаемадзеяння з сэрвісамі хмарнай разумнай хаты.

Праграмнае забеспячэнне кантролера разумнай хаты распрацавана аўтарам дадзенага артыкула на аснове аперацыйнай сістэмы Linux Raspbian Stretch. Яно складаецца з наступных асноўных падсістэм:

  • сервернага працэсу для ўзаемадзеяння з абсталяваннем разумнага дома і воблакам;
  • графічнага інтэрфейсу карыстальніка для наладкі канфігурацыі і працоўных параметраў кантролера;
  • базы дадзеных для захоўвання канфігурацыі кантролера.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

База дадзеных кантролера разумнага дома рэалізавана на аснове ўбудаванай СКБД SQLite і ўяўляе сабой файл на SD-карце з сістэмным ПЗ. Яна служыць сховішчам канфігурацыі кантролера – інфармацыі аб падлучаным абсталяванні і яго бягучым стане, блока лагічных прадукцыйных правіл, а таксама інфармацыі, якая патрабуе індэксацыі (напрыклад, імёнаў файлаў лакальнага відэаархіва). Пры перазагрузцы кантролера гэтая інфармацыя захоўваецца, што робіць магчымым аднаўленне працаздольнасці кантролера ў выпадку збояў электрасілкавання.

графічны інтэрфейс кантролера разумнага дома распрацаваны на мове PHP 7 з выкарыстаннем мікрафрэймворка стройны. За працу прыкладання адказвае вэб-сервер Lighttpd, часта які ўжываецца ва ўбудаваных прыладах дзякуючы сваёй добрай прадукцыйнасці і нізкім патрабаванням да рэсурсаў.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі
(клікніце на карцінку, каб адкрыць у большым дазволе)

Асноўнай функцыяй графічнага інтэрфейсу з'яўляецца падлучэнне абсталявання разумнай хаты (IP-камер відэаназірання і датчыкаў) да кантролера. Вэб-дадатак счытвае канфігурацыю і бягучы стан кантролера і падлучаных да яго прылад з БД SQLite. Для змены канфігурацыі кантролера яно пасылае кіравальныя каманды ў фармаце JSON праз інтэрфейс RESTful API сервернага працэсу.

Серверны працэс

Серверны працэс - Ключавы кампанент, які выконвае ўсю асноўную працу па аўтаматызацыі інфармацыйных працэсаў, якія складаюць аснову разумнага дома: атрыманне і апрацоўку сэнсарных дадзеных, выдачу кіраўнікоў уздзеянняў у залежнасці ад закладзенай логікі. Прызначэнне сервернага працэсу - узаемадзеянне з абсталяваннем разумнай хаты, выкананне прадукцыйных лагічных правіл, атрыманне і апрацоўка каманд ад графічнага інтэрфейсу і аблокі. Серверны працэс у разгляданым кантролеры разумнай хаты рэалізаваны як шматструменнае прыкладанне, распрацаванае на мове С++ і якое запускаецца як асобны сэрвіс Systemd аперацыйнай сістэмы Linux Raspbian.

Асноўнымі блокамі сервернага працэсу з'яўляюцца:

  1. Дыспетчар паведамленняў;
  2. Сервер IP-камеры;
  3. Сервер прылад Z-Wave;
  4. Сервер прадукцыйных лагічных правіл;
  5. База дадзеных канфігурацыі кантролера і блока лагічных правілаў;
  6. RESTful API сервер для ўзаемадзеяння з графічным інтэрфейсам;
  7. MQTT кліент для ўзаемадзеяння з воблакам.

Блокі сервернага працэсу рэалізаваны як асобныя патокі, інфармацыя паміж якімі перадаецца ў выглядзе паведамленняў у фармаце JSON (або структур даных, якія прадстаўляюць гэты фармат у памяці працэсу).

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Галоўным кампанентам сервернага працэсу з'яўляецца дыспетчар паведамленняў, Які маршрутызуе паведамленні ў фармаце JSON для ўсіх блокаў сервернага працэсу. Тыпы інфармацыйных палёў JSON-паведамлення і значэнні, якія яны могуць прымаць, пералічаны ў табліцы:

тып прылады
пратакол
messageType
deviceState
каманда

камера
onvif
sensorData
on
streaming(On/Off)

датчык
zwave
каманда
ад
recording(On/Off)

эффектор
MQTT
businessLogicRule
streaming(On/Off)
evice(Add/Remove)

businessLogic
configurationData
recording(On/Off)

Bluetooth
deviceState
памылка

Wi-Fi

rf

Напрыклад, паведамленне ад дэтэктара руху камеры выглядае наступным чынам:

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

Прадукцыйная логіка

Каб атрымаць або адправіць паведамленне ад дыспетчара, блок сервернага працэсу падпісваецца на паведамленні вызначанага тыпу. Падпіска ўяўляе сабой прадукцыйнае лагічнае правіла тыпу «Калі…, то…», прадстаўленае ў JSON фармаце, і спасылку на апрацоўшчык паведамлення ўнутры блока сервернага працэсу. Напрыклад, каб сервер IP-камеры мог атрымліваць каманды ад графічнага інтэрфейсу і аблокі, трэба дадаць наступнае правіла:

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

Калі ўмовы, указаныя ў антэдэнтэ (левай частцы) правілы з'яўляюцца сапраўднымі, то выконваецца кансіквент (правая частка) правілы, і апрацоўшчык атрымлівае доступ да цела JSON-паведамленні. У антцэдэнце падтрымліваюцца лагічныя аператары, якія выконваюць параўнанне JSON-пар "ключ-значэнне":

  1. роўна "equal";
  2. не роўна "not_equal";
  3. менш "less";
  4. больш "greater";
  5. менш або роўна "less_or_equal";
  6. больш ці роўна "greater_or_equal".

Вынікі параўнання можна звязваць паміж сабой з дапамогай аператараў булевай алгебры:

  1. І "and";
  2. АБО "or";
  3. НЕ "not".

Такім чынам, запісваючы аператары і аперанд ў польскай натацыі, можна фармаваць досыць складаныя ўмовы з вялікай колькасцю параметраў.

Дакладна такі ж механізм, заснаваны на JSON-паведамленнях і правілах прадукцый у JSON фармаце, ужываецца ў блоку сервера прадукцыйнай логікі для прадстаўлення ведаў і ажыццяўленні лагічнай высновы з выкарыстаннем сэнсарных дадзеных з датчыкаў разумнай хаты.

Карыстальнік з дапамогай мабільнага прыкладання складае сцэнары, па якіх павінен функцыянаваць разумны дом. Напрыклад: "Калі спрацаваў датчык адкрыцця ўваходных дзвярэй, то ўключыць святло ў пярэднім пакоі". Прыкладанне счытвае з базы дадзеных ідэнтыфікатары датчыкаў (датчык адкрыцця) і выканаўчых прылад (разумная разетка або разумная лямпа) і фармуе лагічнае правіла ў фармаце JSON, якое перасылаецца ў кантролер разумнай хаты. Больш падрабязна гэты механізм будзе разгледжаны ў трэцім артыкуле нашага цыклу, дзе пойдзе размова аб кліенцкім дадатку для кіравання разумным домам.

Разгледжаны вышэй механізм прадукцыйнай логікі рэалізаваны з дапамогай бібліятэкі RapidJSON - SAX-парсера фармату JSON на мове З++. Паслядоўнае чытанне і разбор масіва прадукцыйных правіл дазваляе лёгка рэалізаваць функцыю супастаўлення дадзеных усярэдзіне антецедентов:

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

Тут pFact - структура, якая змяшчае пары «ключ-значэнне» з JSON-паведамлення, m_Rules - Радковы масіў прадукцыйных правілаў. Супастаўленне ўваходнага паведамлення і правілы прадукцыі вырабляецца ў функцыі reader.Parse(ruleStream, ruleHandler), Дзе ruleHandler - Гэта аб'ект, які змяшчае логіку булева аператараў і аператараў параўнання. sRuleId - Унікальны ідэнтыфікатар правіла, дзякуючы якому магчыма захоўваць і рэдагаваць правілы ўнутры базы дадзеных кантролера разумнага дома. m_pActions - масіў з вынікамі лагічнай высновы: JSON-паведамленнямі, утрымоўвальнымі кансіквенты з базы правіл і перасыланыя далей у дыспетчар паведамленняў, каб струмені-падпісчыкі маглі іх апрацаваць.

Прадукцыйнасць RapidJSON супастаўная з функцыяй strlen(), а мінімальныя патрабаванні да сістэмных рэсурсаў дазваляюць выкарыстоўваць гэтую бібліятэку ва ўбудаваных прыладах. Выкарыстанне паведамленняў і лагічных правіл у JSON-фармаце дазваляе рэалізаваць гнуткую сістэму інфармацыйнага абмену паміж усімі кампанентамі кантролера разумнай хаты.

Датчыкі і выканаўчыя прылады Z-Wave

Галоўная перавага разумнай хаты ў тым, што ён умее самастойна вымяраць розныя параметры навакольнага асяроддзя і выконваць карысныя функцыі ў залежнасці ад сітуацыі. Для гэтага да кантролера разумнай хаты падлучаюцца датчыкі і выканаўчыя прылады. У бягучай версіі - гэта бесправадныя прылады, якія працуюць па пратаколе Хвалі зубцоў на спецыяльна выдзеленай частаце 869 МГц для Расіі. Для сваёй працы яны аб'ядноўваюцца ў mesh-сетку, у якой прысутнічаюць рэтранслятары сігналу, каб павялічыць зону пакрыцця. Таксама прылады маюць спецыяльны рэжым энергазберажэння - большую частку часу яны праводзяць у спячым рэжыме і адпраўляюць інфармацыю толькі пры змене свайго стану, што дазваляе істотна падоўжыць жыццё убудаванай батарэі.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

На рынку зараз можна знайсці дастаткова вялікая колькасць розных прылад Z-Wave. У якасці прыкладу разгледзім некалькі:

  1. Разумная разетка Zipato PAN16 можа вымяраць наступныя параметры: спажыванне электраэнергіі (кВт/ч), магутнасць (Вт), напруга (У) і ток (А) у электрасеткі. Таксама яна мае ўбудаваны выключальнік, з дапамогай якога можна кіраваць падлучаным электрапрыборам;
  2. Датчык працёку Neo Coolcam вызначае наяўнасць разлітай вадкасці па замыканні кантактаў выноснага маца;
  3. Датчык задымлення Zipato PH-PSG01 спрацоўвае пры трапленні часціц дыму ў камеру газааналізатара;
  4. Датчык руху Neo Coolcam аналізуе інфрачырвонае выпраменьванне цела чалавека. Дадаткова маецца датчык асветленасці (Лк);
  5. Мультысэнсар Philio PST02-A вымярае тэмпературу (°C), асветленасць (%), адкрыццё дзвярэй, прысутнасць чалавека ў памяшканні;
  6. Кантролер сеткі Z-Wave USB Stick ZME E UZB1, да якога падключаюцца датчыкі.

Вельмі важна, каб прылады і кантролер працавалі на адной частаце, - інакш яны, па-просту, не ўбачаць адзін-аднаго ў момант падключэння. Да аднаго кантролеру сеткі Z-Wave можна падлучыць да 232 прылад, што цалкам дастаткова для кватэры ці загараднай хаты. Для пашырэння зоны пакрыцця сеткі ўсярэдзіне памяшканняў разумная разетка можа быць скарыстана як рэтранслятар сігналу.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

У серверным працэсе кантролера разумнай хаты, разгледжаным у папярэднім пункце, за ўзаемадзеянне з прыладамі Z-Wave адказвае сервер Z-Wave. Для атрымання інфармацыі з датчыкаў ён выкарыстоўвае бібліятэку OpenZWave на мове З++, якая падае інтэрфейс для ўзаемадзеяння з USB-кантролерам сеткі Z-Wave і працуе са мноствам датчыкаў і выканаўчых прылад. Значэнне параметра навакольнага асяроддзя, вымеранай датчыкам, запісваецца серверам Z-Wave у выглядзе JSON-паведамленні:

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

Далей яно перасылаецца ў дыспетчар паведамленняў сервернага працэсу, каб плыні-падпісчыкі маглі яго атрымаць. Асноўным падпісчыкам з'яўляецца сервер прадукцыйнай логікі, які супастаўляе значэнні палёў паведамлення ў антцэдэнтах лагічных правіл. Вынікі лагічнай высновы, утрымоўвальныя каманды кіравання, перасылаюцца зваротна ў дыспетчар паведамленняў і адтуль пападаюць у сервер Z-Wave, які іх дэкадуе і адсылае ў USB-кантролер сеткі Z-Wave. Далей яны трапляюць у выканаўчую прыладу, якое змяняе стан аб'ектаў навакольнага асяроддзя, і разумная хата, такім чынам, здзяйсняе карысную працу.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі
(клікніце на карцінку, каб адкрыць у большым дазволе)

Падлучэнне прылад Z-Wave вырабляецца ў графічным інтэрфейсе кантролера разумнай хаты. Для гэтага трэба перайсці на старонку са спісам прылад і націснуць кнопку "Дадаць". Каманда дадання праз інтэрфейс RESTful API пападае ў серверны працэс і, затым, перасылаецца дыспетчарам паведамленняў серверу Z-Wave, які перакладае USB-кантролер сеткі Z-Wave у адмысловы рэжым дадання прылад. Далей, на прыладзе Z-Wave трэба вырабіць серыю хуткіх націскаў (3 націскі ў плыні 1,5 секунд) сэрвіснай кнопкі. USB-кантролер падлучае прыладу ў сетку і адпраўляе інфармацыю аб ім у сервер Z-Wave. Той, у сваю чаргу, стварае новы запіс у БД SQLite з параметрамі новай прылады. Графічны інтэрфейс па заканчэнні зададзенага інтэрвалу часу вяртаецца на старонку спісу прылад Z-Wave, счытвае інфармацыю з БД і адлюстроўвае новую прыладу ў спісе. Кожная прылада пры гэтым атрымлівае свой унікальны ідэнтыфікатар, які выкарыстоўваецца ў правілах прадукцыйнай лагічнай высновы і пры працы ў воблаку. Праца гэтага алгарытму паказана на UML-дыяграме:

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі
(клікніце на карцінку, каб адкрыць у большым дазволе)

Падключэнне IP-камер

Сістэма хмарнага разумнага дома, разгляданая ў дадзеным артыкуле, з'яўляецца мадэрнізацыяй сістэмы хмарнага відэаназірання, таксама распрацаванай аўтарам, якая ўжо некалькі гадоў прысутнічае на рынку і мае мноства усталёвак у Расіі.

Для сістэм хмарнага відэаназірання адной з вострых праблем з'яўляецца абмежаваны выбар абсталявання, з якім можна зрабіць інтэграцыю. Праграмнае забеспячэнне, якое адказвае за падлучэнне да воблака, усталёўваецца ўсярэдзіне відэакамеры, што адразу ж прад'яўляе сур'ёзныя патрабаванні да яе апаратнага начыння - працэсару і колькасці вольнай памяці. Гэтым, галоўным чынам, і тлумачыцца больш высокі кошт камер хмарнага відэаназірання ў параўнанні са звычайнымі IP-камерамі. Акрамя гэтага, патрабуецца працяглы этап перамоваў з кампаніямі-вытворцамі камер відэаназірання для атрымання доступу да файлавай сістэмы камеры і ўсіх неабходных сродкаў распрацоўкі.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

З іншага боку, усе сучасныя IP-камеры маюць стандартныя пратаколы для ўзаемадзеяння з іншым абсталяваннем (у прыватнасці, відэарэгістратарамі). Такім чынам, выкарыстанне асобнага кантролера, які ажыццяўляе падлучэнне па стандартным пратаколе і трансляцыю відэаструменяў з IP-камер у воблака, падае істотныя канкурэнтныя перавагі для сістэм хмарнага відэаназірання. Больш таго, калі ў кліента была ўжо ўсталяваная сістэма відэаназірання на аснове простых IP-камер, тое з'яўляецца магчымасць яе пашырэння і ператварэнні ў паўнавартасную хмарную разумную хату.

Самы папулярны пратакол для сістэм IP-відэаназірання, які падтрымліваецца цяпер усімі без выключэння вытворцамі IP-камер, – гэта ONVIF профіль S, спецыфікацыі якога існуюць на мове апісання вэб-сэрвісаў WSDL. З дапамогай утыліт з інструментара gSOAP магчыма згенераваць зыходны код сэрвісаў, якія працуюць з IP-камерамі:

$ 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

У выніку мы атрымліваем набор загалоўкавых "*.h" і зыходных "*.cpp" файлаў на мове З++, які можна змясціць прама ў дадатак або асобную бібліятэку і адкампіляваць з дапамогай кампілятара GCC. З-за мноства функцый код атрымоўваецца вялікім і патрабуе дадатковай аптымізацыі. Мікракампутар Raspberry Pi 3 model B+ валодае дастатковай прадукцыйнасцю, каб выконваць гэты код, але ў выпадку, калі ўзнікне неабходнасць партаваць код на іншую платформу, неабходна правільна падабраць працэсарную архітэктуру і сістэмныя рэсурсы.

IP-камеры, якія падтрымліваюць стандарт ONVIF, пры функцыянаванні ў лакальнай сетцы падлучаюцца да спецыяльнай мультыкаставай групы з адрасам 239.255.255.250. Існуе пратакол WS Discovery, які дазваляе аўтаматызаваць пошук прылад у лакальнай сетцы.

У графічным інтэрфейсе кантролера разумнай хаты рэалізаваная функцыя пошуку IP-камер на мове PHP, які вельмі зручны пры ўзаемадзеянні з вэб-сэрвісамі пасродкам XML-паведамленняў. Пры выбары пунктаў меню Прылады > IP-камеры > Сканіраванне запускаецца алгарытм пошуку IP-камер, які выводзіць вынік у выглядзе табліцы:

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі
(клікніце на карцінку, каб адкрыць у большым дазволе)

Пры даданні камеры ў кантролер можна паказаць налады, у адпаведнасці з якімі яна будзе ўзаемадзейнічаць з воблакам. Таксама на гэтым этапе ёй аўтаматычна прысвойваецца ўнікальны ідэнтыфікатар прылады, па якім яе ў далейшым можна будзе лёгка ідэнтыфікаваць усярэдзіне аблокаў.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Далей фармуецца паведамленне ў фармаце JSON, утрымоўвальнае ўсе параметры якая дадаецца камеры, і адпраўляецца ў серверны працэс кантролера разумнай хаты праз каманду RESTful API, дзе параметры камеры дэкадуюцца і захоўваюцца ва ўнутранай БД SQLite, а таксама выкарыстоўваюцца для запуску наступных струменяў апрацоўкі:

  1. ўсталявання RTSP-злучэнні для атрымання відэа і аўдыё струменяў;
  2. транскадавання аўдыё з фарматаў G.711 mu-Law, G.711 A-Law, G.723, ітд. у фармат AAC;
  3. транскадавання струменяў відэа ў фармаце H.264 і аўдыё ў фармаце AAC у кантэйнер FLV і перадача яго ў воблака па пратаколе RTMP;
  4. усталяванні злучэння з канчатковай кропкай дэтэктара руху IP-камеры па пратаколе ONVIF і яе перыядычнае апытанне;
  5. перыядычнай генерацыі паменшанай выявы папярэдняга прагляду (preview) і перасылцы яго ў воблака па пратаколе MQTT;
  6. лакальнай запісу відэа і аўдыё патокаў у выглядзе асобных файлаў у фармаце MP4 на SD- або Flash-карту кантролера разумнага дома.

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Для ўсталявання злучэння з камерамі, транскадавання, апрацоўкі і запісы відэаструменяў у серверным працэсе выкарыстоўваюцца функцыі з бібліятэкі FFmpeg 4.1.0.

У эксперыменце на тэставанне прадукцыйнасці да кантролера былі падлучаныя 3 камеры:

  1. HiWatch DS-I114W (дазвол – 720p, фармат сціску – H.264, бітрэйт – 1 Mb/s, гук G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (дазвол - 1080p, фармат сціску - H.264, бітрэйт - 1 Mb/s, без гуку);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (дазвол – 1080p, фармат сціску – H.264, бітрэйт – 1.5 Mb/s, гук AAC).

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Усе тры патокі адначасова выводзіліся ў воблака, транскадаванне гуку ажыццяўлялася толькі з адной камеры, запіс лакальнага архіва была адключана. Загрузка CPU склала прыкладна 5%, выкарыстанне RAM – 32 МБ (на працэс), 56 МБ (усяго разам з АС).

Такім чынам, да кантролера разумнай хаты можна падлучыць прыкладна 20 - 30 камер (у залежнасці ад дазволу і бітрэйту), што досыць для сістэмы відэаназірання трохпавярховага катэджа ці невялікага склада. У задачах, дзе патрабуецца вялікая прадукцыйнасць, можна выкарыстоўваць неттоп з шмат'ядравым працэсарам Intel і АС Linux Debian Sarge. Цяпер кантролер праходзіць доследную эксплуатацыю, і даныя аб прадукцыйнасці яго работы будуць удакладняцца.

Узаемадзеянне з воблакам

Воблачнае разумны дом захоўвае карыстацкія дадзеныя (відэа і вымярэння датчыкаў) у воблаку. Больш падрабязна архітэктура воблачнага сховішча будзе разгледжана ў наступным артыкуле нашага цыкла. Цяпер пагаворым аб інтэрфейсе перадачы інфармацыйных паведамленняў ад кантролера разумнага дома ў воблака.

Станы падлучаных прылад і вымярэнні датчыкаў перадаюцца па пратаколе MQTT, Які часта ўжываецца ў праектах Інтэрнэту Рэчаў з-за прастаты і энергаэфектыўнасці. MQTT выкарыстоўвае кліент-серверную мадэль, калі кліенты падпісваюцца на пэўныя топікі ўнутры брокера і публікуюць свае паведамленні. Брокер рассылае паведамленні ўсім падпісантам па правілах, якія вызначаюцца ўзроўнем QoS (Quality of Service):

  • QoS 0 - максімум адзін раз (няма гарантыі дастаўкі);
  • QoS 1 - хоць бы адзін раз (з пацверджаннем дастаўкі);
  • QoS 2 – роўна адзін раз (з дадатковым пацверджаннем дастаўкі).

У нашым выпадку ў якасці MQTT-брокера выкарыстоўваецца Зацьменны камар. Імем топіка з'яўляецца ўнікальны ідэнтыфікатар кантролера разумнага дома. MQTT-кліент усярэдзіне сервернага працэсу падпісваецца на дадзены топік і транслюе ў яго JSON-паведамленні, якія прыходзяць ад дыспетчара паведамленняў. І, наадварот, паведамленні з MQTT-брокера перасылаюцца ім у дыспетчар паведамленняў, які далей мультыплексуе іх сваім падпісантам усярэдзіне сервернага працэсу:

Хмарны Разумны Дом. Частка 1: Кантролер і датчыкі

Для перадачы паведамленняў аб стане кантролера разумнай хаты выкарыстоўваецца механізм захаваных паведамленняў retained messages пратаколу MQTT. Гэта дазваляе правільна адсочваць моманты перападлучэнняў пры збоях электрасілкавання.

MQTT-кліент быў распрацаваны на аснове рэалізацыі бібліятэкі Eclipse Paho на мове З++.

Медыяструмені H.264 + AAC адпраўляюцца ў воблака па пратаколе RTMP, дзе за іх апрацоўку і захоўванне адказвае кластар медыясервераў. Для аптымальнага размеркавання нагрузкі ў кластары і выбару найменш загружанага медыясервера кантролер разумнай хаты робіць папярэдні запыт да хмарнага балансавальніка нагрузкі і толькі пасля гэтага адпраўляе медыяпаток.

Заключэнне

У артыкуле была разгледжана адна канкрэтная рэалізацыя кантролера разумнай хаты на базе мікракампутара Raspberry Pi 3 B+, ​​які ўмее атрымліваць, апрацоўваць інфармацыю і кіраваць абсталяваннем па пратаколе Z-Wave, узаемадзейнічаць з IP-камерамі па пратаколе ONVIF, а таксама абменьваецца дадзенымі і камандамі з хмарным сэрвісам па пратаколах MQTT і RTMP. Распрацаваны рухавічок прадукцыйнай логікі на аснове супастаўлення лагічных правіл і фактаў, прадстаўленых у JSON фармаце.

Цяпер кантролер разумнай хаты праходзіць доследную эксплуатацыю на некалькіх аб'ектах у Маскве і Падмаскоўі.

У наступнай версіі кантролера плануецца падлучэнне прылад іншых тыпаў (RF, Bluetooth, WiFi, правадныя). Для зручнасці карыстальнікаў працэдура падключэння датчыкаў і IP-камер будзе перанесена ў мабільнае прыкладанне. Таксама ёсць ідэі па аптымізацыі кода сервернага працэсу і партаванні праграмнага забеспячэння на аперацыйную сістэму. OpenWrt. Гэта дазволіць зэканоміць на асобным кантролеры і перанесці функцыянал разумнага дома ў звычайны бытавы роўтэр.

Крыніца: habr.com

Дадаць каментар