Bagaimana membangun arsitektur IIoT do-it-yourself

Selama tahun lalu, kami telah merancang (dan terus mendukung) beberapa proyek IIoT. Anda mungkin pernah mendengar tentang IIoT, tetapi untuk berjaga-jaga, kami akan mencoba menjelaskan sesederhana apa itu dan mengapa itu menarik bagi pengembang, arsitek, dan administrator dari solusi yang sangat dimuat.



IoT - Internet of Things - melibatkan perangkat pengendali yang dirancang untuk melakukan tugas-tugas rumah tangga sederhana (buka pintu garasi ketika mobil berhenti, nyalakan lampu menggunakan sensor atau perintah gerak, pantau suhu kamar), lalu di bawah IIoT - Internet industri barang - biasanya ada mengingat "digitalisasi" data dari industri, atas dasar analisis ahli yang dapat dilakukan, sering dengan bantuan pembelajaran mesin.


Misalnya, Anda dapat mengumpulkan dan menganalisis data dari motor berputar untuk mempelajari tentang kegagalan waktu dan menghemat perbaikan. Mengganti turbin yang benar-benar rusak jauh lebih mahal daripada perbaikan tepat waktu. Contoh lain adalah penambangan batubara. Analisis data tentang komposisi udara di tambang memungkinkan Anda merespons dalam waktu melebihi nilai yang diizinkan. Ini membantu mencegah situasi yang mengancam jiwa para penambang.


Aliran data - dari sensor lapangan, dari mesin industri, dari sensor gas - menuju hub agregasi dan, lebih lanjut, ke platform pemrosesan data dan analisis.


Kami ingin berbicara tentang bagaimana arsitektur seperti itu terlihat, bagaimana mengumpulkan dan menganalisis data dengan cukup sederhana, dan membahas secara spesifik aplikasi individual. Kami akan mengandalkan terjemahan artikel berbahasa Inggris dan pengalaman desain kami sendiri. Artikel ini diterjemahkan , dengan penjelasan dan tambahan kami.


Pada artikel pertama, kami akan mencoba membuat arsitektur IIoT, di mana kami akan mengirimkan data lebih lanjut dari sensor, dan kemudian mentransfernya ke sistem yang menyediakan pemrosesan, analisis, pembelajaran mesin, dan pemantauan data yang masuk.


Arsitektur yang Dibuat


Seringkali dalam IoT industri tidak ada akses langsung ke sensor dan sistem kontrol, oleh karena itu, gateway digunakan untuk menghubungkan tingkat OT (teknologi operasi) dan TI (teknologi informasi).


Dengan demikian, arsitektur IIoT biasanya meliputi: perangkat akhir, gateway, hub regional dan, akhirnya, pemrosesan informasi dan sistem penyimpanan.


Arsitektur yang dibuat harus memberikan peluang:


  • Kumpulkan data dari sensor ke gateway
  • Transfer data ke cloud atau pusat data
  • Memperbarui konfigurasi gateway secara otomatis
  • Pertahankan transfer dan pemrosesan data yang aman

Pada gambar: arsitektur sistem dan perangkat lunak yang dibuat yang akan kita gunakan untuk membangunnya di setiap level.



Sensor mengumpulkan data dan mengirimkannya ke gateway menggunakan berbagai protokol kabel dan nirkabel (Serial, RS-485, MODBUS, CAN bus, OPC UA, BLE, WiFi, dll.). Dalam contoh kita, kita akan ingat bahwa data datang ke gateway melalui WiFi.


Sebagai gateway, kami akan menggunakan Raspberry Pi, di mana broker Mosquitto dan agen MiNiFi akan diluncurkan. Mosquitto adalah broker pesan bersumber terbuka dan ringan yang akan kami gunakan untuk mengirimkan data lebih lanjut dari sensor menggunakan protokol MQTT. MQTT menambahkan overhead minimum dan karenanya nyaman untuk digunakan dalam IoT ketika sumber daya perangkat keras dari perangkat akhir terbatas (misalnya, ponsel dan mikrokontroler digunakan).


Apache MiNiFi - subproyek Apache NiFi - agen ringan yang mengimplementasikan fungsionalitas inti Apache NiFi, yang dirancang khusus untuk mengumpulkan data pada perangkat akhir.


