HTTP协议接入
物联网平台支持以HTTP协议接入设备数据。设备使用HTTP协议接入物联网平台,需要先进行设备认证,获取设备的token,携带token进行数据上报。
物联网平台
- 适合单纯的数据上报场景,数据上行接口传输的数据大小限制为128 KB。
- Topic规范和MQTT的Topic定义一致,可以复用MQTT连接通信的Topic。使用HTTP协议连接,上报数据请求:
${endpoint}/api/iot-link/auth/v1/${instanceId}/publish?topic=${topic}
(注意topic
要进行URL编码)。 - HTTPS协议接入仅支持POST请求方法。
- 设备认证返回的token会在一定周期后失效。目前token有效期是7天,请务必考虑token失效逻辑的处理。
接入流程
接入流程主要包含:进行设备认证以获取设备token、使用获取的token进行持续地数据上报。
认证设备,获取设备的token。
认证设备请求:
POST /api/iot-link/auth/v1/${instanceId}/device-auth HTTP/1.1 Host: ${YourEndpoint} Content-Type: application/json Content-Length: 202 body: {"productId":"C1MflY****","deviceId":"6AZCgX****","clientId":"12345","timestamp":"789","sign":"2f70411366f****","signmethod":"hmacmd5","version":"default"}
参数 说明 Method 请求方法,只支持POST方法。 URL URL地址,只支持HTTPS,取值:/auth。 Host HTTP接入地址 Content-Type 设备发送给物联网平台的上行数据的编码格式,目前只支持application/json。若使用其他编码格式,会返回参数错误。 Content-Length HTTP消息体body的传输长度。重要对于字段Content-Length,HTTP/1.1及之后版本协议中,默认已携带,HTTP/1.0及之前版本协议中,默认未携带。使用HTTP协议认证设备时,必须传入字段Content-Length。字段Content-Length值必须与body传输长度完全一致,否则无法正确解析body内容,设备认证会失败。 body 设备认证信息。JSON数据格式。具体信息,请参见下表。 字段名称 是否必需 说明 productId 是 设备所属产品的productId。可从物联网平台控制台对应实例下的设备详情页面获取。 deviceId 是 设备ID。可从物联网平台控制台对应实例下的设备详情页面获取。 clientId 是 客户端ID。长度为64字符内,建议以MAC地址或SN码作为clientId。 timestamp 否 时间戳。校验时间戳15分钟内的请求有效。时间戳格式为数值,值为自GMT 1970年01月01日0时0分到当前时间点所经过的毫秒数。 sign 是 签名。签名计算格式为 hmacmd5(DeviceSecret,content)
。其中,content为将所有提交给服务器的参数(除version、sign和signmethod外),按照英文字母升序,依次拼接排序(无拼接符号)的结果。签名示例:假设clientId = 127.0.0.1,deviceId = http_test,productId = a1FHTWxQ,timestamp = 1567003778853,signmethod = hmacmd5,deviceSecret = 89VTJylyMRFuy2T3sywQGbm5Hmk1,签名计算为:hmacmd5("89VTJylyMRFuy2T3sywQGbm5Hmk1****","clientId127.0.0.1deviceIdhttp_testproductIda1FHTWxQ****timestamp1567003778853").toHexString();
其中,toHexString()
是将计算结果二进制数据的每个byte按4 bit转化为十六进制字符串,大小写不敏感。例如,计算结果byte数组是:[60 68 -67 -7 -17 99 30 69 117 -54 -58 -58 103 -23 113 71],转换后得到的字符串为:3C44BDF9EF631E4575CAC6C667E97147。signmethod 否 算法类型,支持hmacmd5和hmacsha1。若不传入此参数,则默认为hmacmd5。 version 否 版本号。若不传入此参数,则默认default。 设备认证返回结果示例:
{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiI2QVpDZ1gxMTA3NjczNzQzNzg3MzUyMDY0IiwiZGV2aWNlSWQiOiI2QVpDZ1gxMTA3NjczNzQzNzg3MzUyMDY0IiwicHJvZHVjdElkIjoiQzFNZmxZeDVhTGtNd0ZMek5Nd2E5M2l1ZCIsImNsaWVudElkIjoiMTIzNDUiLCJpYXQiOjE2ODY4MzMyNDcsImV4cCI6MTY4Njg0MDQ0N30.JcuyyPqYMSgwUhXxGLClb6Ev7Th31uPbe6ccgEo0a7w" }
说明
- 请将返回的token值缓存到本地。
- 每次上报数据时,都需要携带token信息。如果token失效,需要重新认证设备获取token。
上报数据。
设备发送数据到某个Topic,只支持发布权限的Topic,支持自定义Topic。
例如:Topic为
sys/{product_id}/{device_id}/thing/properties/up
,假设当前设备ID为device123,产品的ProductKey为a1GFjLP****,那么您可以调用/api/iot-link/auth/v1/${instanceId}/publish?topic=sys%2Fa1GFjLP****%2Fdevice123%2Fthing%2Fproperties%2Fup
地址来上报数据。上报数据请求:
POST /api/iot-link/auth/v1/${instanceId}/publish?topic=${topic} HTTP/1.1 Host: ${YourEndpoint} Authorization: Bearer ${token} Content-Type: application/octet-stream Content-Length: 53 body: ${your_data}
参数 说明 Method 请求方法,只支持POST方法。 URL /api/iot-link/auth/v1/${instanceId}/publish?topic=${topic}
。其中,变量${topic}
需替换为数据发往的目标Topic,并且需要进行URL编码Host Endpoint地址。 Authorization Bearer ${token}
,token取值为调用设备认证接口auth返回的token值。Content-Type 设备发送给物联网平台的上行数据的编码格式,目前仅支持application/octet-stream。若使用其他编码格式,会返回参数错误。 Content-Length HTTP消息实体的传输长度。 body 发往${topic}的数据内容。数据内容的格式参考MQTT的Topic定义 返回结果:
上报成功时,返回200状态码,失败时,若请求报文中携带的
ack
值为1,则返回具体失败原因,例如:{ "id": "519acb72-29a9-4a51-9317-b1eeb811481e", "code": 460, "message": "[TSLParser] 6AZCgX1107673743787352064:properties:#0000:CurrentTemperature: the float must between 2.1 ~ 38.0" }
最后修改时间: 2 年前