通过ESP32刷ESPHome 接入小米体脂秤,并且支持BMI等数据。
之前的教程给大家介绍过一个Home Assistant 通过Supervisor添加 Addon的方法来实现接入小米体脂秤,也能实现体重数据分析,缺点就是安装这个addon的主机上必须要有蓝牙硬件。参考这篇文章
近期我的软路由坏了,所以虚拟机里的HassOS也就没法运行了,使用了几年软路由后发现性能过剩还是太严重了,所以我决定把Home Assistant挪到OpenWrt上,这样用一个4G内存版本的R4S就可以胜任了,事实证明我的想法是正确的,在OpenWrt里面安装好HassIO使用起来感觉跟HassOS没有什么区别。
如果需要R4S在OpenWrt下安装HassIO的教程请点击这里访问安装教程。安装好之后很多朋友会发现运行很短的时间就会让自己的OpenWrt负载飙升到很高,直到把整个OpenWrt路由器系统资源耗尽死机。所以我还有一篇文章专门针对这个问题的解决方法。
教程到这里言归正传,我的R4S没有蓝牙硬件了,以前给大家介绍的那个Supervisor安装Addon的形式也就没办法实现了,那么如何接入小米体脂秤呢?我想到了ESP32这个开发版,我一直用来接入小米手环和蓝牙温湿度传感器,ESP32是有蓝牙硬件的,刷好ESPHOME就可以实现接入很多蓝牙BLE设备,具体教程大家可以点击前面文字的链接转到对应的教程文章。
下面就给大家介绍一下如何使用ESP32开发版刷ESPHOME来接入小米体脂秤,再做一个自动化来使用小米音箱自动播报当前测量人员的体重信息。
第一步当然是你要有一块ESP32开发版,它张下面这个样子,你点击图片就会把你带到购买页面:
然后参考我之前ESPHOME刷写方法的视频或者文章教程把如下Yaml配置文件配置到我们的YAML编辑器里。
上面的YAML脚本是可以测量2个人体重的例子,一个是marco一个是kady大家可以根据自己情况来替换名字即可。
. if (id(weight_miscale).state >= 45 && id(weight_miscale).state <= 60) {
return id(peso_kady).publish_state(x);}
else if (id(weight_miscale).state >= 65 && id(weight_miscale).state <= 80) {
return id(peso_marco).publish_state(x);}
-
- 我来解释一下上面代码的意义,上面定义了2个人,2个人都有 >= 和 <= 值,2个人都会有一个特定的体重区间,比如kady这个用户体重从未低于45公斤和小于60公斤,所以这个区间的体重ESPHome就认为是Kady这个用户,下面marco这个用户体重从未低于65公斤也没有高于过80公斤,这里还可以通过else if来增加其他用户,但是所有增加的人体重区间不能有交集,有交集的话就无法判断出这个人到底是谁。 代码中还有一个值是电阻值,当我们使用小米体脂秤测量后会通过蓝牙发送出2个值,一个是体重信息,另一个是电阻值,其他所有身体指标都是通过年龄,性别,体重和这个电阻值通过公式计算而来,所以我们如果需要增加测量用户的话也同时要在代码里把电阻值这部分也增加else if。[/erphpdown
- ]
下面我们看Home Assistant里就能通过ESPHOME自动发现六个传感器,收集到的体重信息都会自动显示出来。
通过右边的链接创建自动化使用变量来让小爱音箱自动播报体重信息。
下面介绍如何让Home Assistant的界面显示身体各项指标。
首先从HACS里安装2个插件,一个是集成,一个是界面。 1.安装集成Bodymiscale 2.安装界面Body Miscale Card
创建一个/config/custom_components/bodymiscale/bodymiscale.yaml的配置文件,内容如下:
配置文件里引用刚才创建的文件,并重启Home Assistant。
在界面里添加刚才自定义卡片
现在就可以显示出来漂亮的体重界面了。
界面Body Miscale Card为何在hacs里搜索不到,手动安装后也无法显示