Overview
เอกสารนี้อธิบายมาตรฐานการเชื่อมต่อ (API Specification) สำหรับนักพัฒนาในการเชื่อมระบบเข้ากับ CORNTROL โดยมีตัวอย่างการใช้งานหลัก เช่น การยืนยันตัวตนด้วย x-api-key, เรียกดูรายการอุปกรณ์, รายละเอียดอุปกรณ์ และรายงานอุณหภูมิ
Basics
| Base URL | https://open-api.corntrol.com |
|---|---|
| Content Type | application/json |
| Headers | x-api-key: <YOUR_API_KEY> |
Scopes
devices:read reports:read
• รองรับการใช้งานเฉพาะอุปกรณ์ที่อยู่ใน แผนมืออาชีพ (Professional Plan) เท่านั้น
• ควรกำหนดสิทธิ์ให้กับบัญชีนี้ เฉพาะเท่าที่จำเป็นต่อการใช้งาน
หมายเหตุ: ในช่วงทดลองใช้งาน (ตั้งแต่วันนี้ – 31 ธันวาคม 2569) ระบบจะรองรับอุปกรณ์ทั้งใน แผนพื้นฐาน (Standard Plan) และ แผนมืออาชีพ (Professional Plan)
สร้าง API Key (ผ่านแอปฯ CORNTROL)
ผู้ใช้งานจำเป็นต้องติดตั้งแอปพลิเคชัน CORNTROL บนอุปกรณ์ (เช่น สมาร์ตโฟนหรือแท็บเล็ต) และเข้าสู่ระบบด้วยบัญชีผู้ใช้งานที่ถูกต้องก่อน จึงจะสามารถสร้างและจัดการ API Key ได้
ขั้นตอน
| ลำดับ | คำอธิบาย |
|---|---|
1. | เปิดแอปฯ CORNTROL แล้วเข้าสู่ระบบ |
2. | ไปที่แท็บ โปรไฟล์ (Profile) จากนั้นเลือกเมนู API Key |
3. | กด Generate API Key |
4. | ในหน้าต่างยืนยัน “Confirm API Key Creation” กด Confirm |
5. | กด Copy เพื่อคัดลอกคีย์ แล้วเก็บรักษาให้ปลอดภัย (เช่นใน password manager หรือไฟล์ .env บนเซิร์ฟเวอร์) |
Authentication
ส่ง API Key ของคุณใน HTTP header x-api-key ทุกครั้งที่มีการเรียกใช้งาน (request)
x-api-key: YOUR_API_KEY
Devices
เรียกดูรายการอุปกรณ์ — GET /devices
พารามิเตอร์สำหรับ Query:
| พารามิเตอร์ | ชนิดข้อมูล | จำเป็น | ตัวอย่าง | คำอธิบาย |
|---|---|---|---|---|
page | int | No | 1 | หน้าที่ต้องการดึงข้อมูล (ค่าเริ่มต้น = 1) |
limit | int | No | 20 | จำนวนอุปกรณ์ต่อหน้า (1–100, ค่าเริ่มต้น = 20) |
curl -X GET "https://YOUR_BASE_URL/devices?page=1&limit=20" -H "x-api-key: YOUR_API_KEY"
{
"code": 200,
"message": "ok",
"data": {
"page": 1,
"limit": 20,
"totalPages": 1,
"totalResults": 1,
"results": [
{
"deviceInfo": {
"name": "Device No.1",
"description": "Testing Equipment in the Laboratory",
"macAddress": "AABBCCDD11",
"imageUrl": null
},
"lineVoltage": 231,
"subscriptionPlan": "professional",
"status": "normal",
"mode": "automationSchedule",
"timeZone": "Asia/Bangkok",
"location": {
"placeName": "Shop 1",
"latitude": null,
"longitude": null
},
"temperature": {
"setPoint": 22,
"hightTempAlarmThreshold": 35,
"lowTempAlarmThreshold": 0.5,
"temperatureUnit": "°C",
"sensors": [
{
"id": "sensor1",
"value": 29.7,
"instantValue": 29.7
},
{
"id": "sensor2",
"value": 28.8,
"instantValue": 28.8
}
]
},
"actuators": {
"isPowerOn": true,
"isDefrostOn": false,
"isLightOn": false,
"isFanOn": true,
"isWifiEnabled": true,
"isCompressorOn": true,
"isDoorOpen": false,
"isAlarmActive": false,
"auxRelay1": false,
"flashing": {
"isDefrostFlashing": false,
"isFanFlashing": false,
"isCompressorFlashing": false,
"isAlarmFlashing": false
}
},
"wifi": {
"ssid": "Matherchip_WiFi_2.4G",
"rssi": -63
},
"firmware": {
"mainVersion": "0.2.7",
"mainUpdatedAt": "2024-07-22T11:16:57.000Z",
"wifiVersion": "1.2.2",
"wifiUpdatedAt": "2025-02-27T04:33:13.000Z",
"configVersion": "0.1.6"
},
"alarm": {
"isBuzzerEnabled": false,
"hasActiveAlarm": false,
"activeCodes": []
},
"createdAt": "2025-02-14T09:01:30.793Z",
"updatedAt": "2025-09-08T04:22:01.538Z"
}
]
}
}
เรียกดูข้อมูลอุปกรณ์ (Get Device) — GET /devices/{deviceMacAddress}
พารามิเตอร์สำหรับ Query:
| พารามิเตอร์ | ชนิดข้อมูล | จำเป็น | ตัวอย่าง | คำอธิบาย |
|---|---|---|---|---|
deviceMacAddress | string | Yes | AABBCCDD11 | ที่อยู่ MAC ของอุปกรณ์ (ใช้สำหรับระบุอุปกรณ์) |
curl -X GET "https://YOUR_BASE_URL/devices/AABBCCDD11" -H "x-api-key: YOUR_API_KEY"
{
"code": 200,
"message": "ok",
"data": {
"deviceInfo": {
"name": "Device No.1",
"description": "Testing Equipment in the Laboratory",
"macAddress": "AABBCCDD11",
"imageUrl": null
},
"lineVoltage": 232,
"subscriptionPlan": "professional",
"status": "normal",
"mode": "automationSchedule",
"timeZone": "Asia/Bangkok",
"location": {
"placeName": "Shop 1",
"latitude": null,
"longitude": null
},
"temperature": {
"setPoint": 22,
"hightTempAlarmThreshold": 35,
"lowTempAlarmThreshold": 0.5,
"temperatureUnit": "°C",
"sensors": [
{
"id": "sensor1",
"value": 29.5,
"instantValue": 29.5
},
{
"id": "sensor2",
"value": 28.7,
"instantValue": 28.7
}
]
},
"actuators": {
"isPowerOn": true,
"isDefrostOn": false,
"isLightOn": false,
"isFanOn": true,
"isWifiEnabled": true,
"isCompressorOn": true,
"isDoorOpen": false,
"isAlarmActive": false,
"auxRelay1": false,
"flashing": {
"isDefrostFlashing": false,
"isFanFlashing": false,
"isCompressorFlashing": false,
"isAlarmFlashing": false
}
},
"wifi": {
"ssid": "Matherchip_WiFi_2.4G",
"rssi": -63
},
"firmware": {
"mainVersion": "0.2.7",
"mainUpdatedAt": "2024-07-22T11:16:57.000Z",
"wifiVersion": "1.2.2",
"wifiUpdatedAt": "2025-02-27T04:33:13.000Z",
"configVersion": "0.1.6"
},
"alarm": {
"isBuzzerEnabled": false,
"hasActiveAlarm": false,
"activeCodes": []
},
"createdAt": "2025-02-14T09:01:30.793Z",
"updatedAt": "2025-09-08T05:17:00.530Z"
}
}
📘 สถานะของอุปกรณ์ (status field)
| ชื่อสถานะ | คำอธิบาย |
|---|---|
normal | อุปกรณ์ทำงานปกติ |
offline | อุปกรณ์ออฟไลน์ (ไม่เชื่อมต่อ) |
powerOff | อุปกรณ์ปิด |
alarm | อุปกรณ์มีการแจ้งเตือน/ผิดปกติ |
updating | อุปกรณ์กำลังอัปเดตเฟิร์มแวร์ |
📘 รหัสการแจ้งเตือน (activeCodes)
ใช้สำหรับแสดงรายการ "รหัสการแจ้งเตือน (Alarm Codes)" ที่อุปกรณ์กำลังทำงานอยู่ ณ ขณะนั้น
"alarm": {
"activeCodes": ["E0", "E1"]
}
| รหัส | คำอธิบาย |
|---|---|
E0 | Sensor Probe 1 Short หรือ Open |
E1 | Sensor Probe 2 Short หรือ Open |
E2 | ค่าพารามิเตอร์ที่บันทึกไว้เสื่อม (หน่วยความจำเสื่อม) |
E3 | การสื่อสารระหว่าง Main กับ Display ขัดข้อง |
E4 | การสื่อสารระหว่าง Display กับ Wi-Fi Module ขัดข้อง |
tLo | อุณหภูมิต่ำกว่าค่าขอบเขตอุณหภูมิด้านต่ำ |
tHi | อุณหภูมิสูงกว่าค่าขอบเขตอุณหภูมิด้านสูง |
Lu | แรงดันไฟฟ้าต่ำกว่าค่าระดับแรงดันไฟฟ้าด้านต่ำ |
Hu | แรงดันไฟฟ้าสูงกว่าค่าระดับแรงดันไฟฟ้าด้านสูง |
ค่าแรงดันไฟฟ้า(lineVoltage) หน่วยเป็น Volt (V)
Temperature Report
ดึงข้อมูลอุณหภูมิแบบต่อเนื่องตามช่วงเวลาของอุปกรณ์
เรียกดูรายงานอุณหภูมิ — GET /device-report/{deviceMacAddress}/temperature
พารามิเตอร์สำหรับ Query:
| พารามิเตอร์ | ชนิดข้อมูล | จำเป็น | ตัวอย่าง | คำอธิบาย |
|---|---|---|---|---|
deviceMacAddress | string | Yes | AABBCCDD11 | ที่อยู่ MAC ของอุปกรณ์ (ใช้สำหรับระบุอุปกรณ์) |
from | datetime (ISO8601) | Yes | 2025-09-01 02:00:00 | วันที่เริ่มต้น (รูปแบบเวลา ISO8601) |
to | datetime (ISO8601) | Yes | 2025-09-01 03:20:00 | วันที่สิ้นสุด (รูปแบบเวลา ISO8601) |
limit | int | No | 20 | จำนวนข้อมูลสูงสุดที่ดึงในแต่ละครั้ง (ช่วง 1–100, ค่าเริ่มต้น = 20) |
cursor | datetime (ISO8601) | No | 2025-09-01T02:19:00.000Z | ใช้ดึงข้อมูลต่อเนื่องจาก nextCursor หาก hasMore เป็น true |
order | string | No | asc | การเรียงลำดับข้อมูล (ค่าเริ่มต้น = asc, หรือ desc) |
curl -G "https://YOUR_BASE_URL/device-report/{deviceMacAddress}/temperature?from=2025-09-01 02:00:00&to=2025-09-01 03:20:00&limit=20&cursor=2025-09-01T02:19:00.000Z&order=asc" -H "x-api-key: YOUR_API_KEY" --data-urlencode "deviceMacAddress=AABBCCDD11"
{
"code": 200,
"message": "ok",
"data": {
"limit": 20,
"nextCursor": "2025-09-01T02:39:00.000Z",
"hasMore": true,
"results": [
{
"timestamp": "2025-09-01T02:20:00.000Z",
"setpoint": 22,
"highTempAlarmThreshold": 35,
"lowTempAlarmThreshold": 0.5,
"sensors": [
{
"id": "sensor1",
"value": 30.2,
"instantValue": 30.2
},
{
"id": "sensor2",
"value": 29.4,
"instantValue": 29.4
}
]
},
{
"timestamp": "2025-09-01T02:21:00.000Z",
"setpoint": 22,
"highTempAlarmThreshold": 35,
"lowTempAlarmThreshold": 0.5,
"sensors": [
{
"id": "sensor1",
"value": 30.2,
"instantValue": 30.2
},
{
"id": "sensor2",
"value": 29.3,
"instantValue": 29.3
}
]
}
]
}
}
ตัวอย่างตารางการตอบกลับเมื่อเกิดข้อผิดพลาด (Error Responses)
| รหัส | ตัวอย่างข้อความตอบกลับ (Body) | คำอธิบาย |
|---|---|---|
401 | {"error":"invalid_api_key"} | ไม่พบหรือ API Key ไม่ถูกต้อง |
403 | {"error":"insufficient_scope"} | ขาดสิทธิ์การเข้าถึงตามที่กำหนด |
404 | {"error":"device_not_found"} | ไม่พบบันทึกอุปกรณ์ (deviceAddress ไม่ถูกต้อง) |
422 | {"error":"invalid_time_range"} | ช่วงเวลาไม่ถูกต้อง หรือยาวเกินไป |
429 | {"error":"rate_limited","retry_after":30} | เกินจำนวนการเรียกใช้งานที่กำหนด ต้องรอ 30 วินาที |
500 | {"error":"server_error","request_id":"R11"} | เกิดข้อผิดพลาดภายในระบบ โปรดติดต่อผู้ดูแล พร้อมแจ้ง request_id |