Get Consultation Now!

Edit Template
< Tất cả
Print

Tổng quan về Rule Engine trong ESG IoT

Tổng quan về Công cụ Quy tắc (Rule Engine) ESG IoT

Công cụ Quy tắc ESG IoT là một hệ thống có khả năng tùy chỉnh và cấu hình cao để xử lý các sự kiện phức tạp. Với công cụ quy tắc, bạn có thể lọc, làm giàu và chuyển đổi các thông điệp đến từ các thiết bị IoT và các tài sản liên quan. Bạn cũng có thể kích hoạt các hành động khác nhau, ví dụ như thông báo hoặc giao tiếp với các hệ thống bên ngoài.

Các khái niệm chính

Thông điệp Công cụ Quy tắc

Thông điệp Công cụ Quy tắc là một cấu trúc dữ liệu bất biến, có thể tuần tự hóa, đại diện cho các thông điệp khác nhau trong hệ thống. Ví dụ:

  • Telemetry đến, cập nhật thuộc tính hoặc lệnh gọi RPC từ thiết bị;
  • Sự kiện vòng đời thực thể: tạo, cập nhật, xóa, gán, hủy gán, cập nhật thuộc tính;
  • Sự kiện trạng thái thiết bị: kết nối, ngắt kết nối, hoạt động, không hoạt động, v.v.;
  • Các sự kiện hệ thống khác.

Thông điệp Công cụ Quy tắc chứa các thông tin sau:

  • ID Thông điệp: Định danh duy nhất dựa trên thời gian;
  • Nguồn gốc thông điệp: Định danh của Thiết bị, Tài sản hoặc Thực thể khác;
  • Loại thông điệp: “Post telemetry” hoặc “Sự kiện không hoạt động”, v.v.;
  • Nội dung thông điệp: Thân JSON chứa nội dung thực tế của thông điệp;
  • Siêu dữ liệu: Danh sách các cặp khóa-giá trị chứa dữ liệu bổ sung về thông điệp.

Nút Quy tắc

Nút Quy tắc là một thành phần cơ bản của Công cụ Quy tắc, xử lý từng thông điệp đến tại một thời điểm và tạo ra một hoặc nhiều thông điệp đi. Nút Quy tắc là đơn vị logic chính của Công cụ Quy tắc. Nút Quy tắc có thể lọc, làm giàu, chuyển đổi thông điệp đến, thực hiện hành động hoặc giao tiếp với các hệ thống bên ngoài.

Kết nối Nút Quy tắc

Các Nút Quy tắc có thể được kết nối với các nút quy tắc khác. Mỗi kết nối có một loại quan hệ, là nhãn dùng để xác định ý nghĩa logic của kết nối. Khi nút quy tắc tạo ra thông điệp đi, nó luôn chỉ định loại quan hệ được sử dụng để định tuyến thông điệp đến các nút tiếp theo.

Các loại quan hệ nút quy tắc phổ biến là “Thành công” và “Thất bại”. Các nút quy tắc biểu thị các hoạt động logic có thể sử dụng “Đúng” hoặc “Sai”. Một số nút quy tắc đặc biệt có thể sử dụng các loại quan hệ hoàn toàn khác, ví dụ: “Post Telemetry”, “Cập nhật Thuộc tính”, “Tạo Thực thể”, v.v.

Một số nút quy tắc hỗ trợ tên kết nối tùy chỉnh. Chỉ cần nhập tên kết nối tùy chỉnh và nhấp vào liên kết “Tạo mới!”.

Lưu ý: Tất cả tên kết nối đều phân biệt chữ hoa chữ thường.

Chuỗi Quy tắc

Chuỗi Quy tắc là một nhóm logic của các nút quy tắc và các quan hệ của chúng. Ví dụ, chuỗi quy tắc dưới đây sẽ:

  • Lưu tất cả thông điệp telemetry vào cơ sở dữ liệu;
  • Kích hoạt “Cảnh báo Nhiệt độ Cao” nếu trường nhiệt độ trong thông điệp vượt quá 50 độ;
  • Kích hoạt “Cảnh báo Nhiệt độ Thấp” nếu trường nhiệt độ trong thông điệp dưới -40 độ;
  • Ghi lại lỗi thực thi các kịch bản kiểm tra nhiệt độ vào bảng điều khiển nếu có lỗi logic hoặc cú pháp trong kịch bản.

