Anbindung von Geräten über das MQTT-Protokoll

Seitenübersicht
Einstieg in die Anbindung und minimaler Ablauf
- Legen Sie in der Produktverwaltung ein MQTT-Produkt an und veröffentlichen Sie es; notieren Sie Produkt-ID, Gerätenummer, MQTT-Konto, Passwort und Geräte-Autorisierungscode.
- Das Gerät oder MQTTX verbindet sich mit dem vereinbarten
clientId,userNameundpasswordmit dem MQTT-Dienst. - Nach erfolgreicher Verbindung wird zuerst
/info/postveröffentlicht, danach/property/postoder/event/post. - Auf der Plattformseite bestätigen Sie den geschlossenen Datenfluss über Laufzeitstatus, Ereignisprotokoll, Befehlsprotokoll und Regelszenen in den Gerätedetails.
1. Schritte der Anbindung
提示
- Referenz: ESP8266-Hardware-SDK-Quellcode FastBee Arduino SDK
- Wenn das MQTT-Nachrichtenformat des Geräts feststeht, können Sie die Nachrichten über die Regel-Engine weiterleiten und an die Plattform anpassen
- Im System integrierter netty-mqtt: Unterstützt die Weiterleitung von Topics und Inhalten
- EMQX als Middleware: Unterstützt die Weiterleitung von Inhalten; Topics können über die in EMQX integrierte Regel-Engine weitergeleitet werden
1.1. Geräteauthentifizierung
- Verschlüsselte Authentifizierung (empfohlen)
- Einfache Authentifizierung
1.2. Geräte-Interaktion
- MQTT-Topics zu Thing-Modell, Geräteinformationen und Zeitsynchronisierung veröffentlichen
- MQTT-Topics zu Thing-Modell, Geräte-Updates und Zeitsynchronisierung abonnieren
1.3. AP-Netzwerkkonfiguration des Geräts (optional, nur für WLAN-Geräte)
- Schnittstelle zur Geräteerkennung
- Schnittstelle zur Gerätekonfiguration
2. Geräteauthentifizierung
提示
- Authentifizierungstypen: S = einfache Authentifizierung, E = verschlüsselte Authentifizierung
- Wenn für ein Produkt der Geräte-Autorisierungscode aktiviert ist, darf der Autorisierungscode nicht leer sein
- Die Benutzer-ID ist die ID des angemeldeten Benutzers; bei unterschiedlichen Benutzer-IDs gehören die Geräte unterschiedlichen Benutzern. Sie können einheitlich das Konto admin mit ID 1 verwenden und die Geräte später über die Netzwerkkonfiguration oder das Scannen von Codes unterschiedlichen Benutzern zuweisen.
- Die Gerätenummer kann auf zwei Arten entstehen: 1. die Nummer, die beim Anlegen des Geräts im System generiert wird; 2. das System legt kein Gerät an, sondern die Hardware-Seite erzeugt eine eindeutige Nummer als Gerätenummer – nach der Authentifizierung registriert das System automatisch eine Geräte-Entität (bei vielen Geräten wird dieser Weg empfohlen)
2.1. Verschlüsselte Authentifizierung
Produktnummer, MQTT-Konto, MQTT-Passwort und Produktschlüssel finden Sie in den Produktdetails. Das Passwort wird mit dem Produktschlüssel per AES verschlüsselt und an das Backend übertragen; das Backend entschlüsselt es mit dem Produktschlüssel zur Authentifizierung. Für die Verbindung mit dem MQTT-Nachrichtenserver sind eine eindeutige Client-ID, ein Benutzername und ein Passwort erforderlich; das genaue Format:
# Die Client-ID setzt sich zusammen aus: Authentifizierungstyp + Gerätenummer + Produktnummer + Benutzer-ID
clientId = E & deviceNumber & productId & userId
# Benutzername
userName = fastbee
# Passwort
password = mqtt-passwort & ablaufzeit
password = mqtt-passwort & ablaufzeit & geräte-autorisierungscode (Format bei aktivierter Geräteautorisierung für das Produkt)- Die Client-ID setzt sich aus Authentifizierungstyp + Gerätenummer + Produktnummer + Benutzer-ID zusammen, verbunden mit dem Zeichen
&, ohne Leerzeichen dazwischen; - Als Benutzername geben Sie direkt das MQTT-Konto ein
- Das Passwort setzt sich aus MQTT-Passwort + Ablaufzeit + Geräte-Autorisierungscode (optional) zusammen und wird anschließend AES-verschlüsselt. Aus Sicherheitsgründen sollte die Ablaufzeit des Passworts innerhalb von 24 Stunden liegen; verwendet wird ein Zeitstempel, genau auf Millisekunden.
Beispiel für die Kontokonfiguration:
clientId = "E&D68329VL588&2&1"
userName = "fastbee"
password = "/W2A/4MK+9cEGBhyBDgr2K5c62DAjAK4m0b5pvwxX6FFMzI3h1pUmaDY3BH1P2mI"2.2. Einfache Authentifizierung
MQTT-Konto und MQTT-Passwort finden Sie in den Produktdetails; empfohlen für Testumgebungen. Das Format der MQTT-Client-ID entspricht der verschlüsselten Authentifizierung, wobei E durch S ersetzt wird.
# Die Client-ID setzt sich zusammen aus: Authentifizierungstyp + Gerätenummer + Produktnummer + Benutzer-ID
clientId = S & deviceNumber & productId & userId
# Benutzername
userName = fastbee
# Passwort
password = mqtt-passwort
password = mqtt-passwort & geräte-autorisierungscode (Format bei aktivierter Geräteautorisierung für das Produkt)Beispiel für die Kontokonfiguration:
# Die Client-ID setzt sich zusammen aus: Authentifizierungstyp + Gerätenummer + Produktnummer + Benutzer-ID
clientId = "S&D68329VL588&2&1"
userName = "fastbee"
password = "PHYFED93WSFF1DAS"
password = "PHYFED93WSFF1DAS&ADBFCC8934864B26B55658C66F562AC5" (Format bei aktivierter Geräteautorisierung für das Produkt)2.3. Gerät ermittelt die aktuelle Zeit
Zum Ermitteln der aktuellen Zeit kann die NTP-Zeitschnittstelle des Systems aufgerufen werden. Bei der Anfrage sendet das Gerät seine aktuelle Laufzeit in Millisekunden; zurückgegeben werden Sendezeit des Geräts, Empfangszeit des Servers und Sendezeit des Servers. Anschließend ermittelt das Gerät erneut seine aktuelle Laufzeit in Millisekunden als Empfangszeit des Geräts. Mit der Formel wird schließlich die aktuelle Gerätezeit berechnet; die Zeit muss in Millisekunden angegeben werden. Online-Zeitstempel-Tool
# Der Wert von deviceSendTime ist die aktuelle Laufzeit des Geräts in Millisekunden
http://localhost:8080/iot/tool/ntp?deviceSendTime=35768
# Zeitberechnung
Aktuelle Gerätezeit = (Empfangszeit des Servers + Sendezeit des Servers + Empfangszeit des Geräts - Sendezeit des Geräts) / 22.4. Hinweise zur AES-Verschlüsselung
Verwendet wird der CBC-Modus von AES; der Offset ist fest auf wumei-smart-open (16 Zeichen) gesetzt, die Ausgabe erfolgt in Base64, und das für die Verschlüsselung verwendete Passwort ist der Produktschlüssel. Für Tests können Sie das Online-Ver-/Entschlüsselungstool verwenden
Verschlüsselungsmodus: CBC
Padding: pkcs5padding
Datenblock: 128 Bit
Offset: wumei-smart-open
Ausgabe: base64
Passwort: Der Produktschlüssel des jeweiligen Systems
Zu verschlüsselnder Inhalt: mqtt-passwort & expireTime & autorisierungscode (optional)3. Geräte-Interaktion
{productId} steht für die Produkt-ID, {deviceNum} für die Gerätenummer. Produkt-ID und Gerätenummer erhalten Sie über die Weboberfläche; beim automatischen Hinzufügen von Geräten kann als Gerätenummer eine eindeutige Kennung oder die MAC-Adresse des Geräts verwendet werden – nach erfolgreicher Geräteauthentifizierung wird im Backend automatisch eine entsprechende Geräte-Entität angelegt.
3.1. Abonnierte Themen
| Thema (Topic) | Beschreibung |
|---|---|
| /{productId}/{deviceNum}/function/get | Plattformbefehle abonnieren |
| /{productId}/{deviceNum}/info/get | Geräteinformationen abonnieren (bei Empfang auf diesem Topic die Geräteinformationen veröffentlichen) |
| /{productId}/{deviceNum}/monitor/get | Echtzeit-Überwachungssignal abonnieren (abhängig von Anzahl und Intervall der Überwachung anschließend Überwachungsdaten veröffentlichen) |
| /{productId}/{deviceNum}/ntp/get | Zeitsynchronisierung abonnieren (optional, zur Synchronisierung der aktuellen Gerätezeit) |
| /{deviceNum}/http/upgrade/set | OTA-Updates per HTTPS abonnieren (neu) |
| /{deviceNum}/fetch/upgrade/set | OTA-Updates als Binärpaket abonnieren (neu) |
| /{productId}/{deviceNum}/ota/get | Geräte-Updates abonnieren (alt) |
| /{productId}/{deviceNum}/property/get | Seit 2.x veraltet Eigenschaften abonnieren (Server veröffentlicht, Gerät abonniert) |
| /{productId}/{deviceNum}/property-online/get | Seit 2.x veraltet Eigenschaften abonnieren (Online-Modus, Anwenderseite veröffentlicht, Gerät abonniert) |
| /{productId}/{deviceNum}/function-online/get | Seit 2.x veraltet Funktionen abonnieren (Online-Modus, Anwenderseite veröffentlicht, Gerät abonniert) |
3.2. Veröffentlichte Themen
| Thema (Topic) | Beschreibung |
|---|---|
| /{productId}/{deviceNum}/property/post | Daten veröffentlichen (Echtzeitanzeige; Eigenschaften/Funktionen und Überwachungsdaten; Überwachungsdaten können zeitgesteuert gemeldet werden) |
| /{productId}/{deviceNum}/info/post | Geräteinformationen veröffentlichen |
| /{productId}/{deviceNum}/event/post | Ereignisse veröffentlichen |
| /{productId}/{deviceNum}/monitor/post | Echtzeit-Überwachungsdaten veröffentlichen (nur für die Anzeige in Echtzeit-Überwachungsdiagrammen, werden nicht gespeichert) |
| /{productId}/{deviceNum}/ntp/post | Zeitsynchronisierung veröffentlichen (optional) |
| /{deviceNum}/http/upgrade/reply | OTA-Update per HTTPS beantworten (neu) |
| /{deviceNum}/fetch/upgrade/reply | OTA-Update als Binärpaket beantworten (neu) |
| /{productId}/{deviceNum}/upgrade/reply | OTA-Update beantworten (alt) |
| /{productId}/{deviceNum}/function/post | Seit 2.x veraltet Funktion veröffentlichen (Echtzeitanzeige) |
3.3. Datenformat
Gerät und System tauschen Daten im JSON-Format aus
- Geräteinformationen abonnieren, entsprechendes Topic:
/info/get
# Beschreibung: Nach Empfang der Geräteinformations-Anfrage die Geräteinformationen veröffentlichen, um die Synchronisierung des Gerätestatus sicherzustellen
# Der Nachrichteninhalt des Geräts ist leer- Geräteinformationen veröffentlichen, entsprechendes Topic:
/info/post
# Beschreibung: 1. Das Gerät veröffentlicht die Geräteinformationen nach dem Einschalten; 2. das Gerät veröffentlicht die Geräteinformationen nach Empfang des Geräteinformations-Befehls
# rssi Gerätesignal (ausgezeichnet [-55–0], gut [-70–-55], mäßig [-85–-70], schlecht [-100–-85])
# status Gerätestatus, fest auf 3 gesetzt, bedeutet online
# firmwareVersion Firmware-Version
# userId ID des Benutzers; kann auf Benutzer-ID 1 (Administrator) gesetzt werden – bei der Netzwerkkonfiguration wird das Gerät dem jeweiligen Benutzer zugewiesen.
# longitude Optional, Längengrad; bei Nutzung der Geräteortung hochzuladen
# latitude Optional, Breitengrad; bei Nutzung der Geräteortung hochzuladen
# iccid Optional, die ICCID der IoT-SIM-Karte; hochzuladen, wenn das Gerät eine IoT-SIM-Karte verwendet
# cardPlatformId Optional, entspricht der Kartenplattform-Nummer in der IoT-SIM-Kartenverwaltung; hochzuladen, wenn das Gerät eine ICCID hochlädt – ohne Angabe werden standardmäßig alle Kartenplattformen durchsucht
# summary Optional, Zusammenfassung, z. B. Konfigurationsinformationen des Geräts, im JSON-Format, das Objekt ist frei definierbar
{
"rssi": -43,
"firmwareVersion": 1.2,
"status": 3,
"userId": 2,
"longitude": 0,
"latitude": 0,
"iccid": 898604293620C0000970,
"cardPlatformId": 0,
"summary": {
"name": "FastBee",
"chip": "ESP8266",
"author": "fastbee",
"deliveryTime": "2023-06-06",
"activeTime": "2022-10-01"
}
}- Echtzeitüberwachung abonnieren, entsprechendes Topic:
/monitor/get
# Beschreibung: Nach Empfang der Echtzeit-Überwachungsnachricht die Echtzeit-Überwachungsdaten entsprechend Anzahl und Intervall veröffentlichen
# count Anzahl
# interval Intervall in Millisekunden
{
"count": 60,
"interval": 1000
}- Echtzeitüberwachung veröffentlichen, entsprechendes Topic:
/monitor/post
# Beschreibung: Entsprechend der abonnierten Echtzeit-Überwachungsnachricht die Überwachungsdaten mit der angegebenen Anzahl und im angegebenen Intervall veröffentlichen
# id Kennung; bei der Echtzeitüberwachung handelt es sich um Eigenschaften im Thing-Modell, die Kennung finden Sie in den Produktdetails und entspricht dem id-Wert
# value Vom Gerät erfasster Wert; nur Ganzzahlen oder Dezimalzahlen, Übertragung als String
# remark Kann leer sein oder die aktuelle Gerätezeit verwenden
[{
"id": "temperature",
"value": "27.43",
"remark": ""
}, {
"id": "humidity",
"value": "32.18",
"remark": ""
}]- Plattformbefehle abonnieren, entsprechendes Topic:
/function/get
# Beschreibung: Eigenschaften, Funktionen und Ereignisse gehören zum Thing-Modell, die JSON-Definition ist identisch. Erhält das Gerät beispielsweise überall die Nachricht „Schalter einschalten", schaltet es in jedem Fall den Schalter ein.
# id Kennung; in den Produktdetails im Thing-Modell einsehbar, entspricht der Kennung des Thing-Modells
# value Wert; entsprechend der Definition im Thing-Modell, Übertragung als String
# remark Befehle aus Alarmen, Szenenverknüpfungen und zeitgesteuerten Ausgaben der Plattform enthalten Anmerkungen
[{
"id": "gear",
"value": "1",
"remark": "Zeitsteuerung des Geräts"
},{
"id": "switch",
"value": "0",
"remark": "Ausgelöst durch Szenenverknüpfung"
}]- Daten und Ereignisse veröffentlichen, entsprechende Topics:
/property/post,/event/post
# Beschreibung: Eigenschaften, Funktionen und Ereignisse gehören zum Thing-Modell, die JSON-Definition ist identisch. Ist der Wert von `value` boolesch, lautet er "0" oder "1" für ein/aus; bei Enumerationstypen entspricht er dem Schlüssel des Enum-Eintrags (z. B. "1" für die mittlere Gebläsestufe); Array-Typen sind Strings mit Kommas als Trennzeichen.
# id Kennung; in den Produktdetails im Thing-Modell einsehbar, entspricht der Kennung des Thing-Modells
# value Wert; entsprechend der Definition im Thing-Modell, Übertragung als String
# remark Sie können direkt die abonnierte Anmerkung verwenden; die Anmerkung ist im Gerätelog einsehbar
[{
"id": "gear",
"value": "1",
"remark": "Gebläsestufe erfolgreich gesetzt"
}, {
"id": "switch",
"value": "0",
"remark": "Schalter ausgeschaltet"
}]Hinweise zum zugehörigen Thing-Modell
- Alle Thing-Modell-IDs (Kennungen) sind eindeutig; verwenden Sie möglichst keine Sonderzeichen, sondern vorwiegend Buchstaben und Ziffern.
- Das Format der Untermodell-IDs (Kennungen) unter einem Thing-Modell vom Objekttyp lautet: parentId_childId; bei Objekt-Array-Typen ebenso – die Untermodell-ID ergänzt die ID der übergeordneten Ebene, getrennt durch einen Unterstrich, zum Beispiel:
# Thing-Modell-ID der übergeordneten Ebene: power
# Thing-Modell-ID der untergeordneten Ebene: power_light- Thing-Modelle vom Array-Typ (einschließlich Objekt-Array-Typ) haben nur eine Thing-Modell-ID (Kennung); der Thing-Modell-Wert ist ein Array (gespeichert als String mit Kommas als Trennzeichen), z. B. der String
98,100,50. Das Melden von Eigenschaften/Funktionen/Ereignissen vom Array-Typ ist daher etwas Besonderes: Die ID (Kennung) muss mitarray_Indexbeginnen, der Index ist zweistellig, zum Beispiel:shell# Gewöhnliches Array-Format `array_00_RGB` # Objekt-Array-Format `array_00_power_switch` # Index 00 steht für das erste Element im Array, 02 / 03 ... 98 / 99 entsprechend, die Array-Länge darf 100 nicht überschreiten [{ "id": "array_01_power_switch", // array_01 als Präfix steht für das zweite Element im Array "value": "1", "remark": "" }]
- Zeitsynchronisierung veröffentlichen, entsprechendes Topic:
/ntp/post
# Beschreibung: Optional; die Zeitsynchronisierungsnachricht veröffentlichen – der Server sendet nach dem Empfang die Zeitsynchronisierungsnachricht
# deviceSendTime Sendezeit des Geräts
{
"deviceSendTime": "1592361428000"
}- Zeitsynchronisierung abonnieren, entsprechendes Topic:
/ntp/get
# Beschreibung: Optional; nach Empfang der Zeitsynchronisierungsnachricht die aktuelle Zeit berechnen = (Empfangszeit des Servers + Sendezeit des Servers + Empfangszeit des Geräts - Sendezeit des Geräts) / 2
# deviceSendTime Sendezeit des Geräts
# serverRecvTime Empfangszeit des Servers
# serverSendTime Sendezeit des Servers
{
"deviceSendTime": "1592361428000",
"serverSendTime": "1592366463548",
"serverRecvTime": "1592366463548"
}- OTA-Updates abonnieren, entsprechende Topics:
/http/upgrade/setoder/fetch/upgrade/set
# Beschreibung: Nach Empfang der Geräte-Update-Nachricht die Firmware anhand der Download-Adresse per HTTP-Anfrage herunterladen und das Update durchführen
# version Versionsnummer, kann zum Abgleich der Firmware-Version verwendet werden
# downloadUrl Download-Adresse der Firmware
{
"taskId": 26,
"url": "/profile/iot/1/2024-0824-001954.bin",
"version": 1.2,
"status": 1
}4. Netzwerkkonfiguration des Geräts (optional, nur für WLAN-Geräte)
提示
- Das Gerät nutzt die AP-Netzwerkkonfiguration: Dabei öffnet das Gerät einen Hotspot und stellt einen Webdienst bereit. Die mobile App überträgt die Konfigurationsinformationen über den Webdienst des Geräts.
- Die Hotspot-Adresse des Geräts ist: 192.168.4.1
- Sie können sich am Projekt-SDK orientieren
4.1. Schnittstelle zur Geräteerkennung
Das Gerät stellt eine Erkennungsschnittstelle bereit, über die die mobile App die Geräteerkennung umsetzt; geeignet für die Netzwerkkonfiguration einzelner Geräte.
# Anfragemethode: Get
# Schnittstellenadresse: http://192.168.4.1/status
# Parameter: keine
# Rückgabe: HTTP-Statuscode 200 bedeutet, dass das Gerät erkannt wurde4.2. Konfigurationsschnittstelle
Das Gerät stellt eine Konfigurationsschnittstelle zum Abruf von Informationen bereit; die mobile App sendet die Konfigurationsinformationen, die Parameter werden per URL übertragen. SSID, password und userId sind Pflichtparameter.
# Anfragemethode: Post
# Schnittstellenadresse: http://192.168.4.1/config
# Parameter:
SSID # Name des WLANs
password # Passwort des WLANs
userId # Benutzernummer/-ID
deviceNum # Optional, Gerätenummer
authCode # Optional, Autorisierungscode
extra # Optional, ergänzende Informationen
# Rückgabe: HTTP-Statuscode 200 bedeutet erfolgreiche Netzwerkkonfiguration; HTTP-Statuscode 500 bedeutet fehlgeschlagene Netzwerkkonfiguration;
# Beispiel-URL der Anfrage: Das Gerät liest die Parameter aus dieser URL und speichert sie
http://192.168.4.1/config?SSID=mywifi&password=mywifipassword&userId=1
http://192.168.4.1/config?SSID=mywifi&password=mywifipassword&userId=1&deviceNum=D68329VL588&authCode=6688&extra=open5. Abnahmecheckliste für die Integration
Die MQTT-Geräteanbindung sollte in der folgenden Reihenfolge abgenommen werden, damit nicht nur die Verbindung erfolgreich ist, sondern die Geschäftsdaten auch tatsächlich in der Plattform ankommen.
| Schritt | Prüfinhalt | Erfolgskriterium |
|---|---|---|
| 1 | Produkt veröffentlicht | Produktstatus ist „veröffentlicht" |
| 2 | MQTTX- oder Geräteverbindung | Die EMQX-Konsole zeigt die Client-Verbindung |
| 3 | Gerätestatus | Gerätedetails zeigen „online" oder eine aktualisierte Zeit der letzten Online-Phase |
| 4 | /info/post | Geräteinformationen, Signal-, Versions- und weitere Felder aktualisiert |
| 5 | /property/post | Laufzeitstatus zeigt Thing-Modell-Eigenschaftswerte |
| 6 | /event/post | Gemeldete Ereignisse erscheinen im Ereignisprotokoll |
| 7 | /function/get | Gerät empfängt den von der Plattform gesendeten Befehl |
| 8 | Ergebnisrückmeldung | Gerät meldet das Ergebnis zurück, Plattformstatus wird aktualisiert |
| 9 | Regeln/Szenen | Zugehörige Regeln, Szenen und Alarme werden ausgelöst |
6. Häufige Fehler
Verbindung abgelehnt
Zuerst prüfen:
- Ist der Port
1883auf dem Server geöffnet? - Ist EMQX oder der integrierte MQTT-Dienst gestartet?
- Entspricht das
clientIddem FormatS&Gerätenummer&Produkt-ID&Benutzer-IDoder dem Format der verschlüsselten Authentifizierung? - Ist für das Produkt die Geräteautorisierung aktiviert und enthält das Passwort dann den Autorisierungscode?
- Ist das Gerät deaktiviert?
Gerät online, aber Eigenschaften aktualisieren sich nicht
Zuerst prüfen:
- Lautet das Veröffentlichungsthema
/{productId}/{deviceNum}/property/post? - Verwenden Sie für
productIddie Produkt-ID und nicht die Produktnummer? - Stimmt
deviceNumexakt mit der Gerätenummer überein? - Ist der Nachrichtentext ein Array?
- Stimmt
idexakt mit der Thing-Modell-Kennung überein? - Entspricht
valuedem Datentyp?
Gerät empfängt Plattformbefehle nicht
Zuerst prüfen:
- Hat das Gerät
/{productId}/{deviceNum}/function/getabonniert? - Ist die MQTTX- oder Geräteverbindung noch online?
- Handelt es sich beim Thing-Modell um eine beschreibbare Funktion oder eine setzbare Eigenschaft?
- Hat der Benutzer die Berechtigung für Gerätedetails und Befehlsausgabe?
- Beeinflusst der Geräteschatten die aktuelle Beurteilung?
Regel oder Alarm wurde nicht ausgelöst
Zuerst prüfen:
- Gelangen die Gerätedaten in den Laufzeitstatus der Plattform?
- Sind Produkt, Gerät und Variable, die an die Szene oder Regel gebunden sind, korrekt?
- Stimmt der Bedingungsausdruck mit dem Typ des gemeldeten Werts überein?
- Ist die Alarmkonfiguration aktiviert?
7. Einstiegspunkte für die Weiterentwicklung
| Typ | Pfad oder Schnittstelle | Beschreibung |
|---|---|---|
| MQTT-Authentifizierung | /iot/tool/mqtt/auth, /iot/tool/mqtt/webhook | Einstieg für EMQX-Authentifizierung und Webhook |
| Geräteschnittstelle | /iot/device | Gerät online, Status, Details |
| Thing-Modell-Schnittstelle | /iot/model | Modelldefinition und -mapping |
| Protokollmodul | springboot/fastbee-protocol | Parsing und Umwandlung von MQTT-Nachrichten |
| Datenmodul | springboot/fastbee-iot-data | Verarbeitung von Eigenschaften, Ereignissen und Überwachungsdaten |
| Frontend-Seite | vue3/src/views/iot/device | Gerätedetails, Laufzeitstatus, Daten-Debugging |
| Frontend-API | vue3/src/api/iot | Kapselung der Anfragen für Geräte und Thing-Modelle |


