Як і чому слід будувати пристрої Інтернету речей за допомогою Node.js

У цій статті ми обговоримо, чому і як ви можете використовувати Node.js для серверних пристроїв Інтернету речей (IoT).

Зрозумійте ділові можливості

У 2019 році ринковий дохід IoT досяг 212 мільярдів доларів. У всьому світі налічується близько 26,66 млрд підключених пристроїв IoT, і до 2025 р. Це число має досягти 75,44 млрд.  

За підрахунками ООН, у лютому 2020 року чисельність населення світу в даний час становить 7,7 мільярда чоловік. Проста математика говорить нам, що пересічна людина володіє приблизно 3-4 пристроями IoT. У вас є? Може, розумний годинник? Розумний телевізор? Або розумний автомобіль?

Просуваючись далі, очікується, що в 2025 році населення досягне 8,1 мільярда чоловік. Той самий математичний розрахунок показує нам, що в 2025 році середня людина матиме від 9 до 10 розумних пристроїв.

Ти бачиш, куди я з цим іду? Ви хочете приєднатися до цієї прибуткової ринкової ніші та зробити свій пристрій IoT одним із цих 9-10?

Статистика отримана у Statista та ООН.

Виберіть правильний фреймворк

Клієнтська частина пристрою IoT представлена ​​самим обладнанням. Він запрограмований на C, C ++ або Lua - низькорівневі та складні мови програмування. Але з цим не можна багато чого зробити через апаратні обмеження.

Поряд з високою продуктивністю, користувачі пристроїв IoT надають пріоритет низькій вартості та енергоефективності. Таким чином, принаймні зараз, вам слід продовжувати працювати з мовами низького рівня.

З іншого боку, серверна частина програм IoT пропонує вам більше свободи вибору. Тут ви не обмежені апаратним забезпеченням, тому ви можете вибрати будь-яку мову кодування та фреймворк, який вам більше подобається.

Я вважаю, що правильним є Node.js. Ось чому.

Node.js швидкий і продуктивний

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

Node.js побудований на двигуні V8 JS від Google, який є високоефективним та ідеально масштабованим. Завдяки цій функції Node.js - це фреймворк номер один, який слід використовувати з програмами та платформами в режимі реального часу. Постійна зміна даних також не є проблемою для нього.

Node.js легко інтегрувати з протоколами IoT

Програми IoT активно використовують протокол обміну повідомленнями на основі публікації-передплати, MQTT. У свою чергу, для транспортування та інкапсуляції цей протокол використовує WebSockets. І MQTT, і WebSockets добре підтримуються і легко інтегруються з Node.js.

Модулі Node.js сприяють розробці IoT

Node.js доповнено npm, диспетчером пакетів вузлів, який містить багато корисних модулів IoT. Існує близько 80 пакетів для Intel IoT Edison, Arduino або Raspberry Pi. Крім того, він містить понад 30 пакетів для різних датчиків, маяків та інших інструментів.

Ось чому розробка Інтернету речей простіша і швидша за допомогою модулів IoT Node.js.

Node.js є ресурсоефективним та масштабованим

Загалом, розробники віддають перевагу роботі з Node.js, оскільки для цього не потрібно багато ресурсів. Процесор і оперативна пам'ять не перевантажені.

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

Остерігайтеся викликів

Вхід у нішу IoT може привести вас до шляху до успіху. Тож не дивно, що на вашому шляху чекає багато викликів та пасток - досягнення успіху ніколи не буває простим. І перша і головна проблема, про яку ви повинні знати, - це безпека.

Безпека - одна з головних проблем у сфері IoT, і одна з перших підводних каменів, на яку ви натрапите. То що ти повинен робити?

Безпечна автентифікація

Почнемо з автентифікації. У Node.js існує безліч інструментів для автентифікації: маркери, веб-маркери JSON, Auth0 тощо. Кожен має свої переваги та недоліки. Для початку слід поглянути на них з точки зору IoT.

З одного боку, токени ефективні, але не на 100 відсотків безпечні . Вони є крутим способом налаштування автентифікації, оскільки дозволяють ідентифікувати конкретного користувача та вирішити, надати чи заборонити їм доступ. Токен можна зашифрувати за допомогою будь-якого алгоритму.

Однак апаратне забезпечення (сканери, датчики, концентратори або інші речі IoT) повинно зберігати цей маркер або дані входу / пароля у прошивку. Це означає, що зловмисники можуть викрасти маркер, якщо мають фізичний доступ до обладнання. Те саме стосується JWT або Auth0.

З іншого боку, ми можемо використовувати будь-які інструменти для автентифікації на стороні сервера. Ви можете легко інтегрувати будь-який інструмент автентифікації на платформі Node.js.