Quản trị viên tenant có thể xác định một Chuỗi Quy tắc Gốc và tùy chọn thêm nhiều chuỗi quy tắc khác. Chuỗi quy tắc gốc xử lý tất cả các thông điệp đến và có thể chuyển tiếp chúng đến các chuỗi quy tắc khác để xử lý thêm. Các chuỗi quy tắc khác cũng có thể chuyển tiếp thông điệp đến các chuỗi quy tắc khác.

Ví dụ, chuỗi quy tắc dưới đây sẽ:

  • Kích hoạt “Cảnh báo Nhiệt độ Cao” nếu trường nhiệt độ trong thông điệp vượt quá 50 độ;
  • Xóa “Cảnh báo Nhiệt độ Cao” nếu trường nhiệt độ trong thông điệp dưới 50 độ;
  • Chuyển tiếp các sự kiện về “Tạo” và “Xóa” cảnh báo đến chuỗi quy tắc bên ngoài xử lý thông báo cho người dùng tương ứng.

Kết quả Xử lý Thông điệp

Có ba kết quả xử lý thông điệp có thể xảy ra: Thành công, Thất bại và Hết thời gian.

  • Thành công: Khi nút quy tắc cuối cùng trong chuỗi xử lý thành công thông điệp.
  • Thất bại: Nếu một trong các nút quy tắc tạo ra “Thất bại” trong quá trình xử lý thông điệp và không có nút quy tắc nào xử lý thất bại đó.
  • Hết thời gian: Khi thời gian xử lý tổng thể vượt quá ngưỡng cấu hình.

Hàng đợi Công cụ Quy tắc

Xem tài liệu mới.

Chiến lược gửi hàng đợi

Xem tài liệu mới.

Chiến lược xử lý hàng đợi

Xem tài liệu mới.

Hàng đợi mặc định

Xem tài liệu mới.

Các Loại Thông điệp Được Xác định Trước

Danh sách các loại thông điệp được xác định trước được trình bày trong bảng sau:

Loại Thông điệpTên Hiển thịMô tảSiêu dữ liệu Thông điệpNội dung Thông điệp
POST_ATTRIBUTES_REQUESTĐăng thuộc tínhYêu cầu từ thiết bị để đăng các thuộc tính phía máy kháchdeviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồnJSON khóa/giá trị: {“currentState”: “IDLE”}
POST_TELEMETRY_REQUESTĐăng telemetryYêu cầu từ thiết bị để đăng telemetrydeviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồn, ts – dấu thời gian (mili giây)JSON khóa/giá trị: {“temperature”: 22.7}
TO_SERVER_RPC_REQUESTYêu cầu RPC từ Thiết bịYêu cầu RPC từ thiết bịdeviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồn, requestId – ID yêu cầu RPC do máy khách cung cấpJSON chứa phương thức và tham số: {“method”: “getTime”, “params”: {“param1”: “val1”}}
RPC_CALL_FROM_SERVER_TO_DEVICEYêu cầu RPC đến Thiết bịYêu cầu RPC từ máy chủ đến thiết bịrequestUUID – ID yêu cầu nội bộ, expirationTime – thời gian hết hạn yêu cầu, oneway – chỉ định loại yêu cầu: true – không phản hồi, false – có phản hồiJSON chứa phương thức và tham số: {“method”: “getGpioStatus”, “params”: {“param1”: “val1”}}
ACTIVITY_EVENTSự kiện Hoạt độngSự kiện chỉ ra thiết bị trở nên hoạt độngdeviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồnJSON chứa thông tin hoạt động thiết bị
INACTIVITY_EVENTSự kiện Không hoạt độngSự kiện chỉ ra thiết bị trở nên không hoạt độngdeviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồnJSON chứa thông tin hoạt động thiết bị
CONNECT_EVENTSự kiện Kết nốiSự kiện được tạo khi thiết bị được kết nốideviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồnJSON chứa thông tin hoạt động thiết bị
DISCONNECT_EVENTSự kiện Ngắt kết nốiSự kiện được tạo khi thiết bị bị ngắt kết nốideviceName – tên thiết bị nguồn, deviceType – loại thiết bị nguồnJSON chứa thông tin hoạt động thiết bị
ENTITY_CREATEDTạo Thực thểSự kiện được tạo khi một thực thể mới được tạo trong hệ thốnguserName – tên người dùng tạo thực thể, userId – ID người dùngJSON chứa chi tiết thực thể đã tạo
ENTITY_UPDATEDCập nhật Thực thểSự kiện được tạo khi thực thể hiện có được cập nhậtuserName – tên người dùng cập nhật thực thể, userId – ID người dùngJSON chứa chi tiết thực thể đã cập nhật
ENTITY_DELETEDXóa Thực thểSự kiện được tạo khi thực thể hiện có bị xóauserName – tên người dùng xóa thực thể, userId – ID người dùngJSON chứa chi tiết thực thể đã xóa
ENTITY_ASSIGNEDGán Thực thểSự kiện được tạo khi thực thể hiện có được gán cho khách hànguserName – tên người dùng thực hiện thao tác gán, userId – ID người dùng, assignedCustomerName – tên khách hàng được gán, assignedCustomerId – ID khách hàng được gánJSON chứa chi tiết thực thể được gán
ENTITY_UNASSIGNEDHủy gán Thực thểSự kiện được tạo khi thực thể hiện có bị hủy gán khỏi khách hànguserName – tên người dùng thực hiện thao tác hủy gán, userId – ID người dùng, unassignedCustomerName – tên khách hàng bị hủy gán, unassignedCustomerId – ID khách hàng bị hủy gánJSON chứa chi tiết thực thể bị hủy gán
ADDED_TO_ENTITY_GROUPThêm vào NhómSự kiện được tạo khi thực thể được thêm vào Nhóm Thực thể (chỉ áp dụng cho ESG IoT PE)userName – tên người dùng thực hiện thao tác gán, userId – ID người dùng, addedToEntityGroupName – tên nhóm thực thể, addedToEntityGroupId – ID nhóm thực thểJSON rỗng
REMOVED_FROM_ENTITY_GROUPXóa khỏi NhómSự kiện được tạo khi thực thể bị xóa khỏi Nhóm Thực thể (chỉ áp dụng cho ESG IoT PE)userName – tên người dùng thực hiện thao tác hủy gán, userId – ID người dùng, removedFromEntityGroupName – tên nhóm thực thể, removedFromEntityGroupId – ID nhóm thực thểJSON rỗng
ATTRIBUTES_UPDATEDCập nhật Thuộc tínhSự kiện được tạo khi thuộc tính thực thể được cập nhậtuserName – tên người dùng thực hiện cập nhật thuộc tính, userId – ID người dùng, scope – phạm vi thuộc tính được cập nhật (SERVER_SCOPE hoặc SHARED_SCOPE)JSON khóa/giá trị với thuộc tính được cập nhật: {“softwareVersion”: “1.2.3”}
ATTRIBUTES_DELETEDXóa Thuộc tínhSự kiện được tạo khi một số thuộc tính thực thể bị xóauserName – tên người dùng xóa thuộc tính, userId – ID người dùng, scope – phạm vi thuộc tính bị xóa (SERVER_SCOPE hoặc SHARED_SCOPE)JSON với trường attributes chứa danh sách các khóa thuộc tính bị xóa: {“attributes”: [“modelNumber”, “serial”]}
ALARMSự kiện Cảnh báoSự kiện được tạo khi một cảnh báo được tạo, cập nhật hoặc xóaTất cả các trường từ Siêu dữ liệu Thông điệp gốc, isNewAlarm – true nếu cảnh báo mới được tạo, isExistingAlarm – true nếu cảnh báo đã tồn tại, isClearedAlarm – true nếu cảnh báo đã được xóaJSON chứa chi tiết cảnh báo được tạo
ALARM_ASSIGNEDGán Cảnh báoSự kiện được tạo khi một cảnh báo được gán cho một người dùngTất cả các trường từ Siêu dữ liệu Thông điệp gốc, entityName – tên cảnh báo, entityType – ALARM, userEmail – email người dùng, userFirstName – tên đầu người dùng, userId – ID người dùng, userLastName – họ người dùng, userName – tên người dùngJSON chứa chi tiết cảnh báo
ALARM_UNASSIGNEDHủy gán Cảnh báoSự kiện được tạo khi một cảnh báo bị hủy gán khỏi người dùngTất cả các trường từ Siêu dữ liệu Thông điệp gốc, entityName – tên cảnh báo, entityType – ALARM, userEmail – email người dùng, userFirstName – tên đầu người dùng, userId – ID người dùng, userLastName – họ người dùng, userName – tên người dùngJSON chứa chi tiết cảnh báo
COMMENT_CREATEDTạo Bình luậnSự kiện được tạo khi một bình luận cảnh báo được tạoTất cả các trường từ Siêu dữ liệu Thông điệp gốc, userId – ID người dùng, userName – tên người dùng, userFirstName – tên đầu người dùng, userLastName – họ người dùng, userEmail – email người dùng, comment – đối tượng JSON chứa chi tiết bình luận và văn bản bình luậnJSON chứa chi tiết cảnh báo
COMMENT_UPDATEDCập nhật Bình luậnSự kiện được tạo khi một bình luận cảnh báo được cập nhậtTất cả các trường từ Siêu dữ liệu Thông điệp gốc, userId – ID người dùng, userName – tên người dùng, userFirstName – tên đầu người dùng, userLastName – họ người dùng, userEmail – email người dùng, comment – đối tượng JSON chứa chi tiết bình luận và văn bản bình luậnJSON chứa chi tiết cảnh báo
REST_API_REQUESTYêu cầu REST API đến Công cụ Quy tắcSự kiện được tạo khi người dùng thực hiện lệnh gọi REST APIrequestUUID – ID yêu cầu duy nhất, expirationTime – thời gian hết hạn yêu cầuJSON với nội dung yêu cầu