MiNiFi kompak, menggunakan sumber daya minimal dan memungkinkan manajemen terpusat dari semua agen. Ini dengan mudah terhubung ke NiFi menggunakan Site-To-Site (S2S), yang memungkinkan Anda untuk membangun kontrol aliran data lengkap - scalable, aman dan memberikan ide yang jelas tentang semua tahapan transfer informasi.


Dalam sistem kami, MiNiFi akan berlangganan semua topik broker Mosquitto dan akan meneruskan setiap pesan ke set NiFi di tingkat regional. Anda juga dapat menggunakannya untuk terhubung ke sistem SCADA atau sumber data OT lainnya.


Di tingkat regional, ada dua komponen:


Apache NiFi adalah sistem manajemen aliran data yang kuat yang mendukung lebih dari 200 konektor. Antarmuka grafis memungkinkan Anda merancang aliran data dengan cepat dan mudah.


NiFi tidak mengorbankan kekuatan untuk kesederhanaan. Ini adalah sistem terdistribusi dengan skala baik dengan pengiriman yang terjamin, tekanan balik (kemampuan untuk menyimpan data sebelum mengunggahnya ke sistem lain yang lebih lambat) dan penyeimbangan beban. Fungsionalitas ini menjadikan NiFi alat yang luar biasa untuk aplikasi IoT yang sering bekerja di lingkungan jaringan yang tidak stabil.


Dalam sistem kami, NiFi adalah pusat pengumpulan data yang mengarahkan mereka ke berbagai sistem dan aplikasi (HDFS, HBase, Kafka, S3, dll.).


MiNiFi C2 Server (MiNiFi Command & Control) adalah sub proyek Apache NiFi lain yang masih dalam pengembangan. Perannya adalah untuk menjadi titik sentral dari konfigurasi ratusan dan ribuan agen MiNiFi yang sedang dalam produksi di lapangan (berbagai ruang, pabrik, wilayah). Server C2 mengelola konfigurasi aliran MiNiFi (dalam terminologi C2 - kelas aplikasi berversi) dan menerbitkannya melalui API Istirahat. Agen MiNiFi dapat terhubung ke API ini pada frekuensi yang diberikan untuk memperbarui konfigurasi mereka sendiri.


Jadi, mari mulai membuat prototipe kami.


Perjanjian Nama Domain


Untuk konfigurasi lebih lanjut dari berbagai sistem yang harus saling menghubungi, mari kita sepakati nama domain yang akan kita gunakan dalam konfigurasi.


#  Apache NiFi      192.168.0.20 nifi.iot.local #  Apache MiNiFi C2     MiNiFi 192.168.0.20 minifi-c2.iot.local #raspberry pi,      Apache MiNiFi  MQTT  192.168.0.68 iot-hub-1.iot.local 

Persiapan Raspberry Pi: MQTT dan MiNiFi


Untuk menginstal broker MQTT Mosquitto dan agen MiNiFi, jalankan perintah berikut pada Raspberry Pi Anda.


Secara default, MiNiFi berisi sekumpulan penangan data minimal. Anda dapat menambahkan penangan tambahan dari kit NiFI dengan menambahkan arsip NAR (arsip NiFi) ke direktori perpustakaan.


Dengan perintah terakhir, kami menambahkan handler NAR MQTT.


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

Sekarang mari kita instal server manajemen konfigurasi MiNiFi C2 pada server yang akan tersedia dengan Raspberry Pi


Instalasi dan konfigurasi server MiNiFi C2.


Instal server MiNiFi C2 pada server publik yang akan tersedia dengan agen MiNiFi. Anda dapat menggunakan distribusi hierarkis server C2 untuk infrastruktur jaringan yang kompleks, seperti dijelaskan di bawah ini. Jalankan perintah berikut untuk menginstal server C2:


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

  • Server C2 akan menerbitkan konfigurasi terorganisir kelas. C2 mendukung “penyedia konfigurasi” pluggable:
  • CacheConfigurationProvider, yang memperbarui konfigurasi berdasarkan konfigurasi yang ditentukan dalam sistem file atau S3
  • DelegatingConfigurationProvider, yang meneruskan delegasi ke server C2 lain untuk membuat struktur hierarki server C2.
  • The NiFiRestConfigurationProvider, yang menghapus template dari server Apache NiFi melalui REST API mereka.

