Κοινή χρήση τεχνολογίας

Δημιουργία μιας πλατφόρμας cloud IoT πολλαπλών πρωτοκόλλων που βασίζεται στο EMQX Flask InfluxDB Grafana: Πρόσβαση συσκευής MQTT/HTTP και διαδικασία οπτικοποίησης δεδομένων (με παραδείγματα κώδικα)

2024-07-12

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

Περίληψη: Αυτό το άρθρο εισάγει βασικές έννοιες όπως το Διαδίκτυο των πραγμάτων, η πλατφόρμα cloud, το MQTT, το HTTP και η οπτικοποίηση δεδομένων με απλό και κατανοητό τρόπο Συνδυάζει επίσης κύρια εργαλεία όπως το EMQX, το Flask, το InfluxDB και το Grafana. μπορείτε βήμα προς βήμα πώς να δημιουργήσετε μια πλατφόρμα cloud Internet of Things που υποστηρίζει πολλαπλά πρωτόκολλα. Το άρθρο έχει σαφή δομή, εικόνες και κείμενα και ο κώδικας είναι κατατοπιστικός και εύκολος στην κατανόηση. Έχει σχεδιαστεί για να βοηθά τους αναγνώστες να κατακτήσουν γρήγορα την βασική τεχνολογία της δημιουργίας μιας πλατφόρμας cloud.

Λέξεις κλειδιά:IoT, πλατφόρμα cloud, MQTT, HTTP, οπτικοποίηση δεδομένων, EMQX, Flask, InfluxDB, Grafana


1. Βασικές γνώσεις Internet of Things

1.1 Επισκόπηση του Διαδικτύου των πραγμάτων

Το Διαδίκτυο των Πραγμάτων (IoT, Internet of Things) αναφέρεται στη συλλογή σε πραγματικό χρόνο οποιωνδήποτε αντικειμένων ή διεργασιών που πρέπει να παρακολουθούνται, να συνδέονται και να αλληλεπιδρούν μέσω διαφόρων αισθητήρων πληροφοριών, τεχνολογίας αναγνώρισης ραδιοσυχνοτήτων, παγκόσμιων συστημάτων εντοπισμού θέσης κ.λπ. να συνειδητοποιήσουμε την πανταχού παρούσα επικοινωνία μεταξύ πραγμάτων και πραγμάτων, και μεταξύ πραγμάτων και ανθρώπων Σε σχέση, μπορούμε να επιτύχουμε έξυπνη αντίληψη, αναγνώριση και διαχείριση αντικειμένων και διαδικασιών.

1.2 Αρχιτεκτονική IoT

Η αρχιτεκτονική του συστήματος IoT συνήθως χωρίζεται σε τρία επίπεδα:

  • Επίπεδο αντίληψης:Υπεύθυνος για τη συλλογή δεδομένων, συμπεριλαμβανομένων διαφόρων αισθητήρων, ετικετών RFID, μονάδων GPS κ.λπ.
  • Επίπεδο δικτύου:Υπεύθυνος για τη μετάδοση δεδομένων, συμπεριλαμβανομένων διαφόρων πρωτοκόλλων δικτύου, τεχνολογιών επικοινωνίας κ.λπ., όπως WiFi, Bluetooth, Zigbee, NB-IoT κ.λπ.
  • Επίπεδο εφαρμογής:Υπεύθυνος για την επεξεργασία δεδομένων και την παρουσίαση εφαρμογών, όπως ανάλυση δεδομένων, τηλεχειριστήριο, έξυπνη λήψη αποφάσεων κ.λπ.

2. Πλατφόρμα cloud και οπτικοποίηση δεδομένων

2.1 Πλατφόρμα cloud

Η πλατφόρμα Cloud αναφέρεται στην προσθήκη, χρήση και μοντέλο παράδοσης σχετικών υπηρεσιών που βασίζονται στο Διαδίκτυο, που συνήθως περιλαμβάνουν την παροχή δυναμικά επεκτάσιμων και συχνά εικονικοποιημένων πόρων μέσω του Διαδικτύου. Οι πλατφόρμες cloud μπορούν να παρέχουν ισχυρούς πόρους υπολογιστών, αποθήκευσης και δικτύου για εφαρμογές IoT, μειώνοντας το κόστος ανάπτυξης και ανάπτυξης εφαρμογών IoT.

