Nahtlose Modbus-Sensor-Integration mit EdgeX Foundry auf Raspberry Pi
Nahtlose Modbus-Sensor-Integration mit EdgeX Foundry auf Raspberry Pi
Industrial Internet of Things (IIoT)-Implementierungen verlassen sich zunehmend auf Edge-Gateways, um Modbus-fähige Peripheriegeräte mit Cloud-Analysen zu verbinden. Der Bau eines proprietären Gateways kann teuer und zeitaufwendig sein. Diese Fallstudie zeigt, wie ein Open-Source-Framework – EdgeX Foundry – auf einem Raspberry Pi eingesetzt werden kann, um einen Modbus-Temperatur-Feuchtigkeitssensor anzubinden, Daten in die Cloud zu streamen und Echtzeit-Aktuierungen mit minimalem Aufwand auszulösen.
Warum Modbus und EdgeX?
Modbus ist ein offenes, leichtes Protokoll, das über kostengünstige RS‑485-Verbindungen läuft. Es verwendet einfache Register (16-Bit-unsigned-Integers) für analoge Werte und Coils für binäre Zustände, was es ideal für industrielle Geräte macht. EdgeX Foundry, eine Open-Source-Edge-Middleware, fungiert als Brücke zwischen physischen Sensoren und IT-Systemen und bietet Geräteverwaltung, Datentransformation und Cloud-Konnektivität out-of-the-box.
Hardware-Stack
- Raspberry Pi 4 (Edge-Gateway)
- Modbus RTU Sensor: SHT20 (Temperatur & Feuchtigkeit)
- RS‑485 zu USB Konverter
- LEDs für visuellen Status (GPIO‑12 & GPIO‑14)
- USB-Netzteil
Abbildung 1:
Abbildung 1. EdgeX Foundry – Open-Source-Edge-Middleware
Abbildung 2:
Abbildung 2. Hochwertiges Blockdiagramm der EdgeX-Implementierung
Schritt-für-Schritt-Integration
- Raspberry Pi einrichten
- Ubuntu 20.04 LTS mit Docker und docker‑compose installieren.
- EdgeX Foundry Repository klonen und den Stack via docker‑compose starten.
- Modbus-Gerät simulieren
- ModbusPal (GPL) verwenden, um bis zu 247 Modbus-Slaves zu emulieren.
- Einen Slave mit Holding-Registern für Temperatur (Adresse 2) und Feuchtigkeit (Adresse 3) konfigurieren. Jedes Register entspricht einem 16-Bit-Integer, der auf °C und %rF skaliert wird.
- ModbusPal über TCP oder Serial (USB‑RS485) starten und Kommunikation verifizieren.
- Geräteprofil hochladen
Einen
POST-Request anhttps://localhost:48081/api/v1/deviceprofile/uploadfilesenden mit der YAML-Datei, die das Profil enthält (siehe unten). Die Antwort liefert eine eindeutige Profil-ID. - Gerät registrieren
Folgendes JSON an
https://localhost:48081/api/v1/deviceposten, um den Sensor-Eintrag zu erstellen. Der Abschnittprotocols.modbus‑rtuverweist auf/dev/ttyUSB0mit 9600 Baud.{ "name": "TemperatureHumiditySensor", "description": "Industrial Grade Temperature & Humidity Transmitter SHT20", "adminState": "UNLOCKED", "operatingState": "ENABLED", "protocols": { "modbus-rtu": { "Address": "/dev/ttyUSB0", "BaudRate": "9600", "DataBits": "8", "StopBits": "1", "Parity": "N", "UnitID": "1" } }, "labels": ["TemperatureHumiditySensor","modbusRTU"], "service": {"name": "edgex-device-modbus"}, "profile": {"name": "TemperatureHumiditySensor"}, "autoEvents": [ {"frequency": "5s", "onChange": false, "resource": "TemperatureDegC"}, {"frequency": "5s", "onChange": false, "resource": "HumidityPercentRH"} ] } - Datenfluss verifizieren
- EdgeX Device Service ruft alle 5 s Daten ab und schreibt in den Core Service, der sie in Redis speichert.
- Application Services leiten die Daten an die IBM Cloud (oder jede andere Cloud) weiter.
- Beispiel-Log-Einträge zeigen Modbus Request/Response-Pakete.
- LEDs mit Kuiper Rules Engine ansteuern
- Regeln definieren: Wenn Temperatur > 30 °C rote LED einschalten; wenn < 30 °C ausschalten; analog für blaue LED bei 28 °C.
- Kuiper sendet Befehle an EdgeX Core‑Command, das dann den GPIO Device Service aktualisiert.
- GPIO-Ausgänge über
/sys/class/gpio/gpio12/valueund/sys/class/gpio/gpio14/valueprüfen.
Wichtige Konfigurationsausschnitte
Geräteprofil (YAML)
name: TemperatureHumiditySensor manufacturer: ROBOKITS model: RKI-4879 labels: - SHT20 description: Industrial Grade Temperature & Humidity Transmitter SHT20 Sensor High Precision Monitoring Modbus RS485 deviceResources: - name: TemperatureDegC description: Room Temperature in Degrees Celsius. attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 2, rawType: INT16 } properties: value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation } units: { type: String, readWrite: R, defaultValue: degrees celsius } - name: HumidityPercentRH description: Room Humidity in %RH. attributes: { primaryTable: INPUT_REGISTERS, startingAddress: 3, rawType: INT16 } properties: value: { type: Float32, readWrite: R, scale: 0.1, floatEncoding: eNotation } units: { type: String, readWrite: R, defaultValue: %RH } deviceCommands: - name: TemperatureDegC get: [{ index: 1, operation: get, deviceResource: TemperatureDegC }] - name: HumidityPercentRH get: [{ index: 2, operation: get, deviceResource: HumidityPercentRH }] coreCommands: - name: TemperatureDegC get: path: /api/v1/device/{deviceId}/TemperatureDegC responses: - code: 200 description: Get the temperature in degrees C expectedValues: [TemperatureDegC] - name: HumidityPercentRH get: path: /api/v1/device/{deviceId}/HumidityPercentRH responses: - code: 200 description: Get the humidity in %RH expectedValues: [HumidityPercentRH]
device‑modbus TOML Konfiguration (Auszug)
[DeviceList] Name = "TemperatureHumiditySensor" Profile = "TemperatureHumiditySensor" Description = "Industrial Grade Temperature & Humidity Transmitter SHT20" labels = ["TemperatureHumiditySensor","modbusRTU"] [DeviceList.Protocols.modbus-rtu] Address = "/dev/ttyUSB0" BaudRate = 9600 DataBits = 8 StopBits = 1 Parity = "N" UnitID = 1 [[DeviceList.AutoEvents]] Frequency = "5s" OnChange = false Resource = "TemperatureDegC" [[DeviceList.AutoEvents]] Frequency = "5s" OnChange = false Resource = "HumidityPercentRH"
Ergebnisse
Fazit
EdgeX Foundry ermöglicht schnelle Bereitstellung von Modbus-basierten IIoT-Lösungen mit minimalem Entwicklungsaufwand. Durch Abstraktion von Geräteverwaltung, Datenspeicherung und Cloud-Konnektivität können sich Ingenieure auf Domänenlogik und Analysen konzentrieren.
Akronyme
| Akronym | Bedeutung |
|---|---|
| AOF | Append Only File |
| API | Application Program Interface |
| AWS | Amazon Web Services |
| BACnet | Building Automation and Control Network |
| BLE | Bluetooth Low Energy |
| CURL | Client Uniform Resource Locator |
| GPIO | General Purpose Input Output |
| HTTP | Hypertext Transfer Protocol |
| IBM | International Business Machines |
| IIoT | Industrial Internet of Things |
| IoT | Internet of Things |
| IT | Information Technology |
| LED | Light Emitting Diode |
| LTS | Long Term Support |
| M2M | Man to Machine |
| MQTT | Message Queuing Telemetry Transport |
| RDB | Redis Database |
| Redis | REmote DIctionary Server |
| REST | Representational State Transfer |
| RS‑485 | Recommended Standard – 485 |
| SCADA | Supervisory Control and Data Acquisition |
| SQL | Structured Query Language |
| TCP/IP | Transmission Control Protocol/Internet Protocol |
Internet der Dinge-Technologie
- Einsteiger-Guide zu Open-Source-Terminologie
- Cisco stellt Catalyst 5G Industrial Router vor: Enterprise und Edge nahtlos verbinden
- AT&T & Tech Mahindra starten Acumos: Open-Source-KI-Plattform für schnelles Deployment
- Manufacturing Excellence mit Industry 4.0 steigern: Der Aufstieg von Quality 4.0
- Open-Source-Software im IoT absichern: Software-Risiken mindern
- Industry 4.0 steigern: Edge Analytics für smartere, schnellere Fertigung nutzen
- IIC und OpenFog fusionieren zur Treibkraft für Edge-Computing-Innovation
- Open Source vs. Vendor-Supported IoT Development Tools: Den richtigen Stack für Ihr Enterprise wählen
- Warum Open Source Innovation am Edge antreibt – Essential eBook
- Open Source treibt den Aufstieg von IoT und Edge Computing voran