Tích hợp đồng hồ nước thông minh

Đây là giải pháp mẫu hướng dẫn tích hợp thiết bị đồng hồ nước sử dụng giao thức UDP lên nền tảng Innoway.

Giới thiệu

Đồng hồ nước thông minh: Đây là dòng thiết bị tối ưu năng lượng sử dụng, với chu kỳ gửi bản tin hằng ngày hoặc hàng giờ để người sử dụng có thể theo dõi lưu lượng nước sử dụng, nhận cảnh báo khi có hiện tượng bất thường như vấn đề về từ tính, sóng mạng, vỡ đường ống rò rỉ nước hoặc cạn nước. Với việc tích hợp đồng hồ nước lên một nền tảng, nhà quản lý có thể tổng hợp số liệu nước sử dụng từ đó tạo hóa đơn thanh toán, đặt lại đồng hồ từ xa mà không cần đội ngũ trực tiếp đến kiểm tra đồng hồ định kỳ theo tháng.

Giải pháp mẫu này sẽ có các bước chính:

  • Đăng kí tài khoản.

  • Tạo dự án mới.

  • Tạo kết nối UDP với đồng hồ nước.

  • Sửa nghiệp vụ.

  • Sử dụng bảng điều khiển để hiển thị dữ liệu.

  • Tạo sự kiện cảnh báo.

Đăng kí tài khoản

Để sử dụng được các tính năng trên Innoway, người dùng cần tạo tài khoản và đăng nhập. Tham khảo hướng dẫn đăng kí tài khoản tại đây

Tạo dự án

Mỗi người dùng có thể tạo nhiều dự án tương ứng với nhiều nghiệp vụ khác nhau (đồng hồ nước, chiếu sáng thông minh, ...)

Thực hiện tạo dự án theo hướng dẫn tại đây.

Tạo kết nối UDP với đồng hồ nước

Để kết nối thiết bị dùng giao thức UDP lên nền tảng, người dùng cần thực mở một cổng kết nối để gửi bản tin. Chức năng Custom adapter cho phép người dùng mở cổng với giao thức tùy chọn cho phép thiết bị kết nối và gửi bản tin lên nền tảng, đồng thời định nghĩa nghiệp vụ xử lí cho từng cổng kết nối. Tham khảo thêm tại đây.

Sau khi tạo dự án mới, từ tab Đám mây-> Adapter -> click "+" để tạo mới adapter

  • Điền tên adapter, chọn Protocol UDP, Content type Hex.

  • Ấn tiếp theo, chọn thing đã có sẵn hoặc tạo thing mới

  • Ấn tiếp theo, chọn nghiệp vụ đã có sẵn hoặc tạo nghiệp vụ mới. Điền tên nghiệp vụ, kiểu dữ liệu trả về.

Sửa nghiệp vụ

Nghiệp vụ sẽ định nghĩa luồng xử lí khi nền tảng tiếp nhận bản tin từ thiết bị. Tham khảo thêm tại đây.

Từ tab Đám mây-> Quản lý nghiệp vụ -> click vào tên Thing -> click "Sửa nghiệp vụ" để sửa nghiệp vụ mong muốn

  • Nhập tên biến và kiểu dữ liệu. Khi nhận được bản tin UPD gửi tới adapter, server sẽ trả về 2 biến là payload và entityInfo đều có kiểu string. Trong phần “Code” ta sẽ viết chương trình JavaScript giải mã, xử lý các biến đầu vào, trả về thông tin cần thiết.

  • Ví dụ: Viết nghiệp vụ giải mã bản tin sau: “aa12345600026b8e0e16580000654b078eaa”.

  • Trong đó:

    aa

    123456

    00026b8e

    0e

    16

    58

    0000

    654b078e

    aa

    Header

    Id

    Total Vol (l)

    Flow rate (l/h)

    Temperature

    Pin (%)

    Error code

    Time Stamp

    Footer

  • Chương trình sẽ giải mã bản tin, kiểm tra xem thiết bị đã được tạo hay chưa. Nếu chưa thì sẽ tạo mới một thiết bị với device_key là SWM-{id}. Khi đã có thiết bị thì tiến hành giải mã và lưu các trường thông tin cần thiết.

// console.log("***SMART WATER METER****");
telegram = {}
telegram["id"] = payload.substring(2, 8);
telegram["total_vol"] = parseInt(payload.substring(8, 16),16);
telegram["current_flow_rate"] = parseInt(payload.substring(16, 18),16);
telegram["current_water_temp"] = parseInt(payload.substring(18, 20),16);
telegram["battery_level"] = parseInt(payload.substring(20, 22),16);
telegram["error_code"] = payload.substring(22, 26);
telegram["current_ts"] = parseInt(payload.substring(26, 34),16);

