Các Endpoint trong tài liệu hướng dẫn này sẽ bắt đầu bằng: http://iot.megaads.vn/api
Các mã lỗi không hợp lệ:
- 400: Dữ liệu gửi lên không hợp lệ.
- 403: Yêu cầu bị từ chối do không có quyền truy cập.
- 500: Có lỗi xảy ra phía máy chủ
Ngoài ra sẽ có các message mô tả chi tiết lỗi trong mỗi response trả về.
1. User
1.1 Đăng nhập
[POST] - /login
Dữ liệu gửi lên gồm:
+ email: (required | string) địa chỉ email mà người dùng đã đăng ký.
+ password: (required | string) mật khẩu của người dùng.
hoặc
+ refreshToken: token đã đăng nhập phía trước đó, dùng cho trường hợp người dùng đã đăng nhập.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"type": "bearer",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTYwMzg1NzgyNn0.5ntwLiNX_W2ArV1z5SMLjYFaqCpjZc6s72daTZIKfG0",
"refreshToken": "f9573dc1a0fd1d8d6f1bab5969dd7ce33cTg8JpUMAyE/xpXhvWpWIeGYGt6NB75Z1BsWRIYt6ip4RrHYsoImavNIk6afPFT"
}
}
Sử dụng giá trị của token để xác thực cho các endpoint bằng cách thêm Authorization = Bearer vào headers của request khi giửi lên. Sử dụng refreshToken để gia hạn token nếu token hết hạn.
1.2 Đăng ký
[POST] - /register
Dữ liệu gửi lên gồm:
+ email: (required | string) địa chỉ email mà người dùng muốn đăng ký, không trùng với các email của người dùng khác.
+ password: (required | string) mật khẩu của người dùng, tối thiểu 6 ký tự.
+ name: (required | string) họ và tên của người dùng.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"type": "bearer",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTYwMzg1NzgyNn0.5ntwLiNX_W2ArV1z5SMLjYFaqCpjZc6s72daTZIKfG0",
"refreshToken": "f9573dc1a0fd1d8d6f1bab5969dd7ce33cTg8JpUMAyE/xpXhvWpWIeGYGt6NB75Z1BsWRIYt6ip4RrHYsoImavNIk6afPFT"
}
}
Sau khi đăng ký thành công hệ thống sẽ tự động đăng nhập luôn cho tài khoản mới tạo.
1.3 Quên mật khẩu
[POST] - /forget
Dữ liệu gửi lên gồm:
+ email: (required | string) địa chỉ email mà người đã đăng ký.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": [
"Email hướng dẫn tạo mật khẩu đã được gửi đến địa chỉ . Hãy kiểm tra email và làm theo hướng dẫn.",
"Nếu không thấy email trong hộp thư đến (Inbox) vui lòng kiểm tra hộp thư Spam hoặc Junk Folder."
]
}
App cần đăng ký deep link với đường dẫn /api/reset/{token}, khi người dùng mở đường dẫn trong email sẽ tự nhảy về App.
1.4 Cập nhật mật khẩu
[POST] - /reset/{token}
Dữ liệu gửi lên gồm:
+ {token}: (required | string) token đã nhận được từ deep link ở API khôi phục mật khẩu.
+ password: (required | string) mật khẩu mới, tối thiểu 6 ký tự.
+ password_confirmation: (required | string) nhập lại mật khẩu mới.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful"
}
1.5 Lấy thông tin tài khoản
[GET] - /profile
Để lấy được thông tin tài khoản cần gửi kèm header Authorization ứng với token đã được cấp.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 1,
"email": "kieutuananh1995@gmail.com",
"name": "Tuấn Anh Zippy",
"created_at": "2020-10-26 16:58:38",
"updated_at": "2020-10-27 23:18:53"
}
}
1.6 Cập nhật thông tin tài khoản
[POST] - /profile
Dữ liệu gửi lên gồm:
+ name: (optional | string) tên tài khoản.
+ password: (optional | string) mật khẩu mới.
Để cập nhật thông tin tài khoản cần gửi kèm header Authorization ứng với token đã được cấp.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 1,
"email": "kieutuananh1995@gmail.com",
"name": "Tuấn Anh Zippy 123",
"created_at": "2020-10-26 16:58:38",
"updated_at": "2020-10-27 23:18:53"
}
}
2. Type
Để lấy được thông tin Loại thiết bị cần gửi kèm header Authorization ứng với token đã được cấp.
2.1. Lấy danh sách loại thiết bị
[GET] - /type/{id}
Dữ liệu gửi lên gồm:
+ {id}: (optional | number) được dùng khi muốn xem chi tiết thông tin của một loại thiết bị.
+ pageId: (optional | number) được bắt đầu bằng trang thứ 0.
+ pageSize: (optional | number ) mặc định là 30, để lấy tất cả danh sách loại thiết bị hãy gửi lên -1.
+ name: (optional | string) tìm kiếm theo tên loại thiết bị.
+ order: (optional | string) sắp xếp theo thông tin trường. Ví dụ order=-sorder có nghĩa là sắp xếp sorder theo thứ tự giảm dần và ngược lại, bỏ dấu - để sắp xếp tăng dần.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"pagesCount": 14,
"pageId": 0,
"pageSize": 1,
"data": [
{
"id": 19,
"name": "VTV3",
"description": "Hello World!",
"sorder": null,
"created_at": "2020-10-28 18:57:06",
"updated_at": "2020-10-28 18:57:06"
}
]
}
2.2. Thêm loại thiết bị
[POST] - /type
Dữ liệu gửi lên gồm:
+ name: (required| string) tên loại thiết bị.
+ sorder: (optional | number) thứ tự sắp xếp tùy chỉnh.
+ description: (optional | string) mô tả cho loại thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 1,
"name": "Thiết bị điện",
"description": "",
"sorder": null,
"created_at": "2020-10-26 09:58:17",
"updated_at": "2020-10-26 09:58:24"
}
}
2.3. Cập nhật thông tin loại thiết bị
[PATCH] - /type/{id}
Dữ liệu gửi lên gồm:
+ {id}: (required| number) id loại thiết bị.
+ name: (required| string) tên loại thiết bị.
+ sorder: (optional | number) thứ tự sắp xếp tùy chỉnh.
+ description: (optional | string) mô tả cho loại thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 1,
"name": "Thiết bị thông minh",
"description": "",
"sorder": null,
"created_at": "2020-10-26 09:58:17",
"updated_at": "2020-10-26 10:58:24"
}
}
2.4. Xóa thông tin loại thiết bị
[DELETE] - /type/{id}
Dữ liệu gửi lên gồm:
+ {id}: (required| number) id loại thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 2,
"name": "Thiết bị chiếu sáng",
"description": null,
"sorder": null,
"created_at": "2020-10-26 09:58:17",
"updated_at": "2020-10-26 09:58:24"
}
}
3. Device
Để lấy được thông tin Thiết bị cần gửi kèm header Authorization ứng với token đã được cấp.
3.1. Lấy danh sách loại thiết bị
[GET] - /device/{id}
Dữ liệu gửi lên gồm:
+ {id}: (optional | number) được dùng khi muốn xem chi tiết thông tin của một thiết bị.
+ pageId: (optional | number) được bắt đầu bằng trang thứ 0.
+ pageSize: (optional | number ) mặc định là 30, để lấy tất cả danh sách loại thiết bị hãy gửi lên -1.
+ terms: (optional | string) tìm kiếm theo tên, bssid, serial_number của thiết bị.
+ name: (optional | string) tìm kiếm theo tên của thiết bị.
+ bssid: (optional | string) tìm kiếm theo mã đăng ký của thiết bị.
+ status: (optional | string) trạng thái connect hoặc disconnect.
+ serial_number: (optional | string) số serial của thiết bị.
+ error_code: (optional | number) mã lỗi.
+ type_id: (optional | number) id loại thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"pagesCount": 1,
"pageId": 0,
"pageSize": 30,
"data": [
{
"id": 17,
"bssid": "98:1A:6B:7C:2D",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "123456765432",
"fw_version": null,
"error_code": 0,
"signal_strength": 0,
"type_id": 1,
"created_at": "2020-10-29 15:46:25",
"updated_at": "2020-10-29 15:46:25"
}
]
}
3.2. Thêm mới thiết bị
[POST] - /device
Dữ liệu gửi lên gồm:
+ bssid: (required | string) tìm kiếm theo mã đăng ký của thiết bị.
+ status: (optional | string) trạng thái connect hoặc disconnect.
+ serial_number: (optional | string) số serial của thiết bị.
+ fw_version: (optional | string) mã số phiên bản phần mềm.
+ error_code: (optional | number) mã lỗi.
+ signal_strength: (optional | number) cường độ tín hiệu.
+ type_id: (optional | number) id loại thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 17,
"bssid": "98:1A:6B:7C:2D",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "123456765432",
"fw_version": null,
"error_code": 0,
"signal_strength": 0,
"type_id": 1,
"created_at": "2020-10-29 15:46:25",
"updated_at": "2020-10-29 15:46:25"
}
}
3.3. Cập nhật thông tin thiết bị
[PATCH] - /device/{id}
Dữ liệu gửi lên gồm:
+ {id}: (required | number) mã thiết bị.
+ bssid: (required | string) tìm kiếm theo mã đăng ký của thiết bị.
+ status: (optional | string) trạng thái connect hoặc disconnect.
+ serial_number: (optional | string) số serial của thiết bị.
+ fw_version: (optional | string) mã số phiên bản phần mềm.
+ error_code: (optional | number) mã lỗi.
+ signal_strength: (optional | number) cường độ tín hiệu.
+ type_id: (optional | number) id loại thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 17,
"bssid": "98:1A:6B:7C:2D",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "123456765432",
"fw_version": null,
"error_code": 404,
"signal_strength": 100,
"type_id": 1,
"created_at": "2020-10-29 15:46:25",
"updated_at": "2020-10-29 15:46:25"
}
}
3.4. Xóa thiết bị
[DELETE] - /device/{id}
Dữ liệu gửi lên gồm:
+ {id}: (required | number) mã thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 17,
"bssid": "98:1A:6B:7C:2D",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "123456765432",
"fw_version": null,
"error_code": 0,
"signal_strength": 0,
"type_id": 1,
"created_at": "2020-10-29 15:46:25",
"updated_at": "2020-10-29 15:46:25"
}
}
3.5. Chia sẻ thiết bị
[POST] - /device/sharing
Dữ liệu gửi lên gồm:
+ {deviceId}: (required | number) mã thiết bị muốn chia sẻ.
+ {emails}: (required | array) danh sách địa chỉ email muốn chia sẻ quyền điều kiển thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
}
4. Action
4.1. Danh sách Action theo thiết bị
[GET] - /action/{deviceId}/{id}
Dữ liệu gửi lên gồm:
+ {deviceId}: (required | number) mã thiết bị.
+ {id}: (optional | number) mã action được dùng khi muốn xem chi tiết thông tin của một thiết bị.
+ pageId: (optional | number) được bắt đầu bằng trang thứ 0.
+ pageSize: (optional | number ) mặc định là 30, để lấy tất cả danh sách loại thiết bị hãy gửi lên -1.
+ status: (optional | string) trạng thái của action, có thể là enable hoặc disable.
+ type: (optional | string) loại action, có thể là schedule hoặc timer.
+ action: (optional | string) lệnh thông báo cho thiết bị, thường là on hoặc off.
+ repeat: (optional | string) thời gian lặp lại thực hiện action, thường là once hoặc các ngày trong tuần (monday,tuesday,...).
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"pagesCount": 1,
"pageId": 0,
"pageSize": 30,
"data": [
{
"id": 1,
"device_id": 23,
"status": "enable",
"type": "schedule",
"hour": 0,
"minute": 2,
"action": "on",
"repeat": "once",
"created_at": "2021-03-30 15:55:26",
"updated_at": "2021-03-30 15:55:26",
"user_id": 1
}
]
}
4.2. Thêm Action theo thiết bị
[POST] - /action/{deviceId}
Dữ liệu gửi lên gồm:
+ {deviceId}: (required | number) mã thiết bị.
+ status: (optional | string) trạng thái của action, có thể là enable hoặc disable
+ type: (optional | string) loại action, có thể là schedule hoặc timer.
+ action: (optional | string) lệnh thông báo cho thiết bị, thường là on hoặc off.
+ hour: (number | string) đơn vị giờ, trong khoảng từ 0 đến 23.
+ minute: (number | string) đơn vị giờ, trong khoảng từ 0 đến 59.
+ repeat: (optional | string) thời gian lặp lại thực hiện action, thường là once hoặc các ngày trong tuần (monday,tuesday,...).
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 6,
"device_id": 23,
"status": "enable",
"type": "timer",
"hour": 0,
"minute": 2,
"action": "off",
"repeat": "once",
"created_at": "2021-03-31 10:30:12",
"updated_at": "2021-03-31 10:30:12",
"user_id": 1
}
}
4.3. Cập nhật Action theo thiết bị
[PATCH] - /action/{deviceId}/{id}
Dữ liệu gửi lên gồm:
+ {deviceId}: (required | number) mã thiết bị.
+ {id}: (required | number) mã action.
+ status: (optional | string) trạng thái của action, có thể là enable hoặc disable
+ type: (optional | string) loại action, có thể là schedule hoặc timer.
+ action: (optional | string) lệnh thông báo cho thiết bị, thường là on hoặc off.
+ hour: (number | string) đơn vị giờ, trong khoảng từ 0 đến 23.
+ minute: (number | string) đơn vị giờ, trong khoảng từ 0 đến 59.
+ repeat: (optional | string) thời gian lặp lại thực hiện action, thường là once hoặc các ngày trong tuần (monday,tuesday,...).
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 6,
"device_id": 23,
"status": "enable",
"type": "timer",
"hour": 0,
"minute": 2,
"action": "on",
"repeat": "once",
"created_at": "2021-03-31 10:30:12",
"updated_at": "2021-03-31 10:30:12",
"user_id": 1
}
}
5. Sockets
Để thao tác được giữa App và Device hệ thống sử dụng thư viện socket.io dựa trên giao thức socket.
- Dành cho Device
1. Sau khi kết nối internet thành công, hoặc thiết bị tắt đi bật lại hãy gửi sự kiện:
Tên sự kiện(emit): registerDevice
Dữ liệu gửi kèm:
{
"bssid": "9A-8C-3D-4E-5F",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "12345678765432",
"fw_version": null,
"signal_strength": 100,
"error_code": 1,
"pins": [
{
"pin": 1,
"status": "on",
"startup": "off"
},
{
"pin": 2,
"status": "off",
"startup": "off"
}
]
}
Trong đó:
+ bssid: (required | string) mã định danh của thiết bị.
+ name: (string) tên của thiết bị.
+ status: (string | connect,disconnect) trạng thái của thiết bị đang được kết nối hay mất kết nối.
+ serial_number: (string) số serial của thiết bị.
+ signal_strength: (number) cường độ tín hiệu internet của thiết bị.
+ fw_version: (optional | string) mã số phiên bản phần mềm.
+ error_code: (number) mã lỗi.
+ pins: (required | array) danh sách các kênh của thiết bị có thể điều khiển.
2. Lắng nghe sự kiện điều khiển từ App:
Tên sự kiện(on): message
Dữ liệu gửi xuống: có thể là một (string | number | json)
- Nếu dữ liệu gửi xuống là JSON dùng để điều khiển thiết bị, cần theo đúng định dạng:
{
"pin": 1,
"status": "on",
"startup": "off"
}
Trong đó:
+ pin: (required | number) thiết bị muốn điều khiển, trong trường hợp thiết bị có thể điều khiển nhiều kênh khác nhau.
+ status: (required | on,off) trạng thái của pin muốn điều kiển.
+ startup: (required | on,off,stay) trạng thái của pin sau khi kết nối thành công internet.
3. Cập nhật trạng thái của thiết bị:
Tên sự kiện(emit): stateDevice
Dữ liệu gửi kèm:
{
"bssid": "9A-8C-3D-4E-5F",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "12345678987654321",
"fw_version": null,
"signal_strength": 100,
"error_code": 2,
"pins": [
{
"pin": 1,
"status": "off",
"startup": "off"
},
{
"pin": 2,
"status": "off",
"startup": "off"
}
]
}
Trong đó:
+ bssid: (required | string) mã định danh của thiết bị.
+ name: (string) tên của thiết bị.
+ status: (string | connect,disconnect) trạng thái của thiết bị, đang bật kết nối hay ngắt kết nối.
+ serial_number: (string) số serial của thiết bị.
+ fw_version: (optional | string) mã số phiên bản phần mềm.
+ signal_strength: (number) cường độ tín hiệu internet của thiết bị.
+ error_code: (number) mã lỗi.
+ pins: (required | array) danh sách các kênh của thiết bị có thể điều khiển.
4. Thực hiện Action(schedule, timer):
Tên sự kiện(on): executeAction
Dữ liệu gửi xuống là một (json)
{
"id": 5,
"device_id": 24,
"status": "disable",
"type": "schedule",
"hour": 0,
"minute": 2,
"action": "on",
"created_at": "2021-03-30 16:25:12",
"updated_at": "2021-03-31 10:05:19",
"user_id": 1
}
5. Cập nhật trạng thái Action(schedule, timer):
Tên sự kiện(emit): doneAction
Dữ liệu gửi kèm:
Trong đó:
+ id: (required | string) mã định danh của action.
- Dành cho App
1. Đăng ký App:
Tên sự kiện(emit): registerApp
Dữ liệu gửi kèm:
{
"user": {
"id": 1
},
"version": "1.0.0"
}
Trong đó:
+ user: (required | object) là đối tượng user đã đăng nhập ở app. Được lấy từ API lấy thông tin user.
+ version: (optional | string) phiên bản app hiện tại.
2. Điều khiển thiết bị
Tên sự kiện(emit): sendMessage
Dữ liệu gửi xuống: có thể là một (string | number | json)
- Nếu dữ liệu gửi xuống là JSON dùng để điều khiển thiết bị, cần theo đúng định dạng:
| String |
Number |
JSON |
|
{
"bssid": "9A-8C-3D-4E-5F",
"message": "Hello World!"
}
|
{
"bssid": "9A-8C-3D-4E-5F",
"message": 123456789
}
|
{
"bssid": "9A-8C-3D-4E-5F",
"message": {
"pin": 1,
"status": "on",
"startup": "off"
}
}
|
Trong đó:
+ bssid: (required | string) thiết bị muốn điều khiển.
+ pin: (optional | number) pin hoặc port muốn điều khiển, trong trường hợp thiết bị có thể điều khiển nhiều kênh khác nhau.
+ status: (optional | on,off) trạng thái của pin muốn điều kiển.
+ startup: (optional | on,off,stay) trạng thái của pin muốn điều kiển sau khi kết nối được internet.
3. Danh sách thiết bị
Sử dụng API lấy danh sách thiết bị ở bên trên.
4. Cập nhật trạng thái thiết bị
Tên sự kiện(on): stateDevice
Dữ liệu gửi xuống:
{
"bssid": "9A-8C-3D-4E-5F",
"name": "Công tắc điện",
"status": "connect",
"serial_number": "123456789",
"signal_strength": 100,
"error_code": 2,
"type_id": 1,
"pins": [
{
"pin": 1,
"status": "off",
"startup": "stay"
},
{
"pin": 2,
"status": "off",
"startup": "stay"
}
]
}
Trong đó:
+ bssid: (string) mã định danh của thiết bị.
+ name: (string) tên của thiết bị.
+ status: (string | connect,disconnect) trạng thái của thiết bị, đang kết nối hay ngắt kết nối.
+ serial_number: (string) số serial của thiết bị.
+ fw_version: (optional | string) mã số phiên bản phần mềm.
+ signal_strength: (number) cường độ tín hiệu internet của thiết bị.
+ error_code: (number) mã lỗi.
+ type_id: (number) mã loại thiết bị.
+ pins: (required | array) danh sách các kênh của thiết bị có thể điều khiển.
5. Cập nhật phần mềm
Tên sự kiện(emit): sendMessage
Dữ liệu gửi xuống là một (json). Ví dụ:
{
"bssid": "12ESAF244",
"message": {
"type": "updateFirmware",
"data": {
"id": 4,
"version": "4.0.0",
"description": "Release",
"status": "final",
"created_at": "2021-03-24 14:45:34",
"updated_at": "2021-03-24 14:45:37"
}
}
}
6. Thực hiện Action(schedule, timer):
Tên sự kiện(emit): executeAction
Dữ liệu gửi kèm:
{
"id": 5,
"device_id": 24,
"status": "disable",
"type": "schedule",
"hour": 0,
"minute": 2,
"action": "on",
"created_at": "2021-03-30 16:25:12",
"updated_at": "2021-03-31 10:05:19",
"user_id": 1
}
6. Cập nhật trạng thái Action(schedule, timer):
Tên sự kiện(on): doneAction
Dữ liệu nhận được:
{
"id": 5,
"device_id": 24,
"status": "disable",
"type": "schedule",
"hour": 0,
"minute": 2,
"action": "on",
"created_at": "2021-03-30 16:25:12",
"updated_at": "2021-03-31 10:05:19",
"user_id": 1
}
6. Firmware
6.1. Kiểm tra bản cập nhật phần mềm
[GET] - /firmware/update
Dữ liệu gửi lên gồm:
+ {deviceId}: (required | number) mã thiết bị.
Dữ liệu trả về nếu hợp lệ:
{
"status": "successful",
"message": "successful",
"data": {
"id": 4,
"version": "4.0.0",
"description": "Release",
"status": "final",
"created_at": "2021-03-24 14:45:34",
"updated_at": "2021-03-24 14:45:37"
}
}