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

使用curl读取本地文件配置motion/motioneye text_left失败求助

天气数据接入Motion/MotionEye的问题解决

问题背景

已确认可以通过硬编码文本的方式,成功调用Motion API将文本嵌入图片/延时摄影:

curl http://192.168.0.168:7999/1/config/set?text_left="TESTING_PLEASE_STANDBY"

但本地Camdata.txt文件中的天气数据(内容为:Temp: 7.2°C - Press: 973.9 hPa - Hum: 88% - Wind: 5 mph(SW) - Rain: 2.3 mm - UV Index: 0.0 - SolarRad: 0 W/m² - CloudBase: 759 ft)无法通过curl传入Motion,尝试多种命令均失败:

# 尝试1:使用--data读取文件
curl --data "@Camdata.txt" http://192.168.0.168:7999/1/config/set?text_left
# 错误输出:curl: (52) Empty reply from server

# 尝试2:指定text_left为空值后传入文件
curl --data "@Camdata.txt" http://192.168.0.168:7999/1/config/set?text_left=
# 错误输出:curl: (52) Empty reply from server

# 尝试3:错误的文件内容引用方式
curl -d "$(Camdata.txt)" http://192.168.0.168:7999/1/config/set?text_left=
# 错误输出:-bash: Camdata.txt: command not found; curl: (52) Empty reply from server

参考REST API代码

提供的参考代码逻辑是拉取外部API数据后编码传入,我们可以复用其编码和请求方式:

TEXTLEFT=`curl --insecure --silent http://localhost:8181/weather/api/realtime/latest/metar`
TEXTLEFT="${TEXTLEFT// /%20}" # 替换空格为URL编码%20
curl --silent "http://localhost:8080/101/config/set%3Ftext_left=$TEXTLEFT"

解决方案

核心逻辑是读取本地文件内容到变量,对空格进行URL编码,再通过GET请求的查询字符串传入(Motion的该API仅接受GET参数,不支持POST的--data方式)。

分步命令

# 1. 读取Camdata.txt内容到变量,自动去除末尾换行符
TEXTLEFT=$(<Camdata.txt)
# 2. 将文本中的所有空格替换为URL编码的%20
TEXTLEFT="${TEXTLEFT// /%20}"
# 3. 调用Motion API传入编码后的文本
curl --silent "http://192.168.0.168:7999/1/config/set?text_left=$TEXTLEFT"

单行简化命令

如果需要一次性执行,可合并为:

curl --silent "http://192.168.0.168:7999/1/config/set?text_left=$(sed 's/ /%20/g' Camdata.txt | tr -d '\n')"

说明:sed 's/ /%20/g' 实现空格替换为%20,tr -d '\n' 去除文件末尾的换行符,避免传入无效字符。

内容的提问来源于stack exchange,提问作者Ian Harvie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:45:34