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

 找回密码
 立即注册
查看: 12121|回复: 20

小米体脂秤2通过Passive BLE Monitor 集成直连HA

[复制链接]

19

主题

290

帖子

1510

积分

论坛技术达人

积分
1510
金钱
1205
HASS币
130
发表于 2022-5-4 08:51:26 | 显示全部楼层 |阅读模式
本帖最后由 riceball 于 2022-5-5 16:57 编辑

本解决方案可以支持多人体重自动记录(前提是每个人有明显的体重区分或阻抗区分),以及完美显示最近一次的的人体体重,体脂信息.

参阅: HA智能硬件采购避坑指要(三) 蓝牙篇

使用的前提硬件,需要至少支持BLE蓝牙4.0(蓝牙是向下兼容的,所以BLE蓝牙5也可)的适配器,一般的HA盒子都有,如果是用PC就看带WIFI不,一般WIFI都带蓝牙,没有就买一个支持的USB WIFI适配器.

请首先安装 Passive BLE Monitor 集成, 安装方法参见: 使用Passive BLE Monitor集成代替蓝牙网关直接接入HA

如果你已经勾选了Passive BLE Monitor 集成的"自动发现设备及传感器",那么小米体脂秤2开机后多等一会(保持体脂秤屏幕常亮),就应该看到在该集成(Bluetooth Low Energy Monitor)下多出一个Mi Scale V2设备,你可以重命名一个有意义的名字.

如果你希望看到详细的体脂信息,那么需要先在HACS第三方集成商场中安装 BodyMiScale 集成.
如果HACS中找不到就加库: 点击 HACS -> 集成 -> 自定义存储库(右上角三个点中) -> 存储库设置为 "https://github.com/dckiller51/bodymiscale" , 类别为: 集成
注意,BodyMiScale 集成的最新版本2.1 版本需要您安装的Home Assistant2022.4 以上版本才能支持,否则您只能安装bodymiscale 2.0以下版本,切勿升级.

BodyMiScale 集成的最新版本(2.1)已经支持直接在配置界面中配置:

  1. 配置 -> 设备与服务 -> 添加集成 -> 搜索 BodyMiScale
    • sel-bodymiscale.png
  2. 开始配置 BodyMiScale
    • bodymiscale.png
  3. 如果有多人重复上述操作

如果是BodyMiScale@2.0及以下的版本必须在configuration.yaml手工配置传感器:

bodymiscale:
  your_name1:
    sensors:
      weight: sensor.ble_stabilized_weight_XXXX
      impedance: sensor.ble_impedance_XXXX
    height: 176
    born: "1990-04-10"
    gender: "male"
    model_miscale: "181B" # miscale2
  your_name2:
    sensors:
      weight: sensor.ble_stabilized_weight_XXXX
      impedance: sensor.ble_impedance_XXXX
    height: 176
    born: "1990-04-10"
    gender: "male"
    model_miscale: "181D" #  miscale1

重启后就会多出来名为: bodymiscale.your_name1bodymiscale.your_name2的实体.

然后你需要在HACS第三方集成商场中安装lovelace-body-miscale-card 界面, 来使用该实体.

先加库: 点击 HACS -> 集成 -> 自定义存储库(右上角三个点中) -> 存储库设置为 https://github.com/dckiller51/lovelace-body-miscale-card , 类别为: Lovelace

然后再安装该界面. 最后复制仓库中的图片文件(src/images/*)到config/www/images目录下.

接着就可以在 lovelace 中进行配置了:

type: custom:body-miscale-card
entity: bodymiscale.your_name1
show_name: true
image: /local/images/miscale2.jpg
show_states: true
show_attributes: true
show_body: true
show_buttons: true
show_toolbar: true

如果有多个人需要分别记录,并且可以通过体重区分的话,当然你也可以加上阻抗值(impedance)来判断,那么可以在configuration.yaml中:

- platform: template
  sensors:
    # the first person's weight
    weight_your_name:
      friendly_name: "Weight Your Name"
      value_template: >-
        {% set weight = states('sensor.ble_stabilized_weight_XXXX') | float %}
        {% if 66.9 <= weight <= 77 %}
          {{ states("sensor.ble_stabilized_weight_XXXX") }}
        {% else %}
          {{ states("sensor.weight_your_name") }}
        {% endif %}
      unit_of_measurement: 'kg'
      icon_template: mdi:weight-kilogram
    # the first person's impedance
    impedance_your_name:
      friendly_name: "Impedance Your Name"
      value_template: >-
        {% set weight = states('sensor.ble_stabilized_weight_XXXX') | float %}
        {% if 66.9 <= weight <= 77 %}
          {{ states("sensor.ble_impedance_XXXX") }}
        {% else %}
          {{ states("sensor.impedance_your_name") }}
        {% endif %}
      unit_of_measurement: 'ohm'
      icon_template: mdimega

问题又来了,如何显示最近的历史数据. 因为当电子秤离线后或者HA重启后,就没当前数据(最近一次的)了!

用SQL Sensor获取的最近一次的历史数据,以及修改前面的模板传感器如下:

- platform: sql
  db_url: !secret db_url
  queries:
    - name: Latest Weight Your Name
      query: "SELECT state FROM states WHERE entity_id = 'sensor.weight_your_name' and state <> 'unknown' and state <> 'unavailable' ORDER BY created DESC LIMIT 1;"
      column: "state"
    - name: Latest Impedance Your Name
      query: "SELECT state FROM states WHERE entity_id = 'sensor.impedance_your_name' and state <> 'unknown' and state <> 'unavailable' ORDER BY created DESC LIMIT 1;"
      column: "state"
- platform: template
  sensors:
    weight_your_name:
      friendly_name: "Weight Your Name"
      value_template: >-
        {% set weight = states('sensor.ble_stabilized_weight_XXXX') | float(0) %}
        {% set id = 'weight_your_name' %}
          {% if 66.9 <= weight <= 77 %}
            {{ weight }}
          {% elif weight <= 0 %}
            {{ state_attr("sensor.latest_"+id, 'state') }}
          {% else %}
            {{ states("sensor."+id) }}
          {% endif %}
      unit_of_measurement: 'kg'
      icon_template: mdi:weight-kilogram
    impedance_your_name:
      friendly_name: "Impedance Your Name"
      value_template: >-
        {% set weight = states('sensor.ble_stabilized_weight_XXXX') | float(0) %}
        {% set id = 'impedance_your_name' %}
          {% if 66 <= weight <= 77 %}
            {{ states("sensor.ble_impedance_XXXX") }}
          {% elif weight <= 0 %}
            {{ state_attr("sensor.latest_"+id, 'state') }}
          {% else %}
            {{ states("sensor."+id) }}
          {% endif %}
      unit_of_measurement: 'ohm'
      icon_template: mdimega

注意:   

  1. db_url: !secret db_url 要填写自己recorder数据库的url. 详细请参阅 : SQL Sensor
    • 如果recoder 没有添加过db_url 用的原来的默认配置, 就把这个删掉不要
  2. YAML 脚本中的 大于(>) 小于(<) 符号 被错误转义了,




评分

参与人数 1金钱 +20 HASS币 +10 收起 理由
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

7

主题

93

帖子

1547

积分

论坛技术达人

积分
1547
金钱
1444
HASS币
40
发表于 2022-5-4 09:59:20 | 显示全部楼层
为什么我的PassiveBLE一直看不到小米体脂秤 我的是小米体脂秤2, PassiveBLE可以看到其他的蓝牙设备, 就是小米体脂秤看不到, 直接在PassiveBLE集成里面添加体脂秤的MAC地址也看不到任何信号
回复

使用道具 举报

19

主题

290

帖子

1510

积分

论坛技术达人

积分
1510
金钱
1205
HASS币
130
 楼主| 发表于 2022-5-4 10:27:23 | 显示全部楼层
manymuch 发表于 2022-5-4 09:59
为什么我的PassiveBLE一直看不到小米体脂秤 我的是小米体脂秤2, PassiveBLE可以看到其他的蓝牙设备, 就 ...

要多等一会儿,让秤屏幕一直亮起.

还有就是用 bluetoothctl 监视看看能不能看到, 然后可以用 ` bluetoothctl connect MAC-Addr`
回复

使用道具 举报

0

主题

33

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
金钱
311
HASS币
0
发表于 2022-5-4 14:18:49 | 显示全部楼层
感谢大佬,因为hass版本低,装2.0的过程中出现了装完不在hacs中显示,改configuration也无法使用集成,装1.5报错,后来升级了hass版本,装2.1后就成功了,现在是用的esp32读的蓝牙信息。
现在还有个小问题是,卡片展开后,不像github上展示的那样在BMI等信息的左边显示小图标
回复

使用道具 举报

19

主题

290

帖子

1510

积分

论坛技术达人

积分
1510
金钱
1205
HASS币
130
 楼主| 发表于 2022-5-4 15:06:55 | 显示全部楼层
banquolol 发表于 2022-5-4 14:18
感谢大佬,因为hass版本低,装2.0的过程中出现了装完不在hacs中显示,改configuration也无法使用集成,装1. ...

再仔细看看,你有一个复制图像的步骤看漏了吧
回复

使用道具 举报

33

主题

2196

帖子

5838

积分

论坛元老

Rank: 8Rank: 8

积分
5838
金钱
3642
HASS币
60
QQ
发表于 2022-5-4 21:19:53 | 显示全部楼层
膜拜,用起来。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

33

主题

2196

帖子

5838

积分

论坛元老

Rank: 8Rank: 8

积分
5838
金钱
3642
HASS币
60
QQ
发表于 2022-5-5 12:43:45 | 显示全部楼层
我添加多人那个,配置搞进去重启ha,直接挂了
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

19

主题

290

帖子

1510

积分

论坛技术达人

积分
1510
金钱
1205
HASS币
130
 楼主| 发表于 2022-5-5 13:00:43 | 显示全部楼层
zxyny1989 发表于 2022-5-5 12:43
我添加多人那个,配置搞进去重启ha,直接挂了

这个 `db_url: !secret db_url` 不能乱填,要填自己 recorder 的.
回复

使用道具 举报

33

主题

2196

帖子

5838

积分

论坛元老

Rank: 8Rank: 8

积分
5838
金钱
3642
HASS币
60
QQ
发表于 2022-5-5 13:25:03 | 显示全部楼层
riceball 发表于 2022-5-5 13:00
这个 `db_url: !secret db_url` 不能乱填,要填自己 recorder 的.

请教一下:我没改第三方数据库,用的ha原来的,这个地方要怎么搞?
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

19

主题

290

帖子

1510

积分

论坛技术达人

积分
1510
金钱
1205
HASS币
130
 楼主| 发表于 2022-5-5 16:56:16 | 显示全部楼层
zxyny1989 发表于 2022-5-5 13:25
请教一下:我没改第三方数据库,用的ha原来的,这个地方要怎么搞?

如果recoder 没有添加过`db_url` 用的原来的默认配置就把这个删掉
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 19:11 , Processed in 0.117650 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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