Phát hiện Jam

Xem nguồn trên GitHub

Để cung cấp cơ chế có thể định cấu hình để phát hiện nhiễu tín hiệu trên bất kỳ nút OpenThread nào, hãy bật tính năng Phát hiện Jam.

Tính năng này hữu ích cho các giấy chứng nhận về thiết bị yêu cầu khả năng phát hiện tín hiệu gây nhiễu trên một kênh cụ thể. Bạn có thể định cấu hình khóa này để đáp ứng các yêu cầu của từng loại chứng chỉ.

Cách hoạt động

Tính năng Phát hiện Jam theo dõi RSSI (chỉ báo cường độ tín hiệu nhận được) của một nút trong khoảng thời gian được chỉ định để xác định xem kênh có bị kẹt hay không.

Khi bật tính năng Phát hiện Jam:

  1. Trạng thái phát hiện Jam được đặt thành false.
  2. Nút này lấy mẫu RSSI nhiều lần trong mỗi khoảng thời gian một giây.
  3. Nếu RSSI trong toàn bộ khoảng thời gian một giây đó vẫn ở trên Ngưỡng RSSI đã định cấu hình cho mọi mẫu, thì khoảng thời gian một giây đó sẽ bị coi là gây kẹt.
  4. Nếu tổng số khoảng thời gian bị kẹt của một giây là hơn hoặc bằng số lượng tổng hợp của Khoảng thời gian bận rộn đã định cấu hình trong khoảng thời gian Thời lượng phát hiện được định cấu hình trước đó, trạng thái phát hiện Jam tại thời điểm đó sẽ được đặt thành true.
  5. Nếu tổng số khoảng thời gian bị kẹt một giây ít hơn số lượng đã tổng hợp của Thời gian bận rộn được định cấu hình trong Thời gian phát hiện được định cấu hình trước đó vào bất kỳ thời điểm nào, Trạng thái phát hiện Jam tại thời điểm đó được đặt thành false.

Bitmap lịch sử

Trong API OpenThreadwpantund, một sơ đồ bit của 63 giây trước đó sẽ có sẵn để truy xuất. bitmap này cho biết RSSI có vượt qua Ngưỡng RSSI đã định cấu hình ở mỗi 63 giây trước đó hay không.

Ví dụ: bạn có thể truy xuất bitmap sau đây:

0xC248068C416E7FF0

Việc chuyển đổi sang tệp nhị phân sẽ tạo ra mọi bản sao RSSI vượt quá Ngưỡng RSSI đã định cấu hình trong 63 giây trước đó:

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000

Nếu Cửa sổ phát hiện được đặt thành 16 giây và Khoảng thời gian bận được đặt thành 8 giây, Trạng thái phát hiện Jam trở thành true ở 51 giây, thì đó là trường hợp đầu tiên trong đó Ngưỡng RSSI đã vượt quá ít nhất 8 giây trong 16 giây trước đó. Trong ví dụ này, Trạng thái phát hiện Jam vẫn là true trong 13 giây tiếp theo.

11000010 01001000 00000110 10001100 01000001 01101110 01111111 11110000
                                      [00001 01101110 011] = 8 in 16

bitmap này có thể được biểu thị bằng biểu đồ sau, nếu -45 dBm là Ngưỡng RSSI đã định cấu hình:

Phát hiện Jam OT

Cách bật

Tính năng này bị tắt theo mặc định.

Theo định nghĩa

Để bật tính năng Phát hiện Jam, hãy xác định OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE1 trong tệp openthread/src/core/config/openthread-core-default-config.h trước khi tạo OpenThread:

#ifndef OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
#endif

Theo tùy chọn

Ngoài ra, hãy sử dụng tuỳ chọn bản dựng -DOT_JAM_DETECTION=ON khi xây dựng OpenThread:

./script/build -DOT_JAM_DETECTION=ON

Các tham số

Bạn chỉ có thể định cấu hình các tham số Phát hiện Jam thông qua API OpenThread, giao thức Spinel hoặc wpanctl, công cụ dòng lệnh wpantund để quản lý Network-Co-Processor (NCP). Giá trị mặc định sẽ được áp dụng nếu tính năng được bật mà không có cấu hình tiếp theo.