Các Loại Nút Quy tắc

Tất cả các nút quy tắc có sẵn được nhóm lại tương ứng với tính chất của chúng:

  • Nút Lọc: Dùng để lọc và định tuyến thông điệp;
  • Nút Làm giàu: Dùng để cập nhật siêu dữ liệu của thông điệp đến;
  • Nút Chuyển đổi: Dùng để thay đổi các trường thông điệp đến như Nguồn gốc, Loại, Nội dung, Siêu dữ liệu;
  • Nút Hành động: Thực hiện các hành động khác nhau dựa trên thông điệp đến;
  • Nút Bên ngoài: Dùng để tương tác với các hệ thống bên ngoài.

Cấu hình

Mỗi Nút Quy tắc có thể có các tham số cấu hình cụ thể tùy thuộc vào cách triển khai Nút Quy tắc. Ví dụ, nút quy tắc “Lọc – kịch bản” có thể được cấu hình thông qua hàm JS tùy chỉnh để xử lý dữ liệu đến. Cấu hình nút “Bên ngoài – gửi email” cho phép chỉ định các tham số kết nối máy chủ thư.

Cửa sổ cấu hình Nút Quy tắc có thể được mở bằng cách nhấp đúp vào nút trong trình chỉnh sửa Chuỗi Quy tắc.

Kiểm tra chức năng kịch bản

Một số nút quy tắc có tính năng giao diện người dùng đặc biệt cho phép người dùng kiểm tra các hàm TBEL/JS. Khi nhấp vào “Kiểm tra Hàm Lọc”, bạn sẽ thấy Trình chỉnh sửa JS cho phép thay thế các tham số đầu vào và xác minh đầu ra của hàm.

Bạn có thể xác định:

  • Loại Thông điệp trong trường trên cùng bên trái.
  • Nội dung thông điệp trong phần Thông điệp bên trái.
  • Siêu dữ liệu trong phần Siêu dữ liệu bên phải.
  • Kịch bản TBEL/JS thực tế trong phần Lọc.
    Sau khi nhấn Kiểm tra, đầu ra sẽ được trả về trong phần Đầu ra bên phải.

