Teknologian jakaminen

Moniprotokollaisen IoT-pilvialustan rakentaminen EMQX Flask InfluxDB Grafanaan perustuvan: MQTT/HTTP-laitteiden käyttö- ja tietojen visualisointiprosessi (koodiesimerkein)

2024-07-12

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

Yhteenveto: Tämä artikkeli esittelee ydinkäsitteitä, kuten esineiden internetin, pilvialustan, MQTT:n, HTTP:n ja tietojen visualisoinnin yksinkertaisella ja helposti ymmärrettävällä tavalla. Siinä yhdistyvät myös tavanomaiset työkalut, kuten EMQX, Flask, InfluxDB ja Grafana. voit askel askeleelta rakentaa esineiden internet -pilvialustan, joka tukee useita protokollia. Artikkelissa on selkeä rakenne, kuvat ja tekstit, ja koodi on informatiivinen ja helposti ymmärrettävä. Se on suunniteltu auttamaan lukijoita nopeasti hallitsemaan IoT-pilvialustan rakentamisen ydintekniikka.

Avainsanat:IoT, pilvialusta, MQTT, HTTP, tietojen visualisointi, EMQX, Flask, InfluxDB, Grafana


1. Perustiedot esineiden internetistä

1.1 Esineiden internetin yleiskatsaus

Esineiden internet (IoT, Internet of Things) viittaa reaaliaikaiseen kokoelmaan kohteista tai prosesseista, joita on seurattava, yhdistettävä ja vuorovaikutettava erilaisten tietoanturien, radiotaajuustunnistustekniikan, globaalien paikannusjärjestelmien jne. kautta. toteuttaa kaikkialla olevaa kommunikaatiota asioiden ja asioiden välillä sekä asioiden ja ihmisten välillä.

1.2 IoT-arkkitehtuuri

IoT-järjestelmäarkkitehtuuri on yleensä jaettu kolmeen kerrokseen:

  • Havaintokerros:Vastaa tietojen keräämisestä, mukaan lukien erilaiset sensorit, RFID-tunnisteet, GPS-moduulit jne.
  • Verkkokerros:Vastaa tiedonsiirrosta, mukaan lukien erilaiset verkkoprotokollat, viestintätekniikat jne., kuten WiFi, Bluetooth, Zigbee, NB-IoT jne.
  • Sovelluskerros:Vastaat tietojenkäsittelystä ja sovellusten esittelystä, kuten data-analyysistä, kauko-ohjauksesta, älykkäästä päätöksenteosta jne.

2. Pilvialusta ja datan visualisointi

2.1 Pilvialusta

Pilvialustalla tarkoitetaan Internet-pohjaisten palveluiden lisäämistä, käyttöä ja toimitusmallia, joka sisältää yleensä dynaamisesti skaalautuvien ja usein virtualisoitujen resurssien tarjoamisen Internetin kautta. Pilviympäristöt voivat tarjota tehokkaita laskenta-, tallennus- ja verkkoresursseja IoT-sovelluksille, mikä vähentää IoT-sovellusten kehittämis- ja käyttöönottokustannuksia.

2.2 Tietojen visualisointi

Tietojen visualisointi tarkoittaa tietojen näyttämistä visuaalisissa muodoissa, kuten grafiikoissa ja kaavioissa, jotta käyttäjät ymmärtävät tiedot intuitiivisemmin ja saavat käsityksen tietojen taustalla olevista malleista ja trendeistä.

3. Yleisesti käytettyjen protokollien ja työkalujen esittely

3.1 MQTT-protokolla

MQTT (Message Queuing Telemetry Transport) on kevyt viestien julkaisu-/tilausprotokolla, joka on suunniteltu alhaisen kaistanleveyden, vähän virtaa käyttäville laitteille ja verkoille. MQTT:tä käytetään laajasti esineiden internetin alalla, ja se sopii erityisesti resurssirajoitteisiin laitteisiin ja epäluotettaviin verkkoympäristöihin.

3.2 HTTP-protokolla

HTTP (Hypertext Transfer Protocol) on sovelluskerroksen protokolla, jota käytetään tiedon siirtämiseen Web-selaimien ja Web-palvelimien välillä. HTTP-protokolla on yksinkertainen ja helppokäyttöinen, ja sitä käytetään laajasti erilaisissa verkkosovelluksissa, mukaan lukien esineiden Internet.

3.3 EMQX

EMQX on avoimen lähdekoodin, korkean suorituskyvyn, skaalautuva MQTT-viestipalvelin, joka tukee miljoonia samanaikaisia ​​yhteyksiä ja viestien läpikulkua.