Hãy tùy chỉnh tính năng này bằng các thông số sau:

Các tham số
Ngưỡng RSSI
Giá trị mặc định
0 dBm
Mô tả
Chỉ định ngưỡng RSSI theo ngưỡng ở trên để xem xét kênh bị kẹt.
Thời lượng phát hiện
Giá trị mặc định
63 giây
Mô tả
Chỉ định thời lượng tính bằng giây để kiểm tra kẹt tín hiệu. Phạm vi: 1 – 63.
Thời gian bận rộn
Giá trị mặc định
63 giây
Mô tả
Chỉ định số giây tổng hợp trong Thời lượng phát hiện, trong đó RSSI phải cao hơn Ngưỡng RSSI để kích hoạt tính năng Phát hiện Jam. Phải nhỏ hơn Thời lượng phát hiện. Phạm vi: 1 – 63.

API

OpenThread

Sử dụng JamDetect API để quản lý tính năng Phát hiện Jam trực tiếp trong ứng dụng OpenThread. API OpenThread cung cấp chức năng sau:

  • Bắt đầu và dừng tính năng
  • Xem trạng thái phát hiện Jam
  • Quản lý tất cả thông số
  • Truy xuất bitmap lịch sử Phát hiện Jam hiện tại
  • Đăng ký hàm callback khi phát hiện một Jam

Vòng xoay

Giao thức Spinel cho phép thiết bị lưu trữ giao tiếp trực tiếp với NCP. Giao thức này hiển thị các thuộc tính Phát hiện Jam trong openthread/src/lib/spinel/spinel.h cung cấp chức năng sau:

  • Bắt đầu và dừng tính năng
  • Xem trạng thái phát hiện Jam
  • Quản lý tất cả thông số
  • Truy xuất bitmap lịch sử Phát hiện Jam hiện tại

Giao diện dòng lệnh (CLI)

OpenThread

Không có lệnh OpenThread CLI nào liên quan đến tính năng này.

wpantund

Sử dụng CLI wpanctl để quản lý tính năng Phát hiện Jam cho cấu hình OpenCP NCP. wpantund giữ lại tất cả cấu hình Phát hiện Jam khi đặt lại NCP.

wpanctl cung cấp quyền truy cập vào các thuộc tính wpantund sau:

Thuộc tính
JamDetection:Status
Định dạng
boolean
Mô tả
Chỉ có thể đọc. Trạng thái phát hiện Jam. Cho biết liệu hệ thống có phát hiện thấy tình trạng kẹt tín hiệu hay không.
JamDetection:Enable
Định dạng
boolean
Mô tả
Bật hoặc tắt tính năng Phát hiện Jam.
JamDetection:RssiThreshold
Định dạng
dBm
Mô tả
Chỉ định ngưỡng RSSI theo ngưỡng ở trên để xem xét kênh bị chặn.
JamDetection:Window
Định dạng
giây
Mô tả
Chỉ định thời lượng tính bằng giây để kiểm tra kẹt tín hiệu. Phạm vi: 1 – 63.
JamDetection:BusyPeriod
Định dạng
giây
Mô tả
Chỉ định số giây tổng hợp trong JamDetection:Window, trong đó RSSI phải cao hơn JamDetection:RssiThreshold để kích hoạt tính năng Phát hiện Jam. Phải nhỏ hơn JamDetection:Window. Phạm vi: 1 – 63.
JamDetection:Debug:HistoryBitmap
Định dạng
Giá trị 64 bit
Mô tả
Cung cấp thông tin về nhật ký Trạng thái phát hiện Jam để phục vụ cho mục đích giám sát và gỡ lỗi.

Ví dụ: để nhận Trạng thái phát hiện Jam cho NCP:

sudo wpanctl getprop JamDetection:Status
JamDetection:Status = false

Cách đặt ngưỡng RSSI phát hiện Jam thành -45 dBm trên NCP:

sudo wpanctl setprop JamDetection:RssiThreshold -45
sudo wpanctl getprop JamDetection:RssiThreshold
JamDetection:RssiThreshold = -45

Để biết thêm thông tin về các thuộc tính wpantund, hãy xem kho lưu trữ GitHub wpantund.