Naadloze Modbus-sensorintegratie met EdgeX Foundry op Raspberry Pi
Naadloze Modbus-sensorintegratie met EdgeX Foundry op Raspberry Pi
Industrial Internet of Things (IIoT) implementaties vertrouwen steeds meer op edge-gateways om Modbus-geïnstalleerde randapparaten met cloud-analyse te verbinden. Het bouwen van een eigen gateway kan duur en traag zijn. Deze casestudy demonstreert hoe een open-source framework—EdgeX Foundry—op een Raspberry Pi kan worden geïmplementeerd om een Modbus temperatuur-vochtigheidssensor te koppelen, data naar de cloud te streamen en realtime actuaties te triggeren met minimale inspanning.
Waarom Modbus en EdgeX?
Modbus is een open, lichtgewicht protocol dat draait over goedkope RS-485 verbindingen. Het gebruikt eenvoudige registers (16-bit unsigned integers) voor analoge waarden en coils voor binaire statussen, wat het ideaal maakt voor industriële apparaten. EdgeX Foundry, een open-source edge-middleware, fungeert als brug tussen fysieke sensoren en IT-systemen, en biedt apparaatbeheer, datatransformatie en cloud-connectiviteit out-of-the-box.
Hardwarestack
- Raspberry Pi 4 (edge gateway)
- Modbus RTU sensor: SHT20 (temperatuur & vochtigheid)
- RS-485 naar USB converter
- LED's voor visuele status (GPIO-12 & GPIO-14)
- USB voeding
Afbeelding 1:
Afbeelding 1. EdgeX Foundry – open-source edge middleware
Afbeelding 2:
Afbeelding 2. Hoog-niveau blokdiagram van de EdgeX implementatie
Stap-voor-stap integratie
- Raspberry Pi instellen
- Installeer Ubuntu 20.04 LTS met Docker en docker-compose.
- Kloon de EdgeX Foundry repository en start de stack via docker-compose.
- Simuleer het Modbus-apparaat
- Gebruik ModbusPal (GPL) om tot 247 Modbus-slaves te emuleren.
- Configureer een slave met holding registers voor temperatuur (adres 2) en vochtigheid (adres 3). Elk register wijst op een 16-bit integer die geschaald wordt naar °C en %RH.
- Start ModbusPal via TCP of serieel (USB-RS485) om communicatie te verifiëren.
- Apparaatprofiel uploaden
Stuur een
POSTverzoek naarhttps://localhost:48081/api/v1/deviceprofile/uploadfilemet het YAML-bestand met het profiel (zie hieronder). Het antwoord retourneert een uniek profiel-ID. - Registreer het apparaat
Post de volgende JSON naar
https://localhost:48081/api/v1/deviceom de sensorinvoer te creëren. Deprotocols.modbus-rtusectie wijst naar/dev/ttyUSB0op 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"} ] } - Dataflow verifiëren
- EdgeX's device service haalt data elke 5 seconden op en schrijft naar de core service, die het opslaat in Redis.
- Applicatieservices sturen de data door naar de IBM Cloud (of elke cloud naar keuze).
- Voorbeeld logboekitems tonen de Modbus request/response pakketten.
- LED's actueren met Kuiper rules engine
- Definieer regels: als temperatuur > 30 °C rood LED aan; als < 30 °C uit; analoog voor blauwe LED bij 28 °C.
- Kuiper stuurt commando's naar EdgeX core-command, wat vervolgens de GPIO device service bijwerkt.
- GPIO-uitgangen worden geverifieerd via
/sys/class/gpio/gpio12/valueen/sys/class/gpio/gpio14/value.
Belangrijke configuratiefragmenten
Apparaatprofiel (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 configuratie (fragment)
[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"
Resultaten
De end-to-end flow toont realtime temperatuur- en vochtigheidsdata die aankomt in de IBM Cloud, regels-gebaseerde LED-statuswijzigingen triggeren, en de volledige mogelijkheden van EdgeX op een goedkope Raspberry Pi demonstreren.
Conclusie
EdgeX Foundry stelt snelle implementatie van Modbus-gebaseerde IIoT-oplossingen in met minimale ontwikkelingsoverhead. Door apparaatbeheer, dataopslag en cloud-connectiviteit te abstraheren, stelt het ingenieurs vrij om zich te richten op domeinlogica en analyses.
Afkortingen
| Afkorting | Uitwerking |
|---|---|
| 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 of Things-technologie
- Edge AI Inferencing meesteren: Een praktische gids voor actionable insights
- Een beginnersgids voor open-source terminologie
- Cisco onthult Catalyst 5G Industriële Routers voor naadloze verbinding van enterprise en edge-netwerken
- AT&T & Tech Mahindra lanceren Acumos: een open-source AI-platform voor snelle implementatie
- Productie-excellentie Verhogen met Industry 4.0: De Opkomst van Quality 4.0
- Open-Source Software in IoT Beveiligen: Software Risico's Mitigeren
- Industrie 4.0 verhogen: Edge-analytics benutten voor slimmere, snellere productie
- IIC en OpenFog fusioneren om edge computing-innovatie te drijven
- Open-Source vs. Vendor-ondersteunde IoT-ontwikkeltools: De Juiste Stack Kiezen voor Je Onderneming
- Waarom Open Source Innovatie Aan De Edge Drijft – Essentiële eBook
- Open Source drijft de opkomst van IoT en Edge Computing