console.log(telegram);

let metadata = entityInfo;
let device_key = "SWM" + telegram.id;
let dataDeviceInfo = await key_device_info(device_key,metadata.project_id);
if(dataDeviceInfo.id == null)
{
  console.log("CREATE DEVICE IN PLATFORM");
  let res = await create_method(telegram.id, device_key,"","","","");
  dataDeviceInfo.id = res.id
}
await Thing(dataDeviceInfo.id).UpsertAttributes(telegram, {logged: false});
await Thing(dataDeviceInfo.id).UpsertAttributesV3(telegram, true, "DEVICE", (telegram.current_ts)*1000);
telegram.entity_id = dataDeviceInfo.id;
msg = telegram;
return msg;

// search device
async function key_device_info(device_key, project_id) {
  try {
    let deviceInfo = await Device().IdentifyInfoByKeyWithAd({ key: device_key, projectId: project_id});
    let data = deviceInfo.toObject();
    if(data.additionalinfo != null)
    {
 let vehicleInfo = JSON.parse(String.fromCharCode.apply(String,  deviceInfo.getAdditionalinfo_asU8()));
      data.additionalinfo = vehicleInfo;
    }
    return data;
  } catch (any) {
    return {}
  };
}

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

Test giao thức UDP với Hercules

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

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

  • Sau khi gửi, chọn Lịch sử bản tin để xem bản tin

  • Vào mục Quản lý tổ chức, chọn Thiết bị để xem thiết bị đã được tạo chưa

  • Ở ví dụ này ta đã tạo được thiết bị có tên chính là id: 123456. Chọn xem chi tiết để xem các trường thông tin được gửi lên

  • Nhấn chọn "Xem chi tiết" để xem các thuộc tính của thiết bị vừa được tạo

  • Nhấn chọn "Bản tin thuộc tính để xem sự thay đổi của giá trị thuộc tính"

Sử dụng Bảng điều khiển hiển thị dữ liệu

Bảng điều khiển cho phép người dùng trực quan hóa dữ liệu của thiết bị. Tham khảo cách tạo nhiều loại biều đồ khác nhau tại đây.

Sử dụng sự thay đổi giá trị của các thuộc tính để xây dựng biểu đồ dữ liệu

  • Từ tab Đám mây-> Bảng điều khiển-> click "+" để tạo mới bảng điều khiển.

  • Tạo mới biểu đồ

  • Tạo biểu đồ đường với thuộc tính current_flow_rate (lưu lượng nước)

  • Tạo bảng dữ liệu với thuộc tính total_vol (Tổng lượng nước sử dụng)

Tạo sự kiện cảnh báo

Sự kiện là tính năng theo dõi sự thay đổi của thuộc tính và thực thi các hành động khi thuộc tính thỏa mãn điều kiện kích hoạt. Tham khảo thêm về sự kiện tại đây.

  • Từ tab Đám mây -> Quản lý tổ chức -> Sự kiện -> click "+" để tạo mới sự kiện.

Các thông tin chính của sư kiện trên:

  • Tên sự kiện : Pin yếu

  • Kiểu sự kiện : lập lịch event (sự kiện được kích hoạt khi thỏa mãn điều kiện được thiết lập tại mục điều kiện kích hoạt)

  • Thơi gian kiểm tra sự kiện : Các điều kiện kích hoạt sẽ chỉ được kiểm tra trong khoảng thời gian mà người dùng thiết lập, trong ví dụ điều kiện sẽ được kiểm tra từ 7h20 sáng đến 20h20 tối trong toàn bộ các ngày trong tuần

  • Điều kiện kích hoạt : Sử dụng thuộc tính battery_level của thiết bị 123456. Khi giá trị của thuộc tính battery_level có sự thay đổi và nhỏ hơn 20 thì sự kiện được kích hoạt. Chọn vào biểu tượng + bên cạch để thêm điều kiện kích hoạt

  • Thao tác sử lý : Là hành động sẽ được thực hiện khi sự kiện được kích hoạt. Trong ví dụ khi sự kiện được kích hoạt sẽ có email và tin nhắn gửi đến địa chỉ mà người dùng thiết lập. Chọn vào biểu tượng + bên cạch để thao tác xử lý

Last updated