TCP

Cho phép truyền dữ liệu từ các thiết bị sử dụng giao thức truyền tải TCP sang nền tảng Innoway luồng xử lí của Things và Service gắn vào adapter. Sau adapter tạo thành công sẽ được sẽ được cấp một địa chỉ host và port để người dùng cấu hình thiết bị gửi bản tin lên adapter. Các bản tin gửi lên adapter 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). Bản tin sau khi được adapter đóng gói sẽ đưa và hàm xử lí service đã gắn vào adapter do người dùng tự định nghĩa.

Bắt đầu sử dụng

1.1. Tạo adapter

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

  • Nhập trường tên, định dạng bản tin, chọn giao thức TCP.

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.

1.3.1. Mô tả nghiệp vụ

Ta sẽ viết nghiệp vụ giải mã bản tin sau: “7e123456696e6e6f7761797e”.

Trong đó:

  • 7e là header và footer của bản tin.

  • 123456: imei của thiết bị.

  • 6e6e6f776179: Mã hex của cụm từ innoway.

Chúng ta sẽ bắn bản tin này lên theo địa chỉ và port của adapter. Sau đó sẽ kiểm tra thiết bị với device_key là TEST-123456 có tồn tại hay không. Nếu không thì chúng ta sẽ tạo mới một thiết bị với device_key là TEST-{imei}. Khi đã có thiết bị rồi thì sẽ tiến hành lưu attribute với key là “name” và value sẽ là “innoway”. Sau khi thực hiện xong các tác vụ thì sẽ gửi phản hồi bản tin "ok".

Code example

var d = payload.slice(2, payload.length - 2);
console.log(d);
var imei = d.substr(0, 6);
var name = hex_to_ascii(d.slice(6, d.length));
let msgs = {
    imei: `${imei}`,
    name: `${name}`,
}
console.log(msgs);
let dataReturn = await upsertNameDevice(msgs);
await Adapter().SendTCPResponse({
  message:"6F6B"
})
return dataReturn;

// function
async function upsertNameDevice(msgs) {
    let device_key = `TEST-${msgs.imei}`;
    let dataDeviceInfo = await key_device_info(device_key);
    if (dataDeviceInfo.id == null) {
        dataDeviceInfo = await create_method("TEST-DEVICE", device_key, "", "", "","");
    }
    await Thing(dataDeviceInfo.id).UpsertAttributes({ name: msgs.name }, false);
    msgs.entity_id = dataDeviceInfo.id;
    return msgs;
}

// function
function hex_to_ascii(str1) {
    var hex = str1.toString();
    var str = '';
    for (var n = 0; n < hex.length; n += 2) {
        if (hex.substr(n, 2) == "00") {
            continue;
        }
        str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
    }
    return str;
}

// create device
async function create_method(device_name, device_key, device_organization, device_template, device_group, device_attributes) {
    let createDevice = await Device().CreateDevice({ name: device_name, key: device_key, templateId: device_template, orgId: device_organization, group: device_group, attribute: device_attributes });
    let data = createDevice.toObject(false);
    return data;
}

// search device
async function key_device_info(device_key) {
    try {
        let deviceInfo = await Device().IdentifyInfoByKey({ key: device_key });
        let data = deviceInfo.toObject();
        return data;
    } catch (any) {
        return {}
    };
}

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.

  • Sau khi tạo xong service chọn service vừa tạo để gán vào adapter.

  • Nhấn để lưu adapter.

1.4. Thử nghiệm với Hercules

  • Sử dụng Hercules kết nối tới adapter theo địa chỉ nhận được sai khi tạo.

  • Gửi bản tin dưới dạng HEX: 7e123456696e6e6f7761797e

  • Vào Đám mây -> Quản lí tổ chức -> Thiết bị sẽ thấy có thiết bị TEST-DEVICE với key là TEST-123456 được tạo.

Last updated