de Abdelkrim Hadjidj

Cum se construiește un sistem IIoT folosind Apache NiFi, MiNiFi, C2 Server, MQTT și Raspberry Pi

Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Fotografie de Brent De Ranter pe Unsplash

Cât timp credeți că este nevoie pentru a construi un prototip avansat de IoT industrial care poate:

  • Colectați date de la senzori la o poartă la fiecare fabrică
  • Mutați datele senzorilor dintr-una sau mai multe fabrici în Cloud sau în Centrul de date
  • Warm-Implement automat configurări noi pe toate dispozitivele de margine
  • Sprijiniți volumul de date la scară largă și securitatea end-to-end

Cu instrumentul potrivit, puteți construi un astfel de sistem în mai puțin de o oră! În această postare de blog, vă voi arăta cum să implementați un prototip IIoT avansat folosind hardware Raspberry Pi și software open source (broker MQTT, Apache NiFi, MiNiFi și MiNiFi C2 Server). Mă voi concentra asupra arhitecturii, conectivității, colectării datelor și reconfigurării automate.

Acest articol este menit să fie începutul unei serii de articole despre IoT. Procesarea Edge și analiza datelor vor face obiectul următoarelor articole, așa că rămâneți la curent 🙂

Arhitectură industrială IoT

Există o mulțime de arhitecturi de referință IoT. Adesea, în medii industriale, nu aveți acces direct la senzori și sisteme de control. O poartă este utilizată pentru a face legătura între VT și lumea IT. Din acest motiv, arhitectura IIoT include adesea dispozitive de margine, gateway-uri, hub-uri regionale și în cele din urmă sisteme de stocare / procesare.

Imaginea următoare prezintă arhitectura globală a sistemului nostru și instrumentele software pe care le vom folosi la fiecare nivel.

Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Arhitectura IIoT

La nivelul marginii, senzorii colectează informații despre lumea digitală și le trimit către un gateway printr-o varietate de protocoale prin cablu și wireless (Serial, RS-485, MODBUS, CAN bus, OPC UA, BLE, WiFi etc.). În exemplul nostru, vom folosi diverși senzori (lumină, temperatură, camere, accelerometre și așa mai departe) care trimit date către gateway prin WiFi.

Poarta de acces este un Raspberry Pi care rulează un Mosquitto Broker și un agent MiNiFi. Mosquitto este un broker de mesaje Open Source, ușor pe care îl folosim pentru a expune datele senzorilor prin protocolul MQTT. MQTT are o amprentă minimă care îl face potrivit pentru aplicații IoT și resurse hardware constrânse, cum ar fi telefoane sau microcontrolere.

Apache MiNiFi – un subproiect al Apache NiFi – este un agent ușor care implementează caracteristicile de bază ale Apache NiFi, concentrându-se pe colectarea datelor la margine.

Obiectivele de proiectare MiNiFi sunt: ​​dimensiuni reduse și consum redus de resurse, gestionarea centrală a agenților și inteligența de margine. MiNiFi poate fi ușor integrat cu NiFi prin protocolul Site-to-Site (S2S) pentru a construi o soluție de gestionare a fluxului de la un capăt la altul, care este scalabilă, sigură și oferă un lanț complet de custodie a informațiilor (proveniență).

În sistemul nostru, MiNiFi se va abona la toate subiectele brokerului Mosquitto și va transmite fiecărui mesaj către NiFi la nivel regional. Îl putem folosi, de asemenea, pentru a ne conecta la sistemul SCADA sau la orice alt furnizor de date OT.

La nivel regional, avem două componente:

Apache NiFi este o platformă puternică de flux de date, cu mai mult de 200 de conectori predați. Datorită interfeței sale de utilizare, proiectarea fluxurilor de date devine rapidă și ușoară.

NiFi nu schimbă puterea pentru simplitate. Într-adevăr, este un sistem distribuit foarte scalabil, cu livrare garantată, contrapresiune și distribuție a încărcăturii. Aceste caracteristici fac din NiFi un instrument excelent pentru aplicațiile IoT în care calitatea rețelei poate fi dificilă.

În sistemul nostru, NiFi joacă rolul central de a colecta date de la fiecare fabrică și de a le direcționa către mai multe sisteme și aplicații (HDFS, HBase, Kafka, S3 și așa mai departe).

