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

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

Сьогодні, завдяки бурхливому розвитку мікроелектроніки, каналів зв'язку, Інтернет-технологій та Штучного Інтелекту, тема розумних будинків стає все більш актуальною. Людське житло зазнало суттєвих змін з часів кам'яного віку та в епоху Промислової Революції 4.0 та Інтернету Речів стало зручним, функціональним та безпечним. На ринок приходять рішення, що перетворюють квартиру або заміський будинок на складні інформаційні системи, керовані з будь-якої точки світу за допомогою смартфона. Причому для людино-машинної взаємодії вже не потрібні знання мов програмування, — завдяки алгоритмам розпізнавання та синтезу мови людина розмовляє з розумним будинком рідною мовою.

Деякі системи розумного будинку, представлені зараз на ринку, є логічним розвитком систем хмарного відеоспостереження, розробники яких усвідомили необхідність комплексного рішення не тільки для контролю, а й для управління віддаленими об'єктами.

До вашої уваги пропонується цикл із трьох статей, де буде розказано про всі основні компоненти системи хмарного розумного будинку, особисто розробленої автором та запущеної в експлуатацію. Перша стаття присвячена кінцевому клієнтському обладнанню, яке встановлюється всередині розумного будинку, друга — архітектурі системи хмарного зберігання та обробки даних, і, нарешті, третя — клієнтському додатку для управління системою на мобільних та стаціонарних пристроях.

Обладнання для розумного будинку

Спершу поговоримо про те, як із звичайної квартири, дачі чи котеджу зробити розумний будинок. Для цього, як правило, потрібно розмістити в оселі наступне обладнання:

  1. датчики, що вимірюють різні параметри зовнішнього середовища;
  2. виконавчі пристрої, що впливають зовнішні об'єкти;
  3. контролер, що робить обчислення відповідно до вимірювань датчиків і закладеної логіки, і видає команди для виконавчих пристроїв.

На наступному малюнку показана схема розумного будинку, на якій розташовані датчики протікання води (1) у ванній, температури (2) та освітлення (3) у спальні, розумна розетка (4) на кухні та камера відеоспостереження (5) у передпокої.

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

В даний час широкого поширення набули бездротові датчики, що працюють за протоколами RF433, Z-Wave, ZigBee, Bluetooth та WiFi. Їхні головні переваги — зручність монтажу та використання, а також дешевизна та надійність, т.к. виробники прагнуть вивести свої пристрої на масовий ринок і зробити їх доступними пересічному користувачеві.

Датчики і виконавчі пристрої, як правило, підключаються бездротовим інтерфейсом до контролера розумного будинку (6) - спеціалізованому мікрокомп'ютеру, що об'єднує всі ці пристрої в єдину мережу і управляє ними.

Втім, деякі рішення можуть поєднувати датчик, виконавчий пристрій і контролер одночасно. Наприклад, розумна розетка може бути запрограмована на включення або вимкнення за розкладом, а камера відеоспостереження хмарного вміє записувати відео за сигналом детектора руху. У найпростіших випадках можна обійтися без окремого контролера, але для створення гнучкої системи з багатьма сценаріями він необхідний.

Для підключення контролера розумного будинку до глобальної мережі може бути використаний звичайний Інтернет-роутер (7), який давно став звичним побутовим приладом у будь-якому будинку. Тут є ще один аргумент на користь контролера розумного будинку — якщо зникне зв'язок з Інтернетом, то розумний будинок продовжить роботу в штатному режимі завдяки блоку логіки, що зберігається всередині контролера, а не в хмарному сервісі.

Контролер розумного будинку

Контролер для системи розумного хмарного будинку, що розглядається в даній статті, розроблений на основі одноплатного мікрокомп'ютера Raspberry Pi 3 модель B+, який був випущений у березні 2018 року і має достатні ресурси та продуктивність для завдань розумного будинку. До його складу входить чотириядерний процесор Cortex-A53 на 64-бітній архітектурі ARMv8-A, з тактовою частотою 1.4 ГГц, а також 1 ГБ ОЗУ, Wi-Fi 802.11ac, Bluetooth 4.2 та гігабітний адаптер Ethernet, що працює через шину USB 2.0.

Хмарний Розумний Дім. Частина 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 з використанням мікрофреймворку Slim. За роботу програми відповідає веб-сервер 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-повідомлення та значення, які вони можуть набувати, перераховані в таблиці:

deviceType
протокол
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

Головна перевага розумного будинку в тому, що він вміє самостійно вимірювати різні параметри довкілля та виконувати корисні функції залежно від ситуації. Для цього до контролера розумного будинку підключаються датчики та виконавчі пристрої. У поточній версії це бездротові пристрої, що працюють за протоколом 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-клієнт був розроблений на основі реалізації бібліотеки Затемнення Пахо мовою С++.

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

Висновок

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

Зараз контролер розумного будинку проходить дослідну експлуатацію на кількох об'єктах у Москві та Підмосков'ї.

У наступній версії контролера планується підключення інших типів пристроїв (RF, Bluetooth, WiFi, дротові). Для зручності користувачів процедуру підключення датчиків та IP-камер буде перенесено в мобільний додаток. Також є ідеї щодо оптимізації коду серверного процесу та портування програмного забезпечення на операційну систему En openwrt. Це дозволить заощадити на окремому контролері та перенести функціонал розумного будинку у звичайний побутовий роутер.

Джерело: habr.com

Додати коментар або відгук