『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 1743|回复: 5

[经验分享] 【node-red长期稳定】云麦好轻app体重数据接入HA

[复制链接]

7

主题

162

帖子

1242

积分

论坛技术达人

积分
1242
金钱
1075
HASS币
60
发表于 2023-5-8 15:40:19 | 显示全部楼层 |阅读模式
本帖最后由 arthurfsy 于 2023-8-7 12:56 编辑

家里有台云麦好轻mini,之前在论坛里也发现有大佬通过ESP32接入体重数据的教程,但尝试后失败告终。
为了导出历史的体重数据+实时更新已称重数据,我找了大佬逆向了好轻的登录,然后自己通过Node-Red实现整个数据获取、保存的流程。对逆向感兴趣的朋友可以查看各个function里的说明
1.体重展示.png

一.本flow功能:
1.无需抓包:可直接输入账号、密码(加密后)获取历史称重数据(体重、代谢、骨密度等等,但是默认只显示体重信息),可配合卡片展示(apexcharts-card注:这个卡片的实现也参考了这里,但是修改了一些参数。
2.可将数据保存为csv格式(相当于导出,以备其他使用需求)
3.可清空原有csv数据(如果发现数据不对,可先清空再重新运行)

二.使用方法:
1. 下载附件的flow,可通过笔记本(如nodepad--)批量将yourname替换为你自己的名字
注:该步骤只是便于你管理自己的体重,且可通过这个方式,实现多人体重的展示(修改后再次导入,这样就有2份流程系统,但是对应不同人的流)

2. 安装以下节点:
crypto-wz
node-red-contrib-spreadsheet-in
node-red-node-base64
node-red-contrib-moment
node-red-contrib-home-assistant-websocket


3. 参考flow里的顺序,依次运行1-6步骤,第7步骤按需运行

三.各步骤额外说明
1.构建参数1.1账号:打开“输入账号、密码”这个function节点,将13800138000替换为你自己的手机号

var account = "13800138000"  //输入账号(手机号)

1.2密码:打开“输入账号、密码”这个function节点,将下面引号的内容替换为你自己的加密结果(参考下面1.3步骤)
var password_RSA_orgin = "U67MKv7/h3aR5Z6nIVAMGWbqG4h0KrzHS5SFOv75jbTU7VMtIIPWcxO6tJn/DcI26I+dDUlH9Sc7P52Pws9DMg=="


1.3需要打开cyberchef对应的加密网址,将input的“123456”改为你自己的密码,然后复制下面的output结果(固定为88位字符)
https://cyberchef.org/#recipe=RSA_Encrypt('-----BEGIN%20PUBLIC%20KEY-----%5CnMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJKcIu%2BiATe0QPGIVDzMYsMA6kH9FcY9%5CnOr0I4WJJfEgw/N2e0Us/9JVV1CwdV6W2XIl4KqTeH3ydw6tagagPkSsCAwEAAQ%3D%3D%5Cn-----END%20PUBLIC%20KEY-----','RSAES-PKCS1-V1_5','SHA-1')To_Base64('A-Za-z0-9%2B/%3D')&input=MTIzNDU2

2.模拟登录
通过这个步骤来构建sign参数,用以获取userId、refreshToken,这两个值每个账号都是固定的,仅需运行一次即可(可通过debug节点查看已获取的数据)

3.动态获取accessToken
设置每1小时登陆一次,其中sign加密的方式与模拟登录的逻辑相同


4.获取历史体重数据
只能手动触发一次,否则会重复。第一次执行后,会在/data目录下生成weight.yourname.csv文件(yourname为你修改后的名字),
实际的存储路径可参考下面:

4.1如果NR是docker容器部署的,路径可能如下:
主机/存储卷目录(实际文件存放目录):/www/server/docker/volumes/node_red_data/_data    
挂载路径(容器内部路径):/data
即NR节点是/data/weight.yourname.csv,实际存储路径为/www/server/docker/volumes/node_red_data/_data/weight.yourname.csv(仅为示意,具体为你自己的地址、名称
2.储存目录.png

4.2如果NR是虚拟机加载项部署的,路径可能如下:
/config/node-red/data/weight.<font color="#ff0000">yourname</font>.csv

5.获取近N天体重数据逐项对比,只入库新体重(默认设置为获取近10天的数据进行比较,如果你的称重间隔比较长,可设置大一点),更新成功后,会在weight.yourname.csv文件里新增新的N行数据

6.查看已入库体重
每5分钟执行1次,同时也是配合在HA的体重展示

7.清空功能慎用
如果打开csv格式,发现重复数据较多。可删除后再次进行1-6的步骤

三.卡片代码
单人卡片代码分享(需安装apexcharts-card),然后将sensor.yourname_weight改为你的名字
type: custom:apexcharts-card
experimental:
  brush: true
header:
  show: true
  title: 体重记录
all_series_config:
  stroke_width: 1
graph_span: 3650d
brush:
  selection_span: 180d
series:
  - entity: sensor.yourname_weight
    data_generator: |
      return entity.attributes.createtime.map((item, index) => {
       return [new Date(item).getTime(), entity.attributes.weight[index]];
      });
    extend_to: false
    float_precision: 2
    name: yourname1体重
    show:
      in_brush: true
      in_chart: true
locale: zh-cn

多人卡片代码分享(需安装apexcharts-card),然后将sensor.yourname_weight、sensor.yourname2_weight改为你的名字。
如果人数超过2人,可自行添加 从 - entity: sensor.yourname2_weight到in_chart: true之间的行数,并修改- entity: sensor.yournameX_weight(X为第X个)
type: custom:apexcharts-card
experimental:
  brush: true
header:
  show: true
  title: 体重记录
all_series_config:
  stroke_width: 1
graph_span: 3650d
brush:
  selection_span: 180d
series:
  - entity: sensor.yourname_weight
    data_generator: |
      return entity.attributes.createtime.map((item, index) => {
       return [new Date(item).getTime(), entity.attributes.weight[index]];
      });
    extend_to: false
    float_precision: 2
    name: yourname1体重
    show:
      in_brush: true
      in_chart: true
  - entity: sensor.yourname2_weight
    data_generator: |
      return entity.attributes.createtime.map((item, index) => {
       return [new Date(item).getTime(), entity.attributes.weight[index]];
      });
    extend_to: false
    float_precision: 2
    name: yourname2体重
    show:
      in_brush: true
      in_chart: true
locale: zh-cn





好轻体重数据获取.json (81.8 KB, 下载次数: 31)








评分

参与人数 1金钱 +20 HASS币 +20 收起 理由
+ 20 + 20 高手,这是高手!

查看全部评分

回复

使用道具 举报

7

主题

162

帖子

1242

积分

论坛技术达人

积分
1242
金钱
1075
HASS币
60
 楼主| 发表于 2023-8-7 12:46:43 | 显示全部楼层
本帖最后由 arthurfsy 于 2023-8-7 12:57 编辑
zza774886285 发表于 2023-8-6 20:46
这几个节点,我怎么找不到

安装以下节点即可,已补充到前面介绍:
crypto-wz
node-red-contrib-spreadsheet-in
node-red-node-base64
node-red-contrib-moment
node-red-contrib-home-assistant-websocket




回复

使用道具 举报

1

主题

91

帖子

738

积分

高级会员

Rank: 4

积分
738
金钱
647
HASS币
0
发表于 2023-5-8 16:33:54 | 显示全部楼层
有点高深
回复

使用道具 举报

6

主题

83

帖子

1888

积分

金牌会员

Rank: 6Rank: 6

积分
1888
金钱
1805
HASS币
0
发表于 2023-8-6 20:46:29 | 显示全部楼层
这几个节点,我怎么找不到
QQ截图20230806204551.png
回复

使用道具 举报

0

主题

16

帖子

104

积分

注册会员

Rank: 2

积分
104
金钱
88
HASS币
0
发表于 2023-11-1 16:46:11 | 显示全部楼层
大佬,
这个流是获取历史数据,并不是直接接入体重计吗?
回复

使用道具 举报

7

主题

162

帖子

1242

积分

论坛技术达人

积分
1242
金钱
1075
HASS币
60
 楼主| 发表于 2023-11-6 10:37:56 | 显示全部楼层
neallu22 发表于 2023-11-1 16:46
大佬,
这个流是获取历史数据,并不是直接接入体重计吗?

是的,只是获取你称重并成功上传到好轻服务器的数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-23 23:54 , Processed in 0.060129 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表