Існує багато пакетів npm, які дозволяють робити це вручну: Auth0, Passport та JWT. Існують також пакети для інтеграції з хмарними послугами IoT: @ azure-iot / аутентифікація, aws-iot-device-sdk тощо.

Захищені HTTP-запити

Далі, будьте обережні з HTTP-запитами з ваших пристроїв IoT.Вам слід перевірити, чи отримуєте ви запит від відповідного пристрою IoT.

По-перше, слід застосувати HTTPS на своїх пристроях IoT. Апаратне забезпечення не є браузером, і вам слід впровадити HTTPS вручну на ньому. На стороні сервера ви можете зробити це вручну або скористатися хостингом із конфігурацією HTTPS та сертифікатами.

У Node.js це досить легко реалізувати:

const express = require('express'); const https = require('https'); const http = require('http'); const fs = require('fs'); const options = { key: fs.readFileSync('path/to/your/key.pem'), cert: fs.readFileSync(path/to/your/certificate.cert') }; const app = express(); http.createServer(app).listen(80); https.createServer(options, app).listen(443); 

HTTPS використовує протоколи SSL або TLS для шифрування даних. Однак, щоб бути впевненим, що Ви отримали запит від необхідного сервера або клієнта, використовуйте додаткове шифрування даних. Наприклад, ось як ви можете використовувати підпис:

const fetch = require('node-fetch'); const verifier = crypto.createVerify('RSA-SHA1') const SIGNATURE_FORMAT = 'base64'; //check if it trusted url for your certificate const trustedUrl = ‘//trustedUrl/’ const isTrustedUrl = trustedUrl.match(url); If (isTrustedUrl) { verifier.update(req.body, 'utf8') fetch(isTrustedUrl) .then(certificate => { // check signature const isValidSignature = verifier.verify(certificate, reg.header.signature, SIGNATURE_FORMAT); }) .catch(err => console.log(err)); }

Щоб завершити цю частину:

  1. По-перше, вам потрібно перевірити надійну URL-адресу вашого сертифіката.
  2. Потім ви підписуєте тіло запиту відкритим ключем із вашого сертифіката.
  3. Нарешті, ви порівнюєте підписане тіло з підписом із заголовків.

Надзвичайно важливо знати, що ви отримуєте запити від відповідних пристроїв і що ви не стикаєтесь із середньою атакою.

Перегляньте ці приклади

Асама - відстеження руху ваших співробітників

асама

Asama - це система мікролокації, яка використовує розумні годинники та маяки Bluetooth для відстеження руху та активності співробітників. Маяки передають звичайний сигнал.

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

Маяк Асамитрекер асами -

Далі дані передаються в мобільний додаток, який встановлюється та налаштовується на телефоні роботодавця. Система працює на основі Node.js в IoT.

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

This solution might not suit a business with a small office and flexible hours. Yet, it works perfectly for industrial plants, construction sites, factories, warehouses, shopping centers, supermarkets, hotels, security agencies, restaurants, or stores.

It's well-suited anywhere you as an employer need to know if employees are coming too late or leaving too early, being absent at the working place, not working actively throughout the day, or not following routes and schedules.

клієнтами асами

PREE – finding your belongings

PREE  is a system of BLE beacons and mobile software which helps people stop losing their stuff. It is a lifesaver for those who often forget their phone, bag, keys, wallet, or any other valuable belongings.

The user can see the location of their item in real time and share it with trusted contacts. Once the item is out of range, they will get a notification, and so will their friends or family members. It doesn't spam others with notifications when they are not needed – for example, when at home, the user can mute them for a certain area.

This Internet of Things IoT system is built with Node.js, Express, and Mongo on the backend and Ionic with Cordova for the frontend. The combination of these frameworks ensures the best user experience.

PREE

Validate your idea

Once you have an idea for an IoT product, start with validating  it. You can do this in two ways:

  • Hire an idea validation team, who will help you test the viability of your product before you invest in development, or
  • Наймайте команду розробників та розробників програмного забезпечення, яка розпочне широкий процес виявлення продукту.

Приписка

Я хотів би надіслати величезну подяку Володі Андрущаку, гуру IoT у KeenEthics, за те, що він зробив внесок у цю статтю та вдихнув її в життя.

Якщо вам сподобалася стаття, вам неодмінно слід прочитати трохи більше про Node.js: які переваги Node.JS? або NodeJS проти Python: як вибрати найкращу технологію для розробки заднього плану веб-програми.

Оригінальну статтю, опубліковану в блозі KeenEthics, можна знайти тут: IoT та Node.JS: Як зловити можливість?