Cách Phân Tích Dữ Liệu IoT Sử Dụng InfluxDB, Python Và Modbus Cho Ứng Dụng Công Nghiệp


Summary

Bài viết này khám phá cách phân tích dữ liệu IoT sử dụng InfluxDB, Python và Modbus cho ứng dụng công nghiệp, mang đến những giá trị thiết thực cho người đọc trong việc tối ưu hóa quy trình sản xuất. Key Points:

  • Ứng dụng AI và ML trong phân tích dữ liệu IoT giúp phát hiện mô hình ẩn và tối ưu hóa quy trình sản xuất.
  • Bảo mật dữ liệu IoT là yếu tố quan trọng, cần triển khai các giải pháp bảo mật tiên tiến để bảo vệ thông tin nhạy cảm.
  • Sử dụng Edge Computing cho phép xử lý dữ liệu gần nguồn, giảm độ trễ và tiết kiệm băng thông.
Tóm lại, bài viết cung cấp cái nhìn sâu sắc về việc áp dụng công nghệ hiện đại để nâng cao hiệu quả trong lĩnh vực IoT.

Nguồn dữ liệu IoT cho các ứng dụng công nghiệp và thông minh

## Nguồn Dữ Liệu IoT cho Ứng Dụng Công Nghiệp và Thông Minh

Các thiết bị IoT tạo ra dữ liệu theo thời gian thực từ nhiều loại cảm biến khác nhau. Dưới đây là một số **nguồn dữ liệu IoT** chính cùng với các **trường hợp sử dụng** ví dụ, tập trung vào một **hệ thống giám sát kho hàng dựa trên Arduino** với các cảm biến nhiệt độ và độ ẩm.

### 1. Nguồn Dữ Liệu IoT

#### 1.1. Cảm Biến Kho Hàng Công Nghiệp và Thông Minh
- **Cảm Biến Nhiệt Độ & Độ Ẩm** (ví dụ: DHT11, DHT22, BME280) - Giúp theo dõi điều kiện khí hậu trong kho.
- **Cảm Biến CO2 và Chất Lượng Không Khí** (ví dụ: MQ135) - Đảm bảo chất lượng không khí cho nhân viên cũng như điều kiện lưu trữ.

Thiết lập kho hàng IoT với Arduino và cảm biến DHT11


- **Cảm biến ánh sáng (LDR)** - Tự động điều chỉnh ánh sáng trong kho.
- **Cảm biến rung** - Phát hiện chuyển động bất thường của thiết bị hoặc hoạt động địa chấn.
- **RFID và máy quét mã vạch** - Theo dõi sự di chuyển của hàng tồn kho.
- **Cảm biến trọng lượng (Load Cells)** - Giám sát mức độ hàng hóa theo thời gian thực.
- **Cảm biến chuyển động (PIR)** - Phát hiện sự di chuyển trái phép ở những khu vực hạn chế.

---

## Thiết lập kho IoT với Arduino & DHT11 (Nhiệt độ & Độ ẩm)

### Các linh kiện cần thiết
- **Arduino Uno**
- **Cảm biến DHT11/DHT22**
- **Module Wi-Fi ESP8266** (Để gửi dữ liệu đến InfluxDB)
- **InfluxDB + Python để lưu trữ và trực quan hóa dữ liệu**

Để nâng cao phần thiết lập này, có một số yếu tố bạn có thể xem xét: 1. **Chất liệu vỏ**: Nên sử dụng vật liệu chống ẩm để bảo vệ các linh kiện điện tử khỏi môi trường ẩm thấp. 2. **Nguồn cấp điện**: Chọn nguồn năng lượng ổn định, như pin mặt trời hoặc bộ sạc dự phòng sẽ là lựa chọn hợp lý. 3. **Giao thức truyền thông**: Bạn có thể tích hợp thêm giao thức LoRa hoặc Zigbee nhằm cải thiện khả năng truyền tải dữ liệu xa hơn nữa. 4. **Phần mềm điều khiển**: Phát triển một giao diện người dùng thân thiện sẽ giúp việc theo dõi và quản lý dữ liệu trở nên dễ dàng hơn.
Extended Perspectives Comparison:
NgànhNguồn Dữ Liệu IoTTrường Hợp Sử Dụng
Kho Thông MinhNhiệt độ, Độ ẩm, RFID, Cảm biến tảiTheo dõi hàng tồn kho, Giám sát khí hậu
Nông NghiệpĐộ ẩm đất, pH, Cảm biến ánh sángTưới tiêu thông minh, Giám sát sức khỏe cây trồng
Sản XuấtCảm biến rung, Áp suất, Khoảng cáchBảo trì dự đoán, Kiểm tra tình trạng thiết bị
Năng LượngĐồng hồ thông minh, Cảm biến công suấtTiết kiệm năng lượng, Tiêu thụ theo thời gian thực
Chăm Sóc Sức KhỏeNhịp tim, ECG, Cảm biến oxyGiám sát bệnh nhân, Chăm sóc sức khỏe từ xa