3.4 Pullo

Flask on kevyt Pythonilla kirjoitettu verkkosovelluskehys, joka on helppo oppia ja käyttää ja joka soveltuu verkkosovellusten ja API-liittymien nopeaan rakentamiseen.

3.5 InfluxDB

InfluxDB on avoimen lähdekoodin aikasarjatietokanta, joka on suunniteltu aikasarjatietojen tallentamiseen ja kyselyihin. Se soveltuu IoT-anturitietojen, seurantatietojen jne. tallentamiseen.

3.6 Grafana

Grafana on avoimen lähdekoodin tietojen visualisointityökalu, joka voi yhdistää useita tietolähteitä luodakseen kauniita ja tehokkaita kojetauluja ja näyttääkseen tietoja reaaliajassa.

4. Moniprotokollaisen IoT-pilvialustan rakentaminen

Tämä projekti rakentaa IoT-pilvialustan, joka tukee MQTT- ja HTTP-protokollia seuraavien toimintojen saavuttamiseksi:

  • Monen protokollan tuki: Tukee laitteen käyttöä sekä MQTT- että HTTP-protokollien kanssa.
  • Tiedonkeruu ja tallennus: Kerää tietoa eri protokollalaitteista reaaliajassa ja tallenna ne InfluxDB-tietokantaan.
  • tietojen visualisointi: Käytä Grafanaa kerättyjen tietojen visuaaliseen näyttämiseen.
4.1 Järjestelmän arkkitehtuuri

 

4.2 Koodin käyttöönotto

1. HTTP-palvelimen rakentaminen (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)

Koodin kuvaus:

  • käyttääFlaskKehys luo HTTP-palvelimen ja määrittelee/dataKäyttöliittymä vastaanottaa POST-pyynnöt.
  • käyttäärequest.get_json()Hanki JSON-tiedot HTTP-pyynnössä.
  • Suorita tietojen käsittely, kuten tietojen tarkistus, muotomuunnos jne.
  • käyttääInfluxDBClientMuodosta yhteys InfluxDB-tietokantaan ja kirjoita tiedot tietokantaan.
  • Ilmoita asiakkaalle tiedon vastaanottamisesta onnistuneesta vastauksesta JSON-muodossa.

2. MQTT-viestinkäsittely (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

Koodin kuvaus:

  • käyttääpaho.mqtt.clientYhdistä MQTT Brokeriin ja tilaa määritetty aihe.
  • Kun MQTT-viesti vastaanotetaan, käytäjson.loads()Jäsennä viestin sisältö.
  • Rakenna jäsennetyt tiedot InfluxDB-tietopistemuotoon.
  • käyttääinfluxdb_client.write_points()Kirjoita tiedot InfluxDB-tietokantaan.

3. Tietojen visualisointi (Grafana)

  • Asenna Grafana ja määritä tietolähde muodostamaan yhteys InfluxDB-tietokantaan.
  • Luo kojelaudat ja lisää kojelautaan kaavioita, kuten viivakaavioita, pylväskaavioita jne.
  • Määritä kaavion tietolähteeksi InfluxDB ja kirjoita kyselylauseita saadaksesi tietoja InfluxDB:stä.
  • Määritä kaavion tyyli, otsikko, akseli ja muut attribuutit tarpeen mukaan, jotta tietojen näyttäminen olisi intuitiivisempaa ja helpompi ymmärtää.

Esimerkki Grafana-kyselylausekkeesta:

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

Kysely alkaasensor_dataPyydä mittauksen viimeisen tunnin lämpötila- ja kosteustiedot.

Tämä projekti yhdistää työkalut, kuten Flask, EMQX, InfluxDB ja Grafana, rakentaakseen IoT-pilvialustan, joka tukee MQTT- ja HTTP-protokollia sekä toteuttaa tiedonkeruun, -talloinnin ja visuaalisen näytön. Alustaa voidaan joustavasti laajentaa tukemaan useampia laitteita ja protokollakäyttöä ja sen toimintoja voidaan räätälöidä todellisten tarpeiden mukaan.

Ilmoitus:

  • Yllä oleva koodi on vain viitteellinen ja sitä on muutettava todellisten sovellusten erityistarpeiden mukaan.
  • Varmista, että kaikki riippuvat kirjastot on asennettu, esim.paho-mqttinfluxdbflaskodota.
  • Varsinaisessa käyttöönotossa on otettava huomioon sellaiset tekijät kuin tietoturva ja järjestelmän vakaus.

Jos haluat tarkempaa koodia ja ideoita, voit laittaa minulle yksityisviestiä! ! !