MQTT

Adapter với giao thức MQTT cho phép kết nối với broker MQTT bên ngoài hoặc của Innoway, subscribe và nhận bản tin từ các broker đó và đưa vào luồng xử lí của thingnghiệp vụ gắn vào adapter. Từ đó khách hàng có thể trực tiếp sử dụng nền tảng Innoway mà không cần cập nhật firmware thiết bị. Các bản tin gửi lên broker hiện tại sẽ được đóng gói dưới dạng string theo kiểu dữ liệu người dùng chọn (json/hex/text) và chuyển tiếp và được xử lí trên nền tảng Innoway.

Bắt đầu sử dụng

1.1. Điền thông tin broker

  • Từ trang dự án -> Chọn Đám mây -> Adapter -> Click "+" để tạo adapter.

  • Ngoài các trường tên, giao thức, định dạng bản tin tương tự như adapter TCP, UDP, adapter MQTT còn có các trường như địa chỉ broker, tài khoản, mật khẩu và topic.

Nếu muốn kết nối tới MQTT broker của Innoway thì cần mật khẩu là Token của người dùng. Để lấy Device Token, chọn email trên cùng góc phải, chọn Copy token thiết bị.

MQTT Broker có thể giới hạn topic mà người dùng có thể subscribe, ví dụ như broker của Innoway không cho phép người dùng subscribe wildcard với topic với định dạng messages/{subtopic}.

1.2. Tạo thing

  • Chuyển sang tab Thing trong màn tạo adapter, có thể chọn thing có sẵn hoặc tạo thing mới.

  • Điền tên Thing, chọn Base template (nếu có), nhấn ✓ để hoàn tạo thing.

  • Chọn thing vừa tạo để gắn vào adapter.

1.3. Tạo service

  • Sau khi chọn thing, chuyển sang tab service để tạo hoặc chọn service mới.

  • Đoạn code dưới đây thực hiện tác vụ cơ bản của MQTT Adapter: Lấy thông tin topic bản tin đến và publish bản tin tới một topic khác.

let metadata = JSON.parse(entityInfo) 
let topic = metadata.topic
let msgs =  {
  msg: 'hello ' + topic
}
await Adapter().SendMqttResponse({
  topic: 'adapter/response', 
  message: JSON.stringify(msgs)
}); 
return msg;

Các SDK thực thi các nghiệp vụ liên quan đến thiết bị, thuộc tính, adapter,... có thể tham khảo tại Tài liệu SDK.

  • Nhấn để hoàn tạo service.

  • Chọn service vừa tạo, nhấn để lưu adapter.

1.4. Thử nghiệm với MQTT Explorer

Ví dụ cập nhật thuộc tính của thiết bị thông qua Adapter

Thông qua thực hiện các bước ở phân trên người dung đã tạo được một luồng gửi nhận cơ bản với adapter, để thực hiện cập nhật thuộc tính của một thiết bị bất kì trên Innoway có thể thực hiện theo các bước sau

2.1. Thiết lập topic mqtt

  • Để có thể cập nhật thuộc tính của một thiết bị, yêu cầu phải có device_id(ID của thiết bị muốn cập nhật)

  • Trong ví dụ này, device_id sẽ được chèn vào trong topic để dễ dàng định danh thiết bị dựa trên topic gửi về adapter

Định dạng topic : adapter/device/{device_id}/update

  • Định dạng topic trên chỉ là ví dụ trong hướng dẫn này, trong thực tế topic có thể tùy ý người dùng định nghĩa

Thực hiện thêm/sửa topic tại giao diện sửa adapter

  • Thêm topic mới “adapter/device/+/update” để thực hiện nắng nghe tất cả các topic có dạng là : adapter/device/{device_id hoặc thông tin người dùng tự định nghĩa}/update

  • Click ✓ để lưu lại thay đổi

Để lấy được device_id của thiết bị, truy cập vào mục thiết bị tại quản lý tổ chức

  • ID của thiết bị có dạng một chuỗi 32 kí tự(không tính "-")

  • ví dụ : 75dc47c5-1101-4260-bf2d-521e7c68939a

2.2. Sửa nghiệp vụ

Thực hiện theo các bước sau

  • Click vào tên Thing để xem danh sách nghiệp vụ

  • Click vào biểu tượng cây bút để xem và sửa nghiệp vụ

  • Tại đây đang hiển thị code của nghiệp vụ được tạo từ phần đầu hướng dẫn, thực hiện sửa code để có luồng xử lý data như mong muốn

// Đây là phần code của nghiệp vụ

let metadata = JSON.parse(entityInfo) 
let topic = metadata.topic      // Lấy thông tin topic từ entityInfo

var parts = topic.split("/");   // Tách topic thành các chuỗi nhỏ để dễ dàng xử lý

var deviceId = parts[2]         // Lấy deviceId từ topic, tùy người dùng định nghĩa, 
                                // trong ví dụ này deviceId nằm tại vị trí thứ 3 trong topic
                                // vd : adapter/device/{deviceId}/update

let mqttPayload = JSON.parse(payload); // Lấy thông tin dữ liệu người dùng gửi lên

// Tạo biến chứa các thông tin của thuộc tính muốn thêm mới hoặc cập nhật
// vd : "RSSI" sẽ là tên hiển thị trong danh sách thuộc tính của thiết bị
//      mqttPayload.RSSI sẽ là giá trị của "RSSI"
Update = {
  "RSSI" : mqttPayload.RSSI,   
  "temp": mqttPayload.temp      
}

// logged = false : không lưu lịch sử cập nhật thuộc tính
// logged = true  : lưu lịch sử cập nhật thuộc tính
let logged = false  

// Thực hiện cập nhật thuộc tính thông qua hàm UpsertAttributes
// Tham số cần truyền vào bao gồm deviceId, Update, logged
await Thing(deviceId).UpsertAttributes(Update, {logged: logged});

// Gửi phản về topic 'adapter/response'
await Adapter().SendMqttResponse({
  topic: 'adapter/response', 
  message: JSON.stringify("Update attributes done")
});

// Trả về thông tin thuộc tính cập nhật
return Update;

Thing(id: string).UpsertAttributes(attrs: {[key: string]: any}, {logged: boolean}) là hàm được cung cấp bởi nền tảng Innoway, hàm được sử dụng để cập nhật giá trị của một hoặc nhiều thuộc tính của một thiết bị. Để xem toàn bộ các hàm được hỗ trợ bởi Innoway, vui lòng truy cập https://app.gitbook.com/o/503tfg1ajFL2TCfLn9hI/s/dHTLVKzo80twFgwBzfnj/~/changes/140/tai-lieu/sdk

2.3. Gửi dữ liệu từ mqtt explorer và kiểm tra nghiệp vụ

Sau khi hoàn thành sửa nghiệp, thực hiện đẩy dữ liệu mong muốn từ MQTT lên adapter theo topic như đã thiết lập ở phần 2.1

  • Để kiểm tra lại lịch sử bản tin đã gửi lên adapter, người dùng có thể truy cập vào mục lịch xử bản tin tại giao diện xửa nghiệp vụ

  • Tại đây sẽ hiển thị danh sách các bản tin được nhận vào bởi adapter cùng dữ liệu đầu vào, đầu ra và trạng thái xử lý

  • Nếu trạng thái xử lý là error người dùng có thể click vào kết qủa để xem lỗi cụ thể(nếu có)

  • Cuối cùng truy cập vào giao diện quản lý thuộc tính thiết bị để xem giá trị thuộc tính sau khi cập nhật

Last updated