Server MiNiFi C2 (comandă și control MiNiFi) este un alt subproiect al Apache NiFi în curs de dezvoltare. Rolul său este de a oferi un punct central de configurare pentru sute sau mii de agenți MiNiFi în natură. Serverul C2 gestionează clasele de aplicații versionate (configurații de flux MiNiFi) și le expune printr-un API Rest. Agenții MiNiFi se pot conecta la acest API la o frecvență definită pentru a-și actualiza configurația.

Odată ce datele ajung pe serverele companiei, pe Cloud sau la Centrul de date, există un set mare de aplicații care pot fi implementate. Monitorizarea în timp real, analiza și optimizarea proceselor sau întreținerea predictivă sunt câteva exemple. Procesarea datelor și implementarea cazurilor de utilizare vor fi discutate într-un articol viitor.

Implementarea sistemului

Să începem să ne construim prototipul.

Pregătirea Raspberry Pi: MQTT și MiNiFi

Pentru a instala brokerul Mosquitto MQTT și agentul MiNiFi, rulați următoarele comenzi pe Raspberry Pi.

Pentru a avea o dimensiune mică, MiNiFi este ambalat cu un set minim de procesoare implicite. Este posibil să adăugați orice procesor NiFi implementând NAR (NiFi Archive) în directorul lib. În ultima comandă a blocului de mai jos, adaug NAR-ul procesorului MQTT.

sudo apt-get update#install and run Mosquitto broker on default port 1883sudo apt-get install mosquittomosquitto#install and prepare MiNiFi agentwget http://apache.crihan.fr/dist/nifi/minifi/0.4.0/minifi-0.4.0-bin.tar.gztar -xvf minifi-0.4.0-bin.tar.gzcd minifi-0.4.0#add mqtt processorwget https://github.com/ahadjidj-hw/NiFi/raw/master/nifi-mqtt-nar-1.5.0.nar -P ./lib/

În mod implicit, configurarea unui agent MiNiFi necesită editarea fișierului ./conf/config.yml pentru a include lista procesoarelor utilizate și configurațiile acestora. Configurarea poate fi scrisă manual sau proiectată utilizând interfața de utilizare NiFi și exportând fluxul ca șablon. Șablonul este un fișier XML pe care trebuie să îl convertim într-un fișier YML cu Set de instrumente MiNiFi. Iată un exemplu de Fișier de configurare care urmărește un fișier și trimite fiecare linie către un NiFi la distanță prin S2S.

Pentru proiectul nostru, nu vom folosi acești pași manuali. Cu mulți agenți MiNiFi care rulează pe fabrici distribuite geografic, nu este posibil să opriți manual, să editați config.yml și apoi să reporniți fiecare agent de fiecare dată când configurația lor trebuie să se schimbe.

MiNiFi folosește un „Schimbă Ingestorul” prin care agentul este informat despre o potențială nouă configurație. Ingeratoarele de schimbare sunt module conectabile, iar în prezent sunt acceptate trei ingeratoare OOTB:

  • FileChangeIngestor
  • RestChangeIngestor
  • PullHttpChangeIngestor

Vom folosi un PullHttpChangeIngestor pentru a interoga un server C2 în fiecare perioadă de timp și pentru a descărca orice nouă configurație disponibilă. Pentru a configura acest ingestor, editați fișierul ./conf/bootstrap.conf, decomentați liniile corespunzătoare și setați proprietățile ingestorului după cum urmează:

nifi.minifi.notifier.ingestors=org.apache.nifi.minifi.bootstrap.configuration.ingestors.PullHttpChangeIngestor
# Hostname on which to pull configurations from
nifi.minifi.notifier.ingestors.pull.http.hostname=c2-server
# Port on which to pull configurations from
nifi.minifi.notifier.ingestors.pull.http.port=10080
# Path to pull configurations from
nifi.minifi.notifier.ingestors.pull.http.path=/c2/config
# Query string to pull configurations with
nifi.minifi.notifier.ingestors.pull.http.query=class=iot-minifi-raspberry-agent
# Period on which to pull configurations from, defaults to 5 minutes if commented out
nifi.minifi.notifier.ingestors.pull.http.period.ms=60000

