设备心跳上报接口文档

注意: 本接口用于设备定期向服务器上报在线状态。若服务器端表不存在,接口会自动创建表。

接口详情

POST /apipy/api/heartbeat/

请求参数 (JSON Body)

字段名 类型 必填 说明
device_name String 是 设备唯一标识名称(如 "Android_01", "Camera_A")
timestamp Number 否 当前时间戳(支持秒或毫秒)。若不传,服务器将使用接收请求的时间。

响应示例

{
    "code": 200,
    "data": {
        "device_name": "Android_01",
        "status": "online",
        "last_heartbeat": "2023-10-27 10:30:05"
    },
    "message": "Heartbeat received"
}

代码示例

TypeScript / JS
Android (Kotlin)
cURL

TypeScript / JavaScript (Fetch API)


/**
 * 发送心跳包
 * @param deviceName 设备名称
 * @param serverUrl 服务器地址 (例如 https://haoguozhi.com)
 */
async function sendHeartbeat(deviceName: string, serverUrl: string = ''): Promise {
    const url = `${serverUrl}/apipy/api/heartbeat/`;
    
    const payload = {
        device_name: deviceName,
        timestamp: Date.now() // 自动处理毫秒
    };

    try {
        const response = await fetch(url, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(payload)
        });

        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }

        const result = await response.json();
        console.log('Heartbeat success:', result);
    } catch (error) {
        console.error('Heartbeat failed:', error);
    }
}

// 调用示例
// setInterval(() => sendHeartbeat('Web_Client_01'), 10000); // 每10秒发送一次
                

Android (Kotlin + OkHttp)

需添加依赖: implementation("com.squareup.okhttp3:okhttp:4.11.0")


import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.IOException

class HeartbeatManager {
    private val client = OkHttpClient()
    private val jsonMediaType = "application/json; charset=utf-8".toMediaType()

    fun sendHeartbeat(deviceName: string, serverUrl: string = "https://haoguozhi.com") {
        val url = "$serverUrl/apipy/api/heartbeat/"
        
        // 构建 JSON
        val jsonObject = JSONObject()
        jsonObject.put("device_name", deviceName)
        jsonObject.put("timestamp", System.currentTimeMillis())

        val requestBody = jsonObject.toString().toRequestBody(jsonMediaType)

        val request = Request.Builder()
            .url(url)
            .post(requestBody)
            .build()

        // 异步请求
        client.newCall(request).enqueue(object : okhttp3.Callback {
            override fun onFailure(call: okhttp3.Call, e: IOException) {
                println("Heartbeat failed: ${e.message}")
            }

            override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
                response.use {
                    if (!response.isSuccessful) {
                        println("Unexpected code $response")
                    } else {
                        println("Heartbeat success: ${response.body?.string()}")
                    }
                }
            }
        })
    }
}

// 调用示例
// val manager = HeartbeatManager()
// manager.sendHeartbeat("Android_Device_01")
                

cURL (命令行)


curl -X POST https://haoguozhi.com/apipy/api/heartbeat/ \
     -H "Content-Type: application/json" \
     -d '{
           "device_name": "Terminal_User",
           "timestamp": 1698373805
         }'