You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指定hono-ttd后设备仍不等待响应——ECLIPSE HONO问题咨询

Eclipse Hono 问题排查:hono-ttd 不生效与 hono-cmd-req-id 来源

一、hono-ttd=60 设备未等待指令直接返回的原因及解决

你的请求存在两个核心问题:

  1. 请求体不符合遥测数据格式
    你发送的curl请求URL是/telemetry(遥测上传端点),但请求体却是Ditto的modify命令格式,这会让Hono适配器误判请求类型,直接返回命令响应而非等待下行指令。遥测数据应该是纯业务数据,比如:

    {"temperature": 45}
    

    正确的遥测上传命令应该是:

    curl -i -u demo-device@org.eclipse.packages.c2e:demo-secret \
      -H 'application/json' \
      --data-binary '{"temperature":45}' \
      http://${HTTP_ADAPTER_IP}:${HTTP_ADAPTER_PORT_HTTP}/telemetry?hono-ttd=60
    
  2. hono-ttd 是「最大等待时间」而非「强制等待」
    hono-ttd指定的是设备愿意等待下行命令的最长秒数,如果在等待期间没有针对该设备的下行命令,适配器会提前返回确认响应(不会等满60秒)。如果要验证等待逻辑,需要在设备发送遥测后,立即通过Hono北向接口给该设备下发一条命令,此时适配器会在响应中携带命令内容,无需等满超时时间。

二、hono-cmd-req-id 的获取方式

hono-cmd-req-id是设备接收下行命令时从响应头中获取的:

  • 当设备通过HTTP长轮询(或带hono-ttd的遥测/事件上传)收到下行命令时,适配器返回的响应头中会包含hono-cmd-req-id字段,同时响应体就是命令内容。
  • 设备在返回命令响应时,需要将这个ID放到请求头hono-cmd-req-id中,发送到/command/res端点,以此关联命令与响应。

举个示例:

  1. 设备收到下行命令的响应(来自适配器):
    HTTP/1.1 200 OK
    hono-cmd-req-id: abc123
    hono-command: modify
    content-type: application/vnd.eclipse.ditto+json
    ...
    
  2. 设备发送命令响应时的curl命令:
    curl -i -u demo-device@org.eclipse.packages.c2e:demo-secret \
      -H 'application/json' \
      -H 'hono-cmd-req-id: abc123' \
      --data-binary '{"status": 200, "payload": {"result": "success"}}' \
      http://${HTTP_ADAPTER_IP}:${HTTP_ADAPTER_PORT_HTTP}/command/res
    

内容的提问来源于stack exchange,提问作者Antonio Landolfi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:50:46