2.2 Οπτικοποίηση δεδομένων

Η οπτικοποίηση δεδομένων αναφέρεται στην εμφάνιση δεδομένων σε οπτικές μορφές, όπως γραφικά και γραφήματα, για να βοηθήσει τους χρήστες να κατανοήσουν τα δεδομένα πιο διαισθητικά και να αποκτήσουν πληροφορίες για τα μοτίβα και τις τάσεις πίσω από τα δεδομένα.

3. Εισαγωγή στα κοινά χρησιμοποιούμενα πρωτόκολλα και εργαλεία

3.1 Πρωτόκολλο MQTT

Το MQTT (Message Queuing Telemetry Transport) είναι ένα ελαφρύ πρωτόκολλο δημοσίευσης/συνδρομής μηνυμάτων σχεδιασμένο για συσκευές και δίκτυα χαμηλού εύρους ζώνης, χαμηλής κατανάλωσης ενέργειας. Το MQTT χρησιμοποιείται ευρέως στον τομέα του Διαδικτύου των Πραγμάτων, ιδιαίτερα κατάλληλο για συσκευές με περιορισμένους πόρους και αναξιόπιστα περιβάλλοντα δικτύου.

3.2 Πρωτόκολλο HTTP

Το HTTP (Hypertext Transfer Protocol) είναι ένα πρωτόκολλο επιπέδου εφαρμογής που χρησιμοποιείται για τη μεταφορά πληροφοριών μεταξύ προγραμμάτων περιήγησης Ιστού και διακομιστών Ιστού. Το πρωτόκολλο HTTP είναι απλό και εύκολο στη χρήση και χρησιμοποιείται ευρέως σε διάφορες εφαρμογές δικτύου, συμπεριλαμβανομένου του Internet of Things.

3.3 EMQX

Ο EMQX είναι ένας διακομιστής μηνυμάτων MQTT ανοιχτού κώδικα, υψηλής απόδοσης, επεκτάσιμος που υποστηρίζει εκατομμύρια ταυτόχρονες συνδέσεις και ροή μηνυμάτων.

3.4 Φιάλη

Το Flask είναι ένα ελαφρύ πλαίσιο εφαρμογών ιστού γραμμένο σε Python, εύκολο στην εκμάθηση και χρήση και κατάλληλο για γρήγορη δημιουργία διαδικτυακών εφαρμογών και διεπαφών API.

3.5 InfluxDB

Το InfluxDB είναι μια βάση δεδομένων χρονοσειρών ανοιχτού κώδικα που έχει σχεδιαστεί για την αποθήκευση και την αναζήτηση δεδομένων χρονοσειρών. Είναι κατάλληλη για την αποθήκευση δεδομένων αισθητήρων IoT, δεδομένων παρακολούθησης κ.λπ.

3.6 Γραφάνα

Το Grafana είναι ένα εργαλείο οπτικοποίησης δεδομένων ανοιχτού κώδικα που μπορεί να συνδέσει πολλές πηγές δεδομένων για να δημιουργήσει όμορφους και ισχυρούς πίνακες εργαλείων και να εμφανίσει δεδομένα σε πραγματικό χρόνο.

4. Κατασκευή πολλαπλών πρωτοκόλλων IoT cloud πλατφόρμας

Αυτό το έργο θα δημιουργήσει μια πλατφόρμα cloud IoT που υποστηρίζει πρωτόκολλα MQTT και HTTP για την επίτευξη των ακόλουθων λειτουργιών:

  • Υποστήριξη πολλαπλών πρωτοκόλλων: Υποστηρίζει πρόσβαση συσκευής με πρωτόκολλα MQTT και HTTP.
  • Συλλογή και αποθήκευση δεδομένων: Συλλέξτε δεδομένα από διαφορετικές συσκευές πρωτοκόλλου σε πραγματικό χρόνο και αποθηκεύστε τα στη βάση δεδομένων InfluxDB.
  • οπτικοποίηση δεδομένων: Χρησιμοποιήστε το Grafana για να εμφανίσετε οπτικά τα δεδομένα που συλλέγονται.
4.1 Αρχιτεκτονική συστήματος

 