Thống kê Công cụ Quy tắc

Đội ngũ ESG IoT đã chuẩn bị bảng điều khiển “mặc định” cho thống kê Công cụ Quy tắc. Bảng điều khiển này được tự động tải cho mỗi tenant. Bạn có thể truy cập bằng cách điều hướng đến “Sử dụng API” -> “Xem thống kê”.

Việc thu thập thống kê được bật theo mặc định và được kiểm soát qua các thuộc tính cấu hình.

Bạn có thể nhận thấy các thông tin chi tiết về lỗi trong quá trình xử lý và nguyên nhân gây ra chúng trên bảng điều khiển.

Gỡ lỗi

ESG IoT cung cấp khả năng xem xét các thông điệp đến và đi cho mỗi Nút Quy tắc. Để bật gỡ lỗi, người dùng cần đảm bảo rằng hộp kiểm “Chế độ gỡ lỗi” được chọn trong cửa sổ cấu hình chính.

Khi gỡ lỗi được bật, người dùng có thể thấy thông tin về các thông điệp đến và đi cũng như các loại quan hệ tương ứng.

Nhập/Xuất

Bạn có thể xuất chuỗi quy tắc sang định dạng JSON và nhập nó vào cùng hoặc một phiên bản ESG IoT khác.

Để xuất chuỗi quy tắc, bạn nên điều hướng đến trang Chuỗi Quy tắc và nhấp vào nút xuất trên thẻ chuỗi quy tắc cụ thể.

Tương tự, để nhập chuỗi quy tắc, bạn nên điều hướng đến trang Chuỗi Quy tắc và nhấp vào nút “+” lớn ở góc dưới bên phải của màn hình, sau đó nhấp vào nút nhập.

Kiến trúc

Để tìm hiểu thêm về nội bộ của công cụ quy tắc, xem trang kiến trúc.

Lệnh gọi REST API tùy chỉnh đến Công cụ Quy tắc

Tính năng ESG IoT PE
Chỉ Phiên bản Chuyên nghiệp hỗ trợ tính năng Lệnh gọi REST API Công cụ Quy tắc tùy chỉnh.
Sử dụng ESG IoT Cloud hoặc cài đặt phiên bản nền tảng của riêng bạn.

ESG IoT cung cấp API để gửi các lệnh gọi REST API tùy chỉnh đến công cụ quy tắc, xử lý nội dung yêu cầu và trả về kết quả xử lý trong thân phản hồi. Điều này hữu ích cho nhiều trường hợp sử dụng, ví dụ:

  • Mở rộng API REST hiện có của nền tảng với các lệnh gọi API tùy chỉnh;
  • Làm giàu lệnh gọi REST API với các thuộc tính của thiết bị/tài sản/khách hàng và chuyển tiếp đến hệ thống bên ngoài để xử lý phức tạp;
  • Cung cấp API tùy chỉnh cho các tiện ích tùy chỉnh của bạn.

Để thực hiện lệnh gọi REST API, bạn có thể sử dụng API REST của rule-engine-controller.

Lưu ý: ID thực thể bạn chỉ định trong lệnh gọi sẽ là nguồn gốc của thông điệp Công cụ Quy tắc. Nếu bạn không chỉ định tham số ID thực thể, thực thể người dùng của bạn sẽ trở thành nguồn gốc của thông điệp.

Hướng dẫn

Các tác giả ESG IoT đã chuẩn bị một số hướng dẫn để giúp bạn bắt đầu thiết kế chuỗi quy tắc theo ví dụ:

  • Chuyển đổi thông điệp đến từ thiết bị;
  • Chuyển đổi thông điệp đến bằng cách sử dụng các thông điệp trước đó từ thiết bị;
  • Tạo và xóa cảnh báo trên các thông điệp thiết bị đến;
  • Gửi email đến khách hàng khi có cảnh báo thiết bị;
  • Gửi thông điệp giữa các thiết bị liên quan.