Cu această configurație, fiecare agent MiNiFi va interoga C2 Server REST API la http: // c2-server: 10080 / c2 / config la fiecare 1 minut și cereți cea mai recentă configurație pentru clasa „iot-minifi-raspberry-agent”.

Notă: frecvența de 1 minut este doar în scop demo. Nu vă veți actualiza agenții atât de des.

Nu porniți agentul acum și să trecem la nivel regional și să configurăm serverul MiNiFi C2 și NiFi.

Instalarea și configurarea serverului MiNiFi C2

Instalați serverul MiNiFi C2 pe un server public care poate fi accesat de la agenții MiNiFi. Puteți utiliza implementarea ierarhică C2 pentru aplicații cu restricții de rețea așa cum este descris câteva rânduri mai jos. Rulați următoarea comandă pentru a instala serverul C2:

wget http://apache.crihan.fr/dist/nifi/minifi/0.4.0/minifi-c2-0.4.0-bin.tar.gztar -xvf minifi-c2-0.4.0-bin.tar.gzcd minifi-c2-0.4.0

Serverul C2 expune aplicațiile MiNiFi printr-un API REST organizat pe clase. C2 acceptă „Furnizori de configurare” conectabili și acceptă în prezent:

  • CacheConfigurationProvider, care se uită la directorul de pe sistemul de fișiere sau pe S3
  • DelegatingConfigurationProvider, care deleagă alt server C2 pentru a permite structuri ierarhice C2
  • NiFiRestConfigurationProvider, care extrage șabloane dintr-o instanță NiFi peste API-ul REST

Configurați serverul C2 pentru a utiliza NiFi ca furnizor de configurație. Editați fișierul ./conf/minifi-c2-context.xml și furnizați adresa serverului NiFi http: // nifi-dev: 8080

Instalarea și configurarea serverului NiFi

Instalați NiFi pe un server accesibil de pe serverul C2 și rulați-l.

wget http://apache.crihan.fr/dist/nifi/1.6.0/nifi-1.6.0-bin.tar.gztar -xvf nifi-1.6.0-bin.tar.gzcd nifi-1.6.0./bin/nifi.sh start

Să ne conectăm la interfața NiFi de la http: // nifi-dev: 8080 / nifi / și creați fluxul care va rula în agenții MiNiFi. Dar înainte de aceasta, adăugați un port de intrare în pânza rădăcină și denumiți-l „de la Raspberry MiNiFi”. Aici NiFi va primi fișiere de flux de la MiNiFi.

Adăugați un procesor consumerMQTT pentru a vă abona la brokerul Mosquitto și a vă abona la toate subiectele de sub iot / senzori. Rețineți că tcp: // raspberrypi: 1883 aici este echivalent cu tcp: // localhost: 1883, deoarece acest flux va rula pe Raspberry Pi.

1610994131 727 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Utilizați un procesor UpdateAttribute pentru a adăuga un “versiune” atribut pe care îl vom folosi pentru a afișa caracteristica de reconfigurare. Puteți adăuga orice atribut doriți: marca de timp, numele agentului, locația și așa mai departe.

1610994131 80 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Și, în cele din urmă, adăugați un grup de proces la distanță (RPG) pentru a trimite evenimentele consumate către NiFi. Conectați aceste trei procesoare.

1610994131 187 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Fluxul dvs. arată acum ca captura de ecran de mai jos. Fluxul din stânga va rula în NiFi pentru a primi date de la MiNiFi. Fluxul potrivit aici este doar pentru proiectare și va rula eficient pe fiecare Raspberry Pi.

1610994132 827 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Salvați fluxul potrivit ca șablon sub numele „iot-minifi-raspberry-agent.v1”. Convenția de numire aici este foarte importantă. Trebuie să folosim același nume ca numele clasei utilizat în configurația bootstrap MiNiFi.

Implementați și porniți aplicația

Înainte de a porni agenții MiNiFi pe Raspberry Pi, să vedem dacă serverul C2 este bine configurat. Deschideți următoarea adresă URL în browserul dvs. web: http: // c2-server: 10080 / c2 / config? class = iot-minifi-raspberry-agent & version = 1 . Serverul C2 răspunde cu un fișier care conține configurația șablonului pe care l-am construit, în format YML. Grozav.

