Berbagi teknologi

Membangun platform cloud IoT multi-protokol berdasarkan EMQX Flask InfluxDB Grafana: akses perangkat MQTT/HTTP dan proses visualisasi data (dengan contoh kode)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Ringkasan: Artikel ini memperkenalkan konsep inti seperti Internet of Things, platform cloud, MQTT, HTTP, dan visualisasi data dengan cara yang sederhana dan mudah dipahami. Artikel ini juga menggabungkan alat-alat umum seperti EMQX, Flask, InfluxDB, dan Grafana untuk mengajar Anda langkah demi langkah cara membangun platform cloud Internet of Things yang mendukung banyak protokol. Artikel ini memiliki struktur, gambar, dan teks yang jelas, serta kodenya informatif dan mudah dipahami. Artikel ini dirancang untuk membantu pembaca dengan cepat menguasai teknologi inti dalam membangun platform cloud IoT.

Kata kunci:IoT, platform cloud, MQTT, HTTP, visualisasi data, EMQX, Flask, InfluxDB, Grafana


1. Pengetahuan dasar tentang Internet of Things

1.1 Ikhtisar Internet of Things

Internet of Things (IoT, Internet of Things) mengacu pada kumpulan objek atau proses apa pun secara real-time yang perlu dipantau, dihubungkan, dan berinteraksi melalui berbagai sensor informasi, teknologi identifikasi frekuensi radio, sistem penentuan posisi global, dll., untuk mewujudkan komunikasi di mana-mana antara benda dan benda, dan antara benda dan manusia. Sehubungan dengan itu, kita dapat mencapai persepsi cerdas, identifikasi, dan pengelolaan barang dan proses.

1.2 Arsitektur IoT

Arsitektur sistem IoT biasanya dibagi menjadi tiga lapisan:

  • Lapisan persepsi:Bertanggung jawab untuk mengumpulkan data, termasuk berbagai sensor, tag RFID, modul GPS, dll.
  • Lapisan jaringan:Bertanggung jawab atas transmisi data, termasuk berbagai protokol jaringan, teknologi komunikasi, dll., seperti WiFi, Bluetooth, Zigbee, NB-IoT, dll.
  • Lapisan aplikasi:Bertanggung jawab atas pemrosesan data dan presentasi aplikasi, seperti analisis data, kendali jarak jauh, pengambilan keputusan yang cerdas, dll.

2. Platform cloud dan visualisasi data

2.1 Platform awan

Platform cloud mengacu pada penambahan, penggunaan dan model penyampaian layanan terkait berbasis Internet, biasanya melibatkan penyediaan sumber daya yang dapat diskalakan secara dinamis dan seringkali tervirtualisasi melalui Internet. Platform cloud dapat menyediakan komputasi, penyimpanan, dan sumber daya jaringan yang kuat untuk aplikasi IoT, sehingga mengurangi biaya pengembangan dan penerapan aplikasi IoT.

2.2 Visualisasi data

Visualisasi data mengacu pada menampilkan data dalam bentuk visual seperti grafik dan bagan untuk membantu pengguna memahami data secara lebih intuitif dan mendapatkan wawasan tentang pola dan tren di balik data.

3. Pengenalan protokol dan alat yang umum digunakan

3.1 protokol MQTT

MQTT (Message Queuing Telemetry Transport) adalah protokol penerbitan/berlangganan pesan ringan yang dirancang untuk perangkat dan jaringan dengan bandwidth rendah dan berdaya rendah. MQTT banyak digunakan di bidang Internet of Things, terutama cocok untuk perangkat dengan sumber daya terbatas dan lingkungan jaringan yang tidak dapat diandalkan.

3.2 protokol HTTP

HTTP (Hypertext Transfer Protocol) adalah protokol lapisan aplikasi yang digunakan untuk mentransfer informasi antara browser Web dan server Web. Protokol HTTP sederhana dan mudah digunakan serta banyak digunakan di berbagai aplikasi jaringan, termasuk Internet of Things.