4.2 Εφαρμογή κώδικα

1. Κατασκευή διακομιστή 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)

Περιγραφή κώδικα:

  • χρήσηFlaskΤο πλαίσιο δημιουργεί έναν διακομιστή HTTP και ορίζει/dataΗ διεπαφή λαμβάνει αιτήματα POST.
  • χρήσηrequest.get_json()Λάβετε τα δεδομένα JSON στο αίτημα HTTP.
  • Εκτελέστε επεξεργασία δεδομένων, όπως επαλήθευση δεδομένων, μετατροπή μορφής κ.λπ.
  • χρήσηInfluxDBClientΣυνδεθείτε στη βάση δεδομένων InfluxDB και γράψτε δεδομένα στη βάση δεδομένων.
  • Επιστρέψτε μια απάντηση σε μορφή JSON για να ενημερώσετε τον πελάτη ότι η λήψη δεδομένων είναι επιτυχής.

2. Επεξεργασία μηνυμάτων 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

Περιγραφή κώδικα:

  • χρήσηpaho.mqtt.clientΣυνδεθείτε στο MQTT Broker και εγγραφείτε στο καθορισμένο θέμα.
  • Όταν ληφθεί ένα μήνυμα MQTT, χρησιμοποιήστε τοjson.loads()Αναλύστε το περιεχόμενο του μηνύματος.
  • Δημιουργήστε τα αναλυμένα δεδομένα σε μορφή σημείου δεδομένων InfluxDB.
  • χρήσηinfluxdb_client.write_points()Γράψτε δεδομένα στη βάση δεδομένων InfluxDB.

3. Οπτικοποίηση δεδομένων (Grafana)

  • Εγκαταστήστε το Grafana και διαμορφώστε την προέλευση δεδομένων για σύνδεση στη βάση δεδομένων InfluxDB.
  • Δημιουργήστε πίνακες εργαλείων και προσθέστε γραφήματα στον πίνακα εργαλείων, όπως γραμμικά γραφήματα, γραφήματα ράβδων κ.λπ.
  • Διαμορφώστε την προέλευση δεδομένων του γραφήματος ως InfluxDB και γράψτε δηλώσεις ερωτήματος για να λάβετε δεδομένα από το InfluxDB.
  • Διαμορφώστε το στυλ, τον τίτλο, τον άξονα και άλλα χαρακτηριστικά του γραφήματος όπως απαιτείται, για να κάνετε την εμφάνιση των δεδομένων πιο διαισθητική και εύκολη στην κατανόηση.

Παράδειγμα δήλωσης ερωτήματος Grafana:

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

Το ερώτημα θα ξεκινήσει απόsensor_dataΖητήστε τα δεδομένα θερμοκρασίας και υγρασίας της τελευταίας ώρας στη μέτρηση.

Αυτό το έργο συνδυάζει εργαλεία όπως το Flask, το EMQX, το InfluxDB και το Grafana για τη δημιουργία μιας πλατφόρμας cloud IoT που υποστηρίζει πρωτόκολλα MQTT και HTTP και πραγματοποιεί συλλογή δεδομένων, αποθήκευση και οπτική εμφάνιση. Η πλατφόρμα μπορεί να επεκταθεί ευέλικτα για να υποστηρίζει περισσότερους τύπους συσκευών και πρόσβαση σε πρωτόκολλο και οι λειτουργίες της μπορούν να προσαρμοστούν σύμφωνα με τις πραγματικές ανάγκες.

Ειδοποίηση:

  • Ο παραπάνω κωδικός είναι μόνο για αναφορά και πρέπει να τροποποιηθεί σύμφωνα με συγκεκριμένες ανάγκες σε πραγματικές εφαρμογές.
  • Βεβαιωθείτε ότι είναι εγκατεστημένες όλες οι εξαρτημένες βιβλιοθήκες, π.χ.paho-mqttinfluxdbflaskΠερίμενε.
  • Στην πραγματική ανάπτυξη, πρέπει να λαμβάνονται υπόψη παράγοντες όπως η ασφάλεια των δεδομένων και η σταθερότητα του συστήματος.

Αν θέλετε συγκεκριμένο κωδικό και ιδέες, μπορείτε να μου στείλετε προσωπικό μήνυμα! ! !