Xem thêm các hướng dẫn tại đây.

Khắc phục sự cố

Nếu bạn đang sử dụng hàng đợi Kafka để xử lý thông điệp, ESG IoT cung cấp khả năng giám sát liệu tốc độ đẩy thông điệp vào Kafka có nhanh hơn tốc độ tiêu thụ và xử lý chúng hay không (trong trường hợp này, bạn sẽ có độ trễ ngày càng tăng cho việc xử lý thông điệp). Để bật chức năng này, bạn cần đảm bảo rằng thống kê người tiêu dùng Kafka được bật (xem phần queue.kafka.consumer-stats của Thuộc tính cấu hình).

Khi thống kê người tiêu dùng Kafka được bật, bạn sẽ thấy các nhật ký về độ trễ offset cho các nhóm người tiêu dùng (có nhật ký nhóm người tiêu dùng cho tb-core, tb-rule-engine và tất cả các dịch vụ vận chuyển).

Dưới đây là một ví dụ về thông điệp nhật ký:

2021-03-19 15:01:59,794 [kafka-consumer-stats-11-thread-1] INFO  o.t.s.q.k.TbKafkaConsumerStatsService - [re-Main-consumer] Topic partitions with lag: [[topic=[tb_rule_engine.main.0], partition=[0], committedOffset=[5413], endOffset=[5418], lag=[5]]].

Từ thông điệp này, chúng ta có thể thấy có 5 (5418 – 5413 = 5) thông điệp được đẩy vào hàng đợi Chính (chủ đề Kafka tb_rule_engine.main.0) nhưng chưa được xử lý.

Cấu trúc chung của nhật ký như sau:

TIME [STATS_PRINTING_THREAD_NAME] INFO  o.t.s.q.k.TbKafkaConsumerStatsService - [CONSUMER_GROUP_NAME] Topic partitions with lag: [[topic=[KAFKA_TOPIC], partition=[KAFKA_TOPIC_PARTITION], committedOffset=[LAST_PROCESSED_MESSAGE_OFFSET], endOffset=[LAST_QUEUED_MESSAGE_OFFSET], lag=[LAG]],[topic=[ANOTHER_TOPIC], partition=[], committedOffset=[], endOffset=[], lag=[]],...].

Trong đó:

  • CONSUMER_GROUP_NAME: Tên của nhóm người tiêu dùng đang xử lý thông điệp (có thể là bất kỳ hàng đợi công cụ quy tắc, hàng đợi lõi, v.v.);
  • KAFKA_TOPIC: Tên của chủ đề Kafka chính xác;
  • KAFKA_TOPIC_PARTITION: Số phân vùng của chủ đề;
  • LAST_PROCESSED_MESSAGE_OFFSET: Số thứ tự của thông điệp cuối cùng được xử lý bởi người tiêu dùng (thông điệp được xác nhận cuối cùng trong Công cụ Quy tắc, v.v.);
  • LAST_QUEUED_MESSAGE_OFFSET: Số thứ tự của thông điệp cuối cùng được đẩy thành công vào chủ đề Kafka;
  • LAG: Số lượng thông điệp chưa được xử lý.

Lưu ý: Nhật ký về độ trễ của người tiêu dùng chỉ được in nếu có độ trễ cho nhóm người tiêu dùng này.

Tóm tắt

Transform Your Business Today

Stay ahead of the curve! Subscribe for the latest updates, exclusive offers, and industry insights delivered straight to your inbox.
You have been successfully Subscribed! Ops! Something went wrong, please try again.
Stay ahead of the curve! Subscribe for the latest updates, exclusive.

Quick Links

Home

Features

Pricing

About Us

Blog

Contact Us

Solutions

Consulting Services

Financial Planning

Digital Transformation

Marketing Strategy

Project Management

HR Solutions

Resources

Financial Management

Human Resources

Project Management

Legal Resources

Marketing Tools

Business Analytics

Legal

Privacy Policy

Terms of Service

Cookie Policy

GDPR Compliance

Accessibility Statement

© 2024 ESG IoT Việt Nam