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

rtl_433输出JSON经管道传curl POST无响应,求排查方法

解决rtl_433 JSON输出无法通过curl POST到服务器的问题

可能的原因及对应解决方案

1. 输出缓冲问题(最常见)

rtl_433输出到管道时默认采用全缓冲模式,不会实时将数据传递给curl,而是要等缓冲区填满才会输出(但输出到终端是行缓冲,所以你能看到实时内容)。这会导致curl一直拿不到数据发送给服务器。

解决方法:

  • 用stdbuf强制rtl_433使用行缓冲输出:
    stdbuf -oL rtl_433 -F json | curl -H "Content-Type: application/json" -X POST -d @- 123.123.123.123:5124
    
    -oL参数指定标准输出采用行缓冲。
  • 或者用unbuffer(需先安装expect包:sudo apt install expect):
    unbuffer rtl_433 -F json | curl -H "Content-Type: application/json" -X POST -d @- 123.123.123.123:5124
    

2. 过滤非JSON输出

rtl_433启动时会输出初始化日志、版本信息等非JSON内容,这些无效数据会导致curl发送的请求不符合服务器的JSON格式要求,被服务器丢弃。

解决方法:用grep只保留以{开头的有效JSON行:

stdbuf -oL rtl_433 -F json | grep '^{' | curl -H "Content-Type: application/json" -X POST -d @- 123.123.123.123:5124

3. 每条JSON单独发送请求

如果服务器期望每次接收单条JSON数据,而不是多条JSON拼接的内容,上面的命令会因格式错误被拒收。此时需要对每行JSON单独发起POST请求:

stdbuf -oL rtl_433 -F json | grep '^{' | while read -r line; do
  curl -H "Content-Type: application/json" -X POST -d "$line" 123.123.123.123:5124
done

4. 验证JSON输出的有效性

先单独运行rtl_433 -F json,确认每一行都是合法的JSON格式(无语法错误如多余逗号、未闭合括号)。也可以用jq工具验证:

rtl_433 -F json | jq .

如果jq报错,说明输出的JSON存在格式问题,需要检查传感器数据或rtl_433配置。


内容的提问来源于stack exchange,提问作者Garry Pettet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:12:57