3.3 EMQX

EMQX adalah server pesan MQTT sumber terbuka, berkinerja tinggi, dan dapat diskalakan yang mendukung jutaan koneksi bersamaan dan throughput pesan.

3.4 Labu

Flask adalah kerangka aplikasi web ringan yang ditulis dengan Python, mudah dipelajari dan digunakan, serta cocok untuk membangun aplikasi web dan antarmuka API dengan cepat.

3.5 InfluxDB

InfluxDB adalah database deret waktu sumber terbuka yang dirancang untuk menyimpan dan menanyakan data deret waktu. Sangat cocok untuk menyimpan data sensor IoT, data pemantauan, dll.

3.6 Grafana

Grafana adalah alat visualisasi data sumber terbuka yang dapat menghubungkan berbagai sumber data untuk membuat dasbor yang indah dan kuat serta menampilkan data secara real-time.

4. Pembangunan platform cloud IoT multi-protokol

Proyek ini akan membangun platform cloud IoT yang mendukung protokol MQTT dan HTTP untuk mencapai fungsi berikut:

  • Dukungan multi-protokol: Mendukung akses perangkat dengan protokol MQTT dan HTTP.
  • Pengumpulan dan penyimpanan data: Kumpulkan data dari perangkat protokol yang berbeda secara real time dan simpan di database InfluxDB.
  • visualisasi data: Gunakan Grafana untuk menampilkan data yang dikumpulkan secara visual.
4.1 Arsitektur sistem

 

4.2 Penerapan kode

1. Konstruksi server HTTP (Flask)

  1. # 导入 Flask 库
  2. from flask import Flask, request, jsonify
  3. # 创建 Flask 应用
  4. app = Flask(__name__)
  5. # 定义 HTTP 接口,接收 POST 请求
  6. @app.route('/data', methods=['POST'])
  7. def receive_data():
  8. # 获取请求数据
  9. data = request.get_json()
  10. # 数据处理逻辑,例如数据校验、格式转换等
  11. # ...
  12. # 将数据写入 InfluxDB (示例)
  13. from influxdb import InfluxDBClient
  14. client = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')
  15. json_body = [
  16. {
  17. "measurement": "sensor_data",
  18. "tags": {
  19. "sensor_id": data.get("sensor_id")
  20. },
  21. "fields": {
  22. "temperature": data.get("temperature"),
  23. "humidity": data.get("humidity")
  24. }
  25. }
  26. ]
  27. client.write_points(json_body)
  28. # 返回响应
  29. return jsonify({'message': 'Data received successfully!'}), 200
  30. # 启动 Flask 应用
  31. if __name__ == '__main__':
  32. app.run(debug=True)

Deskripsi kode:

  • menggunakanFlaskKerangka kerja ini membuat server HTTP dan mendefinisikannya/dataAntarmuka menerima permintaan POST.
  • menggunakanrequest.get_json()Dapatkan data JSON dalam permintaan HTTP.
  • Melakukan pemrosesan data, seperti verifikasi data, konversi format, dll.
  • menggunakanInfluxDBClientHubungkan ke database InfluxDB dan tulis data ke database.
  • Kembalikan respons dalam format JSON untuk memberi tahu klien bahwa penerimaan data berhasil.

