所有分类
  • 所有分类
  • 攻略

软路由体重趋势:Withings API webhook设置

<h1>软路由体重趋势:Withings API webhook设置全攻略,顺便聊聊代理ip不掉线的小秘密</h1>

<h2>为什么软路由要盯体重?Withings API webhook能干嘛</h2>
家里那台刷了OpenWrt的小盒子,除了跑旁路由、去广告,其实还能把全家的体重曲线偷偷画出来。Withings(以前叫Nokia Health)电子秤每次上称,官方会先写一份数据到法国服务器,再慢悠悠同步到App。软路由如果本地监听webhook,就能在数据“出墙”前直接截胡,丢给InfluxDB+Grafana,秒出折线图,既省流量又防隐私裸奔。想玩这一步,先得把Withings开发者账号、反向代理、SSL证书、代理IP全串起来,下面一步步拆给你看。

<h2>10分钟开通Withings API:从“创建应用”到拿到Client ID</h2>

  1. 打开withings.com/en/partner,用家里主账号登录,点“Create an application”,名字随便写,比如“home_weight”,回调地址填https://你的域名/withings/callback,注意必须https,自签证书会被拒。
  2. 创建完马上能看到Client ID、Secret,先复制到记事本,等会儿软路由脚本要用。
  3. 权限勾选“user.metrics”,别手滑选“user.activity”,否则 webhook 推送里没体重。
  4. 把测试账号加到Sandbox,点“Authorize”走一遍OAuth,拿到第一组code,换token,确认200 OK,这一步就及格。

<h2>软路由端配置:OpenWrt+Nginx反向代理+自动更新SSL</h2>
软路由内存小,直接装Nginx-ssl,acme.sh用DNS API模式申请证书,省得80端口被占用。配置文件里加一段:

location /withings/webhook {
    proxy_pass http://127.0.0.1:9000/hook;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

重启Nginx后,外网就能POST到软路由。Withings服务器在法国,国内家庭宽带NAT3,IP经常变, webhook 回来分分钟超时,所以下面必须上代理IP。

<h2>代理IP怎么选:住宅轮换还是云主机固定端口?</h2>
Withings对IP白名单不严格,但会风控频繁变更的IDC段。实测思路:

  • 软路由里开OpenClash,把*.withings.com走“代理ip池”出口,池子里放3-5条住宅轮换IP,10分钟换一次,TTL足够撑住OAuth和webhook双向握手。
  • 如果你家宽带是CGNAT,没有公网IPv4,那就买一条“静态住宅代理ip”,让Nginx监听443,反代目标填本地9000,这样法国POST先到静态住宅IP,再回落到软路由,延迟180 ms左右,丢包0,比打洞稳定。
  • 预算有限?云主机单IP也能跑,记得把TTL拉到300秒,并在Withings后台把出网IP加到白名单,防止被OAuth踢掉。

<h2>webhook验证与InfluxDB落库:一行Python不踩坑</h2>
Withings推送是JSON+URL签名,用hmac sha256校验,key就是Client Secret。GitHub有现成脚本,改三行就能跑:

SECRET = '你的Client Secret'
def verify(sig, body):
    return hmac.new(SECRET.encode(), body, hashlib.sha256).hexdigest() == sig

校验通过后,把weight、date、userid写进InfluxDB,measurement叫“bodyfat”,tag写“member:爸爸/妈妈/狗”,Grafana模板选“Weight Tracker”,折线颜色按BMI区间自动变红变绿,全家谁偷偷吃宵夜一目了然。

<h2>常见翻车点:token过期、代理IP被限速、SSL证书忘了续</h2>

  1. Withings的access_token只有3小时,refresh_token一年,脚本里记得try/except自动刷新,否则半夜webhook 401,体重曲线直接腰斩。
  2. 住宅代理IP虽然稳,但流量超了会被限速到1 Mbps, webhook 回来POST体重数据才几KB,不影响,可OAuth跳转如果拖了CSS就炸,所以把静态资源放本地,别让代理背锅。
  3. acme.sh续证书默认凌晨2点,软路由如果那时断网,证书失败,Nginx重启不了,webhook 进不来,曲线断更。保险做法:写个crontab每周手动renew一次,失败就发Telegram通知。

<h2>进阶玩法:把体重曲线推送到微信、HomeAssistant自动开灯</h2>
体重涨了2 kg?Python判断后调用HomeAssistant API,卫生间灯自动调成“冷白光”,提醒你该节食。再配个Server酱,把曲线图直接推送到微信,丈母娘都能看懂。整套跑下来,软路由摇身一变家庭健康中心,比纯跑SS有趣多了。

<h3>结语:软路由+Withings API+稳定代理IP,体重数据不再裸奔</h3>
把上面步骤串好,软路由就能在本地实时画体重趋势,既保护隐私又免翻墙同步。关键点:域名、SSL、反向代理、住宅代理IP一个不能少,脚本记得加异常重试,基本就能长期稳跑。祝你早日把全家体重曲线卷成一条直线。

采购代理IP请添加微信客户经理:x31471626

阅读全文
原文链接:https://sk5ip.com.cn/hangyezixun/ruanluyoutizhongqushiwithingsa/,转载请注明出处~~~
0
分享海报

评论0

请先
显示验证码

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码