CORNTROL Open API (1.0.0)
Quick Start • x-api-key Authentication

Overview

เอกสารนี้อธิบายมาตรฐานการเชื่อมต่อ (API Specification) สำหรับนักพัฒนาในการเชื่อมระบบเข้ากับ CORNTROL โดยมีตัวอย่างการใช้งานหลัก เช่น การยืนยันตัวตนด้วย x-api-key, เรียกดูรายการอุปกรณ์, รายละเอียดอุปกรณ์ และรายงานอุณหภูมิ

Basics

Base URLhttps://open-api.corntrol.com
Content Typeapplication/json
Headersx-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 บนเซิร์ฟเวอร์)
⚠️ การลบ API Key จะทำให้ระบบที่ใช้คีย์นี้หยุดทำงานทันที และไม่สามารถกู้คืนได้

Authentication

ส่ง API Key ของคุณใน HTTP header x-api-key ทุกครั้งที่มีการเรียกใช้งาน (request)

x-api-key: YOUR_API_KEY
💡 Tip: เก็บ API Key ใน Environment Variables แทนการฮาร์ดโค้ดในซอร์สโค้ด

Devices

เรียกดูรายการอุปกรณ์ — GET /devices

พารามิเตอร์สำหรับ Query:

พารามิเตอร์ชนิดข้อมูลจำเป็นตัวอย่างคำอธิบาย
pageintNo1หน้าที่ต้องการดึงข้อมูล (ค่าเริ่มต้น = 1)
limitintNo20จำนวนอุปกรณ์ต่อหน้า (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:

พารามิเตอร์ชนิดข้อมูลจำเป็นตัวอย่างคำอธิบาย
deviceMacAddressstringYesAABBCCDD11ที่อยู่ 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"]
}
รหัสคำอธิบาย
E0Sensor Probe 1 Short หรือ Open
E1Sensor Probe 2 Short หรือ Open
E2ค่าพารามิเตอร์ที่บันทึกไว้เสื่อม (หน่วยความจำเสื่อม)
E3การสื่อสารระหว่าง Main กับ Display ขัดข้อง
E4การสื่อสารระหว่าง Display กับ Wi-Fi Module ขัดข้อง
tLoอุณหภูมิต่ำกว่าค่าขอบเขตอุณหภูมิด้านต่ำ
tHiอุณหภูมิสูงกว่าค่าขอบเขตอุณหภูมิด้านสูง
Luแรงดันไฟฟ้าต่ำกว่าค่าระดับแรงดันไฟฟ้าด้านต่ำ
Huแรงดันไฟฟ้าสูงกว่าค่าระดับแรงดันไฟฟ้าด้านสูง
Line Voltage (lineVoltage)
ค่าแรงดันไฟฟ้า(lineVoltage) หน่วยเป็น Volt (V)

Temperature Report

ดึงข้อมูลอุณหภูมิแบบต่อเนื่องตามช่วงเวลาของอุปกรณ์

เรียกดูรายงานอุณหภูมิ — GET /device-report/{deviceMacAddress}/temperature

พารามิเตอร์สำหรับ Query:

พารามิเตอร์ชนิดข้อมูลจำเป็นตัวอย่างคำอธิบาย
deviceMacAddressstringYesAABBCCDD11ที่อยู่ MAC ของอุปกรณ์ (ใช้สำหรับระบุอุปกรณ์)
fromdatetime (ISO8601)Yes2025-09-01 02:00:00วันที่เริ่มต้น (รูปแบบเวลา ISO8601)
todatetime (ISO8601)Yes2025-09-01 03:20:00วันที่สิ้นสุด (รูปแบบเวลา ISO8601)
limitintNo20จำนวนข้อมูลสูงสุดที่ดึงในแต่ละครั้ง (ช่วง 1–100, ค่าเริ่มต้น = 20)
cursordatetime (ISO8601)No2025-09-01T02:19:00.000Zใช้ดึงข้อมูลต่อเนื่องจาก nextCursor หาก hasMore เป็น true
orderstringNoascการเรียงลำดับข้อมูล (ค่าเริ่มต้น = 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
                    }
                ]
            }
        ]
    }
}
🌡️ อุณหภูมิทั้งหมดในรายงานนี้มีหน่วยเป็น องศาเซลเซียส (°C)

ตัวอย่างตารางการตอบกลับเมื่อเกิดข้อผิดพลาด (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