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

 找回密码
 立即注册
楼主: XCray

[修仙教程] 【ESPHome】蓝牙体重秤/体脂秤接入思路:云麦好轻mini 2S为例

[复制链接]

16

主题

151

帖子

1070

积分

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
914
HASS币
30
发表于 2022-1-2 11:57:44 | 显示全部楼层
本帖最后由 tangli159 于 2022-1-2 12:11 编辑

楼主你好,按照你的帖子逐步操作我得到了一些数据,与您的大致一样,但还是有一些不同。可以麻烦您帮忙看看么?
我的体脂称是云麦mini3。

首先增加on_ble_advertise自动化,再次称重后得到的数据如下。UUID和data都没有以0x开头了,UUID之间还有个“:”。
[09:30:14][D][ble_adv:157]: New BLE device
[09:30:14][D][ble_adv:158]:   address: AA:BB:CC:XX:YY:ZZ
[09:30:14][D][ble_adv:159]:   name: 
[09:30:14][D][ble_adv:160]:   Advertised service UUIDs:
[09:30:14][D][ble_adv:162]:     - 13:20
[09:30:14][D][ble_adv:164]:   Advertised service data:
[09:30:14][D][ble_adv:168]:   Advertised manufacturer data:
[09:30:14][D][ble_adv:170]:     - YY:ZZ: (length 14)



其次,打印出广播(已经删掉部分重复数据),根据体重105.9斤,59.25kg进行解密数据,秤默认显示斤。

广播数据为   YY:ZZ:XX.CC.BB.AA.08.52.15.DD.EE.FF.GG.00.00.HH
YY:ZZ:XX.CC.BB.AA为MAC地址;
08.52.15为固定数字,不知道什么意思,称重时抓包app也没有找到085215相关数字,16进制转化后也没有,估计是特定标志;
DD为打开开关后的称重次数(00为第一次);
EE为本次称重第几次读数,为可信度标示;
FF:GG为体重kg数*100;
00.00和楼主推测的抗阻值肯定不一样,因为从头到尾多次测量没有改变,可能就是占位数的;
HH下秤时和DD一致,代表本次打开开关后的称重次数;HH称重时有变化,但不知道什么意思,如果是抗阻的话,转换成10进制就是只有100-200左右?
#校准
[10:22:18][D][ble_adv:152]:   Advertised manufacturer data:
[10:22:18][D][ble_adv:154]:     - YY:ZZ:XX.CC.BB.AA.08.52.15.00.00.00.00.00.00.00 (14)
#第一次读数
[10:22:23][D][ble_adv:152]:   Advertised manufacturer data:
[10:22:23][D][ble_adv:154]:     - YY:ZZ:XX.CC.BB.AA.08.52.15.00.01.14.B4.00.00.A1 (14)

[10:22:24][D][ble_adv:152]:   Advertised manufacturer data:
[10:22:24][D][ble_adv:154]:     - YY:ZZ:XX.CC.BB.AA.08.52.15.00.01.14.AF.00.00.BA (14)
#第二次读数
[10:22:26][D][ble_adv:152]:   Advertised manufacturer data:
[10:22:26][D][ble_adv:154]:     - YY:ZZ:XX.CC.BB.AA.08.52.15.00.02.14.AF.00.00.B9 (14)
#第三次读数
[10:22:33][D][ble_adv:152]:   Advertised manufacturer data:
[10:22:33][D][ble_adv:154]:     - YY:ZZ:XX.CC.BB.AA.08.52.15.00.03.14.AF.00.00.B8 (14)
#下秤
[10:22:34][D][ble_adv:152]:   Advertised manufacturer data:
[10:22:34][D][ble_adv:154]:     - YY:ZZ:XX.CC.BB.AA.08.52.15.00.00.00.00.00.00.00 (14)


