Integrasi Sensor Modbus Lancar Menggunakan EdgeX Foundry pada Raspberry Pi
Integrasi Sensor Modbus Lancar Menggunakan EdgeX Foundry pada Raspberry Pi
Penerapan Internet of Things Industri (IIoT) semakin mengandalkan gateway tepi untuk menghubungkan periferal yang mendukung Modbus dengan analitik cloud. Membangun gateway milik sendiri dapat mahal dan lambat. Studi kasus ini menunjukkan bagaimana framework sumber terbuka—EdgeX Foundry—dapat diterapkan pada Raspberry Pi untuk menghubungkan sensor suhu-kelembaban Modbus, mengalirkan data ke cloud, dan memicu aksi waktu nyata dengan usaha minimal.
Mengapa Modbus dan EdgeX?
Modbus adalah protokol terbuka dan ringan yang berjalan melalui tautan RS-485 yang murah. Ini menggunakan register sederhana (bilangan bulat tak bertanda 16-bit) untuk nilai analog dan coil untuk status biner, menjadikannya ideal untuk perangkat industri. EdgeX Foundry, middleware tepi sumber terbuka, bertindak sebagai jembatan antara sensor fisik dan sistem TI, menyediakan manajemen perangkat, transformasi data, dan konektivitas cloud secara langsung.
Stack Perangkat Keras
- Raspberry Pi 4 (gateway tepi)
- Sensor Modbus RTU: SHT20 (suhu & kelembaban)
- Konverter RS-485 ke USB
- LED untuk status visual (GPIO-12 & GPIO-14)
- Sumber daya USB
Gambar 1: 
Gambar 1. EdgeX Foundry – middleware tepi sumber terbuka
Gambar 2: 
Gambar 2. Diagram blok tingkat tinggi penerapan EdgeX
Integrasi Langkah demi Langkah
- Siapkan Raspberry Pi
- Instal Ubuntu 20.04 LTS dengan Docker dan docker-compose.
- Kloning repositori EdgeX Foundry dan jalankan stack melalui docker-compose.
- Simulasikan perangkat Modbus
- Gunakan ModbusPal (GPL) untuk mengemulasi hingga 247 hamba Modbus.
- Konfigurasikan hamba dengan register simpan untuk suhu (alamat 2) dan kelembaban (alamat 3). Setiap register memetakan ke bilangan bulat 16-bit yang akan diskalakan ke °C dan %RH.
- Mulai ModbusPal melalui TCP atau serial (USB-RS485) untuk memverifikasi komunikasi.
- Unggah profil perangkat
Kirim permintaan POST ke https://localhost:48081/api/v1/deviceprofile/uploadfile dengan file YAML yang berisi profil (lihat di bawah). Respons mengembalikan ID profil unik.
- Daftarkan perangkat
Posting JSON berikut ke https://localhost:48081/api/v1/device untuk membuat entri sensor. Bagian protocols.modbus-rtu menunjuk ke /dev/ttyUSB0 pada 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"} ] }
- Verifikasi aliran data
- Layanan perangkat EdgeX menarik data setiap 5 detik dan menulis ke layanan inti, yang menyimpannya di Redis.
- Layanan aplikasi meneruskan data ke IBM Cloud (atau cloud pilihan Anda).
- Contoh entri log menunjukkan paket permintaan/respons Modbus.
- Aktifkan LED dengan mesin aturan Kuiper
- Definisikan aturan: jika suhu > 30 °C nyalakan LED merah; jika < 30 °C matikan; demikian pula untuk LED biru pada 28 °C.
- Kuiper mendorong perintah ke EdgeX core-command, yang kemudian memperbarui layanan perangkat GPIO.
- Output GPIO diverifikasi melalui
/sys/class/gpio/gpio12/value dan /sys/class/gpio/gpio14/value.
Cuplikan Konfigurasi Kunci
Profil perangkat (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]
Konfigurasi TOML device-modbus (cuplikan)
[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"
Hasil
Alur akhir ke akhir menunjukkan data suhu dan kelembaban waktu nyata yang tiba di IBM Cloud, memicu perubahan status LED berdasarkan aturan, dan menunjukkan kemampuan penuh EdgeX pada Raspberry Pi dengan biaya rendah.
Kesimpulan
EdgeX Foundry memungkinkan penerapan cepat solusi IIoT berbasis Modbus dengan overhead pengembangan minimal. Dengan mengabstraksi manajemen perangkat, penyimpanan data, dan konektivitas cloud, ini membebaskan insinyur untuk fokus pada logika domain dan analitik.
Singkatan
| Singkatan | Pengembangan |
| 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 |