Kami akan mengonfigurasi server C2 untuk menggunakan NiFi sebagai penyedia konfigurasi. Edit file ./conf/minifi-c2-context.xml, batalkan komentar pada blok xml


 <bean class="org.apache.nifi.minifi.c2.provider.nifi.rest.NiFiRestConfigurationProvider"> 

dan tulis alamat server NiFi ( http: //nifi.iot.local: 8080 )


 <constructor-arg> <value>http://nifi.iot.local:8080/nifi-api</value> </constructor-arg> 

Konfigurasi lebih lanjut dari MiNiFi pada Raspberry Pi


Secara default, untuk menambahkan penangan dan konfigurasinya, Anda perlu mengedit konfigurasi ./conf/config.yml. Konfigurasi juga dapat ditulis secara manual atau dibuat menggunakan Apache NiFi GUI, diikuti dengan mengekspor konfigurasi sebagai templat. Templat adalah file XML yang harus dikonversi ke file konfigurasi MiMLiFi YML menggunakan toolkit MiNiFi. Berikut adalah contoh file konfigurasi yang memonitor file pada perangkat dan meneruskan setiap baris baru ke NiFi menggunakan protokol S2S.


Untuk proyek kami, kami tidak akan menggunakan penyetelan manual. Memang, jika ada banyak agen MiNiFi, itu tidak akan mudah untuk berhenti secara manual, edit config.yml dan restart agen setiap kali konfigurasi berubah.


MiNiFi menggunakan Change Ingestor, yang dengannya agen belajar tentang konfigurasi baru yang mungkin. Change Ingestor adalah plug-in, dan ada tiga ChangeIngestor yang secara asli didukung oleh MiNiFi.


  • FileChangeIngestor
  • RestChangeIngestor
  • PullHttpChangeIngestor

Kami akan menggunakan PullHttpChangeIngestor untuk secara berkala mengakses server C2 dan mengunduh konfigurasi baru. Untuk mengkonfigurasi Ingestor ini, Anda perlu mengedit file ./conf/bootstrap.conf, batalkan komentar pada baris yang sesuai dan atur pengaturan berikut:


 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=minifi-c2.iot.local # 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 

Dengan konfigurasi ini, setiap agen MiNiFi akan mengakses server C2 menggunakan protokol REST API di http: //minifi-c2.iot.local: 10080 / c2 / config setiap menit dan meminta konfigurasi baru untuk kelas agen iot-minifi-raspberry-agent
Poin penting: frekuensi 1 menit ditetapkan hanya untuk demonstrasi. Dalam lingkungan produksi, Anda kemungkinan besar tidak perlu memperbarui agen dengan frekuensi seperti itu.


Sebelum memulai agen, mari kita beralih ke level kontrol dan konfigurasikan server MiNiFi C2 dan Apache NiFi itu sendiri.


Menginstal dan mengonfigurasi server NiFi


Instal server NiFi yang dapat diakses dari server C2 dan mulai.


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

Sambungkan ke antarmuka NiFi di http: // nifi-dev: 8080 / nifi / dan buat aliran yang akan berjalan di agen MiNiFi, tapi sebelum itu tambahkan Input Port (ditambahkan dengan menekan tombol Input Port pada menu) di layer root dan beri nama dari Raspberry MiNiFi. Di sinilah NiFi akan menerima file aliran dari MiNiFi.


Tambahkan Funnel dan hubungkan Port Input ke Funnel - di artikel mendatang kami akan menyentuh pada pemrosesan data di sisi Apache NiFi.


Tambahkan Prosesor konsumsiMQTT untuk berlangganan broker Mosquitto dan menandatanganinya di semua topik iot / sensor / * perhatikan bahwa tcp: // raspberrypi: 1883 setara dengan tcp: // localhost: 1883, karena utas ini akan berjalan di Raspberry Pi



Gunakan Processor UpdateAttribute untuk menambahkan atribut "versi", yang akan kami gunakan untuk memberi tahu sistem tentang konfigurasi ulang. Anda dapat menambahkan atribut tambahan: cap waktu, lokasi, nama agen, dll.



Terakhir, tambahkan Remote Process Group (RPG) - untuk mengirim acara yang diterima ke NiFi. Gabungkan ketiga proses ini.



Aliran Anda sekarang akan terlihat seperti pada tangkapan layar di bawah ini. Aliran kiri akan diluncurkan pada Apache NiFi sendiri, dan akan menerima data dari Apache MiNiFi. Utas kanan tidak akan mulai di dalam Apache Nifi, dibuat untuk keperluan prototyping dan konfigurasi, dan akan berjalan di Raspberry Pi.



Simpan aliran yang tepat sebagai templat bernama "iot-minifi-raspberry-agent.v1". Prinsip penamaan sangat penting di sini. Kita harus menggunakan nama yang sama dengan nama kelas yang digunakan dalam konfigurasi MiNiFi.


Ini sangat penting - Anda perlu menyoroti tidak hanya komponen yang disimpan, tetapi juga hubungan di antara mereka.



Penempatan dan peluncuran aplikasi


Sebelum meluncurkan agen MiNiFi di Raspberry Pi, mari kita verifikasi bahwa server C2 dikonfigurasi dengan benar. Buka URL di browser Anda: http: // c2-server: 10080 / c2 / config? Class = iot-minifi-raspberry-agent & versi = 1 C2 Server harus merespons dengan file yang berisi konfigurasi template yang kami buat dalam format YML.



Jika, alih-alih konfigurasi, server melempar Java Exception, Anda mengalami masalah di server C2 yang disebutkan di sini:
https://github.com/apache/nifi-minifi/pull/126#issuecomment-388856304
Anda harus menginstal versi 0.3.0 atau menghapus file javax.ws.rs-api-2.1.jar dari folder lib direktori server C2.


Jika Anda melihat log server C2, Anda dapat melihat bahwa server telah menerima permintaan dengan parameter {class = [iot-minifi-raspberry-agent], versi = [1]}



Sekarang setelah koneksi antara komponen arsitektur individual (MQTT, MiNiFi, NiFi dan C2) terbentuk, mulai agen MiNiFi pada Raspberry Pi dengan perintah:


 ./bin/minifi.sh start 

Setelah beberapa detik, Anda akan melihat log server C2. Tuan rumah 192.168.1.50 (dalam kasus kami, alamat IP perangkat Raspberry Pi) meminta server C2 untuk menyediakan versi terbaru dari kelas "iot-minifi-raspberry-agent". Dibandingkan dengan permintaan kami sebelumnya, yang kami lakukan di browser, Anda dapat mencatat bahwa MiNiFi tidak menunjukkan versi. Jika Anda membuka konfigurasi agen MiNiFi di ./conf/config.yml, Anda akan melihat konfigurasi yang sama yang kami terima di browser, mengatur permintaan dengan tangan.



MQTT menunjukkan bahwa agen MiNiFi terhubung ke broker dan berlangganan ke topik iot / sensor / #



Kontrol Transmisi


Hebat, sekarang mari kita buat sensor kita mulai menghasilkan data dan menerbitkannya ke MQTT. MiNiFi akan mulai mengunggah informasi dan mengirim ke NiFi, seperti yang ditunjukkan pada gambar di bawah.


Penting: Agar komponen Apache NiFi mulai bekerja, Anda harus mengklik tombol Play.


Sekarang, mari kita lihat salah satu tulisan di dalam NiFi. Informasi berasal dari sensor "iot / sensor / LightIntensity / z", versi aplikasi - 1



Pembaruan konfigurasi MiNiFi


Sekarang setelah infrastruktur kami berfungsi dan data menuju ke "pusat data" kami, mari kita instal konfigurasi MiNiFi baru. Buka antarmuka Apache NiFi dan edit handler pembaruanAttribute. Ubah atribut "versi" menjadi 2 alih-alih 1 dan simpan templat "iot-minifi-raspberry-agent.v2" yang baru. Itu saja. Konfigurasi baru akan digunakan secara otomatis.


Anda dapat melihat log server C2 dan melihat bahwa versi baru V2 terdeteksi, server tidak menemukannya dalam cache dan memuatnya.



Kemudian MiNiFi menemukan konfigurasi baru, cadangan konfigurasi sebelumnya, membongkar yang baru dan me-restart:



Pada artikel selanjutnya, kita akan berbicara tentang bagaimana kita mengumpulkan sensor dan memasukkannya ke dalam arsitektur kita. Setelah itu, kita akan berbicara tentang analisis data.

Source: https://habr.com/ru/post/id415933/


All Articles