以及不知道上面的改变对您给出的压缩包里面的代码有无影响呢?纯小白,啥也不懂。如果有影响,需要怎么修改呢?
cpp文件第48行
  if (!service_data.uuid.contains(0xZZ, 0xYY)) { //此处,UUID为MAC地址后两个字节,可改为自动截取,逆序
这里是否需要改为
  if (!service_data.uuid.contains(YYZZ)) { //此处,UUID为MAC地址后两个字节,可改为自动截取,逆序

以及其他关于数字的代码是否要修改呢?如<uint8_t>,data[8]之类的……
外置文件夹放置路径是不是\\192.168.123.242\config\esphome\esp32s\src\esphome\components呢?

根据esphome官网信息,我是否应该在/esphome文件夹里面再新建一个my_components呢?还是就用上面的路径就可以了?

Example of local components
Given the above example of my_components, the folder structure must look like:

<CONFIG_DIR>
├── node1.yaml
├── node2.yaml
└── my_components
    ├── my_component1
    │   ├── __init__.py
    │   ├── component1.cpp
    │   ├── component1.h
    │   └── sensor.py
    └── my_component2
        ├── __init__.py
        ├── component2.cpp
        ├── component2.h
        └── switch.py



期待您能解答我的疑问,谢谢。



回复

使用道具 举报

16

主题

151

帖子

1070

积分

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
914
HASS币
30
发表于 2022-1-6 10:40:50 | 显示全部楼层
您好,我按照您的教程进行到了最后一步,但始终会报错,请问这是怎么回事呢,可以帮忙看看么?谢谢。
我的设备是N1 hassio 最新版本, 安可信esp32s nodemcu-32 v.1.3 2821。
2022-01-06_101404.png
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2022-1-6 20:23:43 | 显示全部楼层
tangli159 发表于 2022-1-6 10:40
您好,我按照您的教程进行到了最后一步,但始终会报错,请问这是怎么回事呢,可以帮忙看看么?谢谢。
我的 ...

1. 怀疑你程序代码的保存路径没弄对
2. 如果体重秤有体脂功能的话,怀疑称重时没有光脚
3. 数据格式好像和我的秤是一样的,应该好解决
回复

使用道具 举报

16

主题

151

帖子

1070

积分

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
914
HASS币
30
发表于 2022-1-7 17:19:18 | 显示全部楼层
本帖最后由 tangli159 于 2022-1-7 17:30 编辑
XCray 发表于 2022-1-6 20:23
1. 怀疑你程序代码的保存路径没弄对
2. 如果体重秤有体脂功能的话,怀疑称重时没有光脚
3. 数据格式好像 ...

1.看了您发的另一个esphome1.18.0的帖子,我用的hassio,不过esphome新版本已经不用这版本号,改用日期。所以我用的最新日期版本号。文件夹放在/homeassistant/config/esphome/,应该和您的帖子说的一致。并且一开始我不清楚放在哪里,所以esphome相关的各层级文件夹都有放过试试。 2022-01-07_165809.png
2.我用的云麦mini3,有称重功能,测量的时候也有光脚。我是女生,体重较轻,怕称不出差距,还拿了一些重物来测量才凑上100斤的,结果抗阻还是不足200,要么就是这不是抗阻?或得加个0?
3.数据格式基本上差不多,就是MAC地址的后两位构成的地址没有0x,不知道有没有影响。

esphome 的yaml文件我就是照抄的您的内容,改成了自己的Mac地址,cpp文件只修改了我的地址。
external_components:
  - source: yunmai_scale
esp32_ble_tracker:
sensor:
  - platform: yunmai_scale
    mac_address: '我的地址'
    weight:
      name: "Yunmai Scale Weight"
    impedance:
      name: "Yunmai Scale Impedance"


回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2022-1-7 19:25:34 | 显示全部楼层
tangli159 发表于 2022-1-7 17:19
1.看了您发的另一个esphome1.18.0的帖子,我用的hassio,不过esphome新版本已经不用这版本号,改用日期。所 ...

女生啊!那我给你详细说说

1. esphome的external_components路径,是给所有外部组件用的,我弄的这个yunmai_scale只是其一,应该保存在指定路径的下一级,相当于官网示例中的“my_component1”。yaml里配置的source后面,官网示例中应为“my_components”
https://esphome.io/components/external_components.html#local

2. 称重功能当然得有了 光脚是采集体脂数据的要求(其实采集的是人体的阻抗)。
我猜测咱俩用的两个型号阻抗数据的位置应该一样(就是你说的00.00)、最后一个字节我也没仔细验证过,猜测是校验和。按说阻抗数值一个字节是不够用的。

你用云麦自己的app能看到体脂数据吗?看看能否进一步推算一下

3. 十六进制数值前面的0x一般是表达用的,不是问题。

4. 按说只需要修改yaml和cpp里的mac地址就行了。
回复

使用道具 举报

16

主题

151

帖子

1070

积分

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
914
HASS币
30
发表于 2022-1-8 10:47:52 | 显示全部楼层
XCray 发表于 2022-1-7 19:25
女生啊!那我给你详细说说

1. esphome的external_components路径,是给所有外部组件用的,我弄的这个y ...

谢谢您的耐心解答。
1. esphome的external_components路径,是给所有外部组件用的,我弄的这个yunmai_scale只是其一,应该保存在指定路径的下一级,相当于官网示例中的“my_component1”。yaml里配置的source后面,官网示例中应为“my_components”
https://esphome.io/components/external_components.html#local

2. 称重功能当然得有了 光脚是采集体脂数据的要求(其实采集的是人体的阻抗)。
我猜测咱俩用的两个型号阻抗数据的位置应该一样(就是你说的00.00)、最后一个字节我也没仔细验证过,猜测是校验和。按说阻抗数值一个字节是不够用的。

你用云麦自己的app能看到体脂数据吗?看看能否进一步推算一下

3. 十六进制数值前面的0x一般是表达用的,不是问题。

4. 按说只需要修改yaml和cpp里的mac地址就行了。
1.确实是我没理解到位,虽然我之前就查阅了官网的例子,但是理解有误,现在修改后不会报错,可以正常安装了。
2.一不小心打错啦,是有体脂功能。之前不知道为啥最后几位读出来确实就是00.00。刚试了已经可以读出来了。0242换算十进制就是578,这个数值是抗阻合理么?重量不到100斤。

连接app能看到体脂数值,广播数据最后一位是e2,转换为226,但是没有找到和体脂数据符合的数值。

3.已经修改好yaml、cpp了,也安装成功了。不过称重后还是会遇见下列报错。
[10:05:38][D][ble_adv:035]:   Advertised manufacturer data:
[10:05:38][D][ble_adv:037]:     - 0xYYZZ:XX.CC.BB.AA.08.52.15.11.03.12.A2.02.42.E2 (14)
[10:05:38][D][yunmai_scale:049]: parse_header(): no service data UUID magic bytes.



回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2022-1-8 21:15:40 来自手机 | 显示全部楼层
本帖最后由 XCray 于 2022-1-8 21:19 编辑
tangli159 发表于 2022-1-8 10:47
谢谢您的耐心解答。
1.确实是我没理解到位,虽然我之前就查阅了官网的例子,但是理解有误,现在修改后不 ...


48行没改对吧?必须是0xZZ,0xYY,注意顺序。
阻抗没问题了,需要另外转换成体脂率,需要用一楼那个github的组件。
回复

使用道具 举报

16

主题

151

帖子

1070

积分

金牌会员

Rank: 6Rank: 6

积分
1070
金钱
914
HASS币
30
发表于 2022-1-9 11:34:51 | 显示全部楼层
XCray 发表于 2022-1-8 21:15
48行没改对吧?必须是0xZZ,0xYY,注意顺序。
阻抗没问题了,需要另外转换成体脂率,需要用一楼那个github ...

原来如此,搞定了!非常感谢您的耐心指导!爱您
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2022-1-9 16:39:09 来自手机 | 显示全部楼层
本帖最后由 XCray 于 2022-1-9 19:14 编辑
tangli159 发表于 2022-1-9 11:34
原来如此,搞定了!非常感谢您的耐心指导!爱您


不客气,收到了:-)
哪天有机会一起滑雪呀!
回复

使用道具 举报

3

主题

301

帖子

3243

积分

论坛元老

Rank: 8Rank: 8

积分
3243
金钱
2942
HASS币
0
发表于 2022-3-27 13:41:12 | 显示全部楼层
请教下我的云麦mini2得到的数据是这样
[13:37:23][D][ble_adv:051]:   address: A4:C1:38:28:40:09
[13:37:23][D][ble_adv:052]:   name: YUNMAI-ISM22T
[13:37:23][D][ble_adv:053]:   Advertised manufacturer data:
[13:37:23][D][ble_adv:055]:     - 0x4009:28.38.C1.A4.00.00 (6)
后面长度是6不是14,需要怎样修改呢,谢谢
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 22:26 , Processed in 0.057872 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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