1610994132 824 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Rezultatele apelului C2 Rest API

Dacă vă uitați la jurnalele C2, puteți vedea că serverul a primit o interogare cu parametrii {class =[iot-minifi-raspberry-agent], versiune =[1]}

1610994132 828 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Serverul C2 se înregistrează după apelul Rest API

Acum că comunicarea dintre diferitele componente ale arhitecturii (MQTT, MiNiFi, NiFi și C2) funcționează, porniți agentul MiNiFi de pe Raspberry Pi cu comanda:

./bin/minifi.sh start

După câteva secunde, vedeți următoarele jurnale de server C2. Gazda 192.168.1.50 (aceasta este adresa IP a Raspberry Pi) a cerut serverului C2 să îi ofere cea mai recentă versiune a clasei „iot-minifi-raspberry-agent”. În comparație cu apelul nostru anterior cu browserul web, veți observa că agentul MiNiFi nu a specificat o versiune. Dacă deschideți acum configurația agentului MiNiFi la ./conf/config.yml, veți găsi același fișier conf pe care l-am recuperat din API-ul C2 Rest.

1610994133 754 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Jurnalele serverului C2

De asemenea, MQTT arată că agentul MiNiFi s-a conectat la broker și s-a abonat la subiectele iot / sensors / #

1610994133 436 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Jurnalele MQTT după pornirea agentului MiNiFi

Perfect! Sistemul IIoT funcționează ca un farmec. Acum să începem senzorii noștri pentru a genera date și a le publica în MQTT. MiNiFi va începe apoi să consume date și să le trimită către NiFi așa cum se arată în următoarea captură de ecran, unde am primit 196 de mesaje.

1610994133 999 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Acum, să inspectăm unul dintre aceste mesaje cu caracteristica de proveniență a NiFi. Aceste date provin de la senzorul de lumină „Iot / sensors / LightIntensity / z” iar versiunea aplicației este 1.

1610994133 442 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Automagic Warm Redeploy

Acum că IIoT-ul nostru rulează și datele curg din fiecare fabrică către centrul nostru de date, să implementăm o nouă aplicație. Pentru testul nostru, vom face o modificare minoră a configurației agentului nostru MiNiFi. Accesați interfața de utilizare web NiFi și editați procesorul updateAttribute. Setați atributul „version” la 2 în loc de 1 și salvați fluxul într-un nou șablon „iot-minifi-raspberry-agent.v2”. Asta e tot! Noua aplicație va fi implementată automat.

Puteți vedea jurnalele serverului C2 de mai jos care arată că a fost detectată o nouă versiune V2. Serverul C2 nu are această versiune în cache și începe un proces de descărcare și conversie.

1610994134 256 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Reacția serverului C2 la un nou șablon

Apoi, agenții MiNiFi detectează noua configurație, salvează configurația anterioară, o implementează pe cea nouă și repornește.

1610994134 704 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Acum să ne uităm la datele provenite de la agenți. După cum puteți vedea în UI-ul de proveniență de mai jos, aceste date provin de la un giroscop și au o aplicație versiunea 2.

1610994134 175 Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi

Concluzii

Apache NiFi și ecosistemul său (server MiNiFi și C2) sunt instrumente puternice pentru gestionarea de date end-to-end IoT. Poate fi folosit pentru a construi cu ușurință și rapid aplicații IoT avansate cu arhitecturi flexibile și caracteristici avansate (implementare automată la cald, proveniență a datelor, presiune inversă și așa mai departe).

În articolele viitoare, vă voi arăta cum să utilizați aceste date, să securizați platforma și să implementați scenarii avansate de procesare de margine. Între timp, puteți citi Acest articol despre modul în care Renault, un producător multinațional de automobile, folosește Apache NiFi în proiectele IIoT și care sunt cele mai bune practici pe care le-au adoptat.

Mulțumesc pentru lectură. Ca întotdeauna, feedback-ul și sugestiile sunt binevenite.

Dacă vi s-a părut util acest articol, dați-i câteva palme și urmați-mă pentru mai multe articole Big Data și IoT!

Cum se construieste un sistem IIoT folosind Apache NiFi MiNiFi
Claps și abonament