2. Pemrosesan pesan MQTT (Python)

  1. # 导入必要的库
  2. import paho.mqtt.client as mqtt
  3. from influxdb import InfluxDBClient
  4. import json
  5. # MQTT Broker 配置
  6. MQTT_BROKER = "localhost"
  7. MQTT_PORT = 1883
  8. MQTT_TOPIC = "sensor/data"
  9. # InfluxDB 配置
  10. INFLUXDB_HOST = "localhost"
  11. INFLUXDB_PORT = 8086
  12. INFLUXDB_USER = "user"
  13. INFLUXDB_PASSWORD = "password"
  14. INFLUXDB_DATABASE = "iot_data"
  15. # 创建 InfluxDB 客户端
  16. influxdb_client = InfluxDBClient(
  17. host=INFLUXDB_HOST,
  18. port=INFLUXDB_PORT,
  19. username=INFLUXDB_USER,
  20. password=INFLUXDB_PASSWORD,
  21. database=INFLUXDB_DATABASE
  22. )
  23. # 连接到 MQTT Broker
  24. def on_connect(client, userdata, flags, rc):
  25. print("Connected to MQTT Broker with result code " + str(rc))
  26. client.subscribe(MQTT_TOPIC)
  27. # 接收 MQTT 消息
  28. def on_message(client, userdata, msg):
  29. # 解析数据
  30. data = json.loads(msg.payload.decode())
  31. # 构建 InfluxDB 数据点
  32. influxdb_data = [
  33. {
  34. "measurement": "sensor_data",
  35. "tags": {
  36. "sensor_id": data.get("sensor_id"),
  37. },
  38. "fields": {
  39. "temperature": data.get("temperature"),
  40. "humidity": data.get("humidity"),
  41. }
  42. }
  43. ]
  44. # 写入 InfluxDB
  45. influxdb_client.write_points(influxdb_data)
  46. print("Data written to InfluxDB: " + str(influxdb_data))
  47. # 创建 MQTT 客户端
  48. mqtt_client = mqtt.Client()
  49. mqtt_client.on_connect = on_connect
  50. mqtt_client.on_message = on_message
  51. mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
  52. # 启动 MQTT 客户端
  53. mqtt_client.loop_start()
  54. # 保持程序运行
  55. while True:
  56. pass

Deskripsi kode:

  • menggunakanpaho.mqtt.clientHubungkan ke MQTT Broker dan berlangganan topik yang ditentukan.
  • Ketika pesan MQTT diterima, gunakanjson.loads()Parsing isi pesan.
  • Bangun data yang diurai ke dalam format titik data InfluxDB.
  • menggunakaninfluxdb_client.write_points()Tulis data ke database InfluxDB.

3. Visualisasi data (Grafana)

  • Instal Grafana dan konfigurasikan sumber data untuk terhubung ke database InfluxDB.
  • Buat dasbor dan tambahkan diagram di dasbor, seperti diagram garis, diagram batang, dll.
  • Konfigurasikan sumber data bagan sebagai InfluxDB, dan tulis pernyataan kueri untuk mendapatkan data dari InfluxDB.
  • Konfigurasikan gaya bagan, judul, sumbu, dan atribut lainnya sesuai kebutuhan untuk membuat tampilan data lebih intuitif dan mudah dipahami.

Contoh pernyataan kueri Grafana:

SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h

Kueri akan dimulai darisensor_dataKueri data suhu dan kelembapan pada satu jam terakhir dalam pengukuran.

Proyek ini menggabungkan alat-alat seperti Flask, EMQX, InfluxDB dan Grafana untuk membangun platform cloud IoT yang mendukung protokol MQTT dan HTTP, serta mewujudkan pengumpulan, penyimpanan, dan tampilan visual data. Platform ini dapat diperluas secara fleksibel untuk mendukung lebih banyak jenis perangkat dan akses protokol, dan fungsinya dapat disesuaikan dengan kebutuhan sebenarnya.

Melihat:

  • Kode di atas hanya untuk referensi dan perlu dimodifikasi sesuai kebutuhan spesifik dalam aplikasi sebenarnya.
  • Harap pastikan semua perpustakaan dependen telah diinstal, mis.paho-mqttinfluxdbflaskTunggu.
  • Dalam penerapan sebenarnya, faktor-faktor seperti keamanan data dan stabilitas sistem perlu dipertimbangkan.

Jika Anda menginginkan kode dan ide tertentu, Anda dapat mengirimi saya pesan pribadi! ! !