Mã Arduino để đọc nhiệt độ và độ ẩm

Mã Arduino dưới đây đọc **nhiệt độ** và **độ ẩm** từ cảm biến **DHT11** và gửi dữ liệu này qua **Wi-Fi (ESP8266)** đến máy chủ InfluxDB.

#include <DHT.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

#define DHTPIN 2 // Cảm biến DHT11 được kết nối với chân D2
#define DHTTYPE DHT11 // Loại cảm biến là DHT11

DHT dht(DHTPIN, DHTTYPE);

// Thông tin đăng nhập Wi-Fi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
const char* server = "http://YOUR_INFLUXDB_SERVER/write?db=iotdb"; // URL của InfluxDB

void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password); // Kết nối với Wi-Fi

while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Đang kết nối với Wi-Fi...");
}

Serial.println("Đã kết nối thành công với Wi-Fi");
}

void loop() {
float temperature = dht.readTemperature(); // Đọc nhiệt độ
float humidity = dht.readHumidity(); // Đọc độ ẩm

if (isnan(temperature) || isnan(humidity)) {
Serial.println("Không thể đọc từ cảm biến DHT!");
return;
}

Serial.print("Nhiệt độ: ");
Serial.print(temperature);
Serial.print(" °C | Độ ẩm: ");
Serial.print(humidity);
Serial.println(" %");

// Gửi dữ liệu đến InfluxDB
if (WiFi.status() == WL_CONNECTED) {
WiFiClient client;
HTTPClient http;
String postData = "temperature_sensor temperature=" + String(temperature) + ",humidity=" + String(humidity);
http.begin(client, server);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");

int httpResponseCode = http.POST(postData);
Serial.print("Phản hồi từ InfluxDB: ");
Serial.println(httpResponseCode);

http.end();
}

delay(5000); // Chờ 5 giây trước khi đọc tiếp theo
}


Nguyên lý hoạt động của cảm biến DHT11 rất đơn giản; nó sử dụng nguyên lý điện trở để đo lường nhiệt độ và độ ẩm trong môi trường xung quanh. Cảm biến này có khả năng làm việc ổn định trong điều kiện môi trường không quá khắc nghiệt.

Trong trường hợp bạn cần một giải pháp chính xác hơn cho các ứng dụng công nghiệp, có thể xem xét việc sử dụng các loại cảm biến khác như SHT31. Những cảm biến này cung cấp độ chính xác cao hơn và đáp ứng tốt hơn trong nhiều tình huống khác nhau.

Mã lập trình này có thể được áp dụng rộng rãi trong các hệ thống giám sát môi trường tại nhà máy hoặc văn phòng, giúp theo dõi tình trạng không khí một cách hiệu quả.

Truy vấn và phân tích dữ liệu IoT bằng Python

Khi dữ liệu đã được gửi đến **InfluxDB**, chúng ta có thể truy xuất và phân tích nó bằng Python. Dưới đây là một đoạn mã mẫu giúp bạn thực hiện điều này:

from influxdb import InfluxDBClient
import pandas as pd
import matplotlib.pyplot as plt

# Kết nối tới InfluxDB
client = InfluxDBClient(host='YOUR_INFLUXDB_SERVER', port=8086, database='iotdb')

# Truy vấn dữ liệu
query = 'SELECT * FROM "temperature_sensor" ORDER BY time DESC LIMIT 100'
result = client.query(query)
data = list(result.get_points())

# Chuyển đổi sang DataFrame của Pandas
df = pd.DataFrame(data)
df['time'] = pd.to_datetime(df['time'])

# Vẽ biểu đồ dữ liệu
plt.figure(figsize=(10, 5))
plt.plot(df['time'], df['temperature'], label="Nhiệt độ (°C)", marker='o')
plt.plot(df['time'], df['humidity'], label="Độ ẩm (%)", marker='s')
plt.xlabel('Thời gian')
plt.ylabel('Giá trị')
plt.title('Nhiệt độ & Độ ẩm trong kho')
plt.legend()
plt.xticks(rotation=45)
plt.grid()
plt.show()


Trong đoạn mã trên, đầu tiên bạn cần kết nối với máy chủ **InfluxDB** của mình bằng cách sử dụng thư viện `influxdb-python`. Sau đó, thực hiện một truy vấn để lấy dữ liệu từ cảm biến nhiệt độ. Dữ liệu được chuyển đổi thành DataFrame thông qua thư viện `Pandas`, giúp cho việc xử lý và phân tích trở nên dễ dàng hơn.

Cuối cùng, chúng ta sử dụng `matplotlib` để vẽ biểu đồ hiển thị sự thay đổi của nhiệt độ và độ ẩm theo thời gian. Hãy nhớ rằng việc tối ưu hóa các truy vấn trong InfluxDB cũng rất quan trọng để cải thiện hiệu suất khi thu thập dữ liệu.

Điều này sẽ giúp bạn trực quan hóa và phân tích tốt hơn về môi trường làm việc hoặc kho chứa của mình.


Truy vấn và phân tích dữ liệu IoT bằng Python Free Images


Các trường hợp sử dụng thực tế của dữ liệu IoT

## 5. Các trường hợp sử dụng thực tế của dữ liệu IoT

**Ngành** | **Nguồn dữ liệu IoT** | **Trường hợp sử dụng**
---|---|---
**Kho thông minh** | Nhiệt độ, Độ ẩm, RFID, Cảm biến tải | Theo dõi hàng tồn kho, Giám sát khí hậu
**Nông nghiệp** | Độ ẩm đất, pH, Cảm biến ánh sáng | Tưới tiêu thông minh, Giám sát sức khỏe cây trồng
**Sản xuất** | Cảm biến rung, Áp suất, Khoảng cách | Bảo trì dự đoán, Kiểm tra tình trạng thiết bị
**Năng lượng** | Đồng hồ thông minh, Cảm biến công suất | Tiết kiệm năng lượng, Tiêu thụ theo thời gian thực
**Chăm sóc sức khỏe** | Nhịp tim, ECG, Cảm biến oxy | Giám sát bệnh nhân, Chăm sóc sức khỏe từ xa
**Giao thông vận tải** | GPS, Cảm biến nhiên liệu, Áp suất lốp | Theo dõi đội xe, Tối ưu hóa nhiên liệu

## Kết luận

Dữ liệu IoT đến từ nhiều loại cảm biến được sử dụng trong các lĩnh vực như kho bãi thông minh, công nghiệp hiện đại và y tế. Ví dụ điển hình là việc sử dụng Arduino với cảm biến DHT11 để giám sát nhiệt độ và độ ẩm trong các nhà kho. Hệ thống ESP8266 có khả năng gửi dữ liệu tới InfluxDB để lưu trữ và sau đó dùng Python để xử lý cũng như trực quan hóa dữ liệu này một cách hiệu quả hơn. Những ứng dụng cụ thể này cho thấy rõ giá trị thực tiễn mà dữ liệu IoT mang lại cho các ngành nghề khác nhau.

Cài đặt công cụ cần thiết cho phân tích dữ liệu IoT

Phương pháp này có thể được mở rộng với **phân tích dự đoán dựa trên AI** để phát hiện **anomalies**. 🚀 ## Phân Tích Dữ Liệu IoT Sử Dụng InfluxDB, Python và Modbus ## Tổng Quan Các thiết bị IoT (Internet of Things) tạo ra một lượng lớn dữ liệu chuỗi thời gian. InfluxDB là lựa chọn tuyệt vời để lưu trữ và phân tích dữ liệu chuỗi thời gian, trong khi Python cung cấp một hệ sinh thái mạnh mẽ cho việc lấy và xử lý dữ liệu. Hơn nữa, **Modbus** là một giao thức truyền thông thường được sử dụng trong tự động hóa công nghiệp. Hướng dẫn này giải thích: - **Thu thập dữ liệu IoT bằng Modbus (cho các cảm biến công nghiệp)** - **Lưu trữ dữ liệu vào InfluxDB** - **Truy vấn và phân tích dữ liệu bằng Python** - **Hình dung kết quả** --- ## Bước 1: Cài Đặt Công Cụ Cần Thiết Đảm bảo bạn đã cài đặt những công cụ sau: - **InfluxDB** (để lưu trữ dữ liệu chuỗi thời gian) - **Python** (để lập trình và phân tích dữ liệu) - **Thư viện Modbus** (để đọc dữ liệu cảm biến) Cài đặt các thư viện cần thiết:
pip install influxdb pymodbus pandas matplotlib 
--- ## Bước 2: Thiết Lập InfluxDB ## 1. Cài Đặt InfluxDB Tải xuống và cài đặt InfluxDB từ [https://portal.influxdata.com/downloads/]. Đối với Docker:
docker run -p 8086:8086 -v influxdb:/var/lib/influxdb -e INFLUXDB_DB=iotdb influxdb 

Thiết lập InfluxDB để lưu trữ dữ liệu thời gian thực

## Bước 2: Tạo một Cơ sở Dữ liệu

Bắt đầu shell InfluxDB:
influx


Tạo một cơ sở dữ liệu:
CREATE DATABASE iotdb;


---

## Bước 3: Thu thập Dữ liệu từ Cảm biến IoT Sử dụng Modbus

### 1. Đọc Dữ liệu Cảm biến bằng Python (Modbus TCP)

Các cảm biến IoT hỗ trợ Modbus (như cảm biến nhiệt độ, độ ẩm hoặc áp suất) có thể được đọc thông qua **pymodbus**.

### Script Python để Đọc Dữ liệu Modbus
from pymodbus.client.sync import ModbusTcpClient

# Kết nối đến thiết bị Modbus (thay thế IP & cổng)
client = ModbusTcpClient('192.168.1.100', port=502)

# Đọc thanh ghi giữ lại (giả sử dữ liệu cảm biến ở thanh ghi 100)
result = client.read_holding_registers(100, 1)
temperature = result.registers[0] # Đọc thanh ghi đầu tiên

print(f"Nhiệt độ: {temperature} °C")
client.close()

Hãy điều chỉnh **địa chỉ IP** và **địa chỉ thanh ghi** dựa trên cảm biến của bạn.

---

## Bước 4: Lưu Trữ Dữ Liệu vào InfluxDB

Sau khi chúng ta thu thập dữ liệu từ thiết bị Modbus, bước tiếp theo là lưu trữ nó vào InfluxDB. Việc này không chỉ giúp quản lý và tổ chức dữ liệu hiệu quả mà còn cho phép truy vấn nhanh chóng những thông tin cần thiết trong tương lai.

InfluxDB rất thích hợp cho việc xử lý dữ liệu thời gian thực nhờ khả năng lưu trữ và truy vấn hiệu suất cao. Bạn nên chú ý đến việc tối ưu hóa cấu hình bộ nhớ, chỉ số và retention policy để đảm bảo rằng ứng dụng công nghiệp của bạn hoạt động mượt mà hơn.

Ngoài ra, nếu bạn đang làm việc với khối lượng lớn dữ liệu từ nhiều cảm biến khác nhau, hãy cân nhắc sử dụng SSD để cải thiện tốc độ ghi và truy xuất dữ liệu nhanh hơn. Cuối cùng, việc mô hình hóa dữ liệu cũng rất quan trọng; hãy thiết kế schema phù hợp với loại thông tin IoT mà bạn dự định theo dõi để tối ưu hóa quy trình phân tích sau này.

Thu thập dữ liệu từ cảm biến IoT qua Modbus


Để ghi dữ liệu vào InfluxDB, trước tiên chúng ta cần thiết lập kết nối với cơ sở dữ liệu này. Dưới đây là một đoạn mã Python minh họa cách thực hiện việc này:

from influxdb import InfluxDBClient
import time

# Kết nối tới InfluxDB
influx_client = InfluxDBClient(host='localhost', port=8086, database='iotdb')

# Dữ liệu cảm biến ví dụ (thay thế bằng đọc từ Modbus)
temperature = 25.4

# Định dạng dữ liệu cho InfluxDB
json_body = [
{
"measurement": "temperature_sensor",
"tags": {
"location": "factory1"
},
"fields": {
"temperature": temperature
}
}
]

# Ghi dữ liệu vào InfluxDB
influx_client.write_points(json_body)
print("Dữ liệu đã được ghi vào InfluxDB.")


Sau khi dữ liệu đã được lưu trữ trong **InfluxDB**, chúng ta có thể truy xuất và phân tích nó bằng cách sử dụng **Python**.
Thu thập dữ liệu từ cảm biến IoT qua Modbus

Lưu trữ dữ liệu vào InfluxDB sau khi thu thập từ Modbus

Để truy vấn dữ liệu từ InfluxDB, chúng ta có thể sử dụng đoạn mã sau đây để lấy thông tin nhiệt độ. Đoạn mã này sẽ thực hiện một truy vấn để lấy 10 bản ghi nhiệt độ mới nhất từ bảng "temperature_sensor" và hiển thị chúng ra màn hình:

query = 'SELECT * FROM "temperature_sensor" ORDER BY time DESC LIMIT 10'
result = influx_client.query(query)

# Hiển thị dữ liệu
for point in result.get_points():
print(f"Thời gian: {point['time']}, Nhiệt độ: {point['temperature']} °C")


---

## Bước 6: Hình dung Dữ liệu Sử dụng Matplotlib

Chúng ta có thể trực quan hóa dữ liệu cảm biến để nhận diện các xu hướng. Bạn có thể làm theo đoạn mã sau:

import pandas as pd
import matplotlib.pyplot as plt

# Truy vấn dữ liệu
query = 'SELECT * FROM "temperature_sensor" ORDER BY time DESC LIMIT 100'
result = influx_client.query(query)

# Chuyển đổi thành DataFrame của Pandas
data = list(result.get_points())
df = pd.DataFrame(data)

# Chuyển đổi cột thời gian thành kiểu datetime
df['time'] = pd.to_datetime(df['time'])

# Vẽ đồ thị
plt.figure(figsize=(10, 5))
plt.plot(df['time'], df['temperature'], marker='o', linestyle='-')
plt.xlabel('Thời gian')
plt.ylabel('Nhiệt độ (°C)')
plt.title('Dữ liệu Nhiệt độ Cảm biến IoT')
plt.xticks(rotation=45)
plt.grid()
plt.show()


---

## Kết luận

- **Modbus** được sử dụng để đọc dữ liệu cảm biến từ các thiết bị IoT.

Truy vấn và trực quan hóa dữ liệu IoT đã lưu trữ

InfluxDB là một cơ sở dữ liệu rất hiệu quả trong việc lưu trữ dữ liệu theo thời gian. Python có thể được sử dụng để truy xuất, xử lý và trực quan hóa những dữ liệu này. Hệ thống này hoàn toàn có khả năng mở rộng cho việc giám sát theo thời gian thực, gửi cảnh báo và thậm chí xây dựng các mô hình học máy nhằm phân tích dự đoán. Việc tối ưu hóa cấu hình của InfluxDB cũng sẽ giúp cải thiện hiệu suất khi xử lý lượng lớn dữ liệu nhanh chóng. Sử dụng các thư viện Python như Pandas và Matplotlib cũng sẽ hỗ trợ tốt hơn trong việc phân tích và trình bày dữ liệu một cách rõ ràng hơn.

Reference Articles

Litmus Edge Nền Tảng Dữ Liệu IoT - Avenue

Xử lý và phân tích dữ liệu được chuẩn hóa của bạn ngay tại biên trước khi gửi nó lên đám mây. Sử dụng các quy trình phân tích được xây dựng sẵn hoặc tự xây dựng ...

Source: avenue-net.com

Nhà Sách Tin Học

Những gì bạn sẽ học được:✓ Thiết kế các microservice có khả năng mở rộng bằng cách sử dụng các Python framework như FastAPI và Flask.✓ Xây dựng các RESTful API ...

Thông báo Đồ án tốt nghiệp AT9_ Lần 1

- Phân tích kiến trúc file và hệ điều hành iOS.
. - Thu thập và phân tích dữ liệu trên iOS device.
. - Phân tích GPS.
. - Phân ...

Source: YUMPU

Hướng dẫn download tài liệu

Thông qua Blog này mình muốn chia sẻ đến các bạn những kiến thức về tin học, các tài liệu hay giáo trình mà mình có hoặc siêu tầm được... Mình ...

Thông-báo-Đồ-án-tốt-nghiệp-AT9_-Lần-1

- Quản trị và giám sát Log tập trung. - Thử nghiệm một số kịch bản tấn công hệ thống và đánh giá khả năng bảo vệ. - Đọc dịch tài liệu tiếng Anh. - Kiến thức về ...

Source: pdfcoffee.com

Frank Fitzek

Expert

Related Discussions