使用树莓派和小米蓝牙温湿度计可视化宿舍温湿度变化

最近入手了一个小米蓝牙温湿度计(最便宜的 LCD 屏那款,https://pvvx.github.io/ATC_MiThermometer/),可以连米家查看温湿度,但是没有历史记录功能。于是想着能不能连树莓派记录温湿度,Google 上一搜还真有,赶紧整一套玩玩。

最终将小米蓝牙温湿度计刷入定制固件发送温湿度数据广播,树莓派接收广播存入 InfluxDB 数据库,然后使用 Grafana 可视化。

刷入定制固件

参考:

使用 https://github.com/pvvx/ATC_MiThermometer 中的定制固件,老外非常 NB,还写了一套网页直接在线刷固件:https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html,在仓库中查看使用说明即可。

刷入定制固件后开启小米蓝牙温湿度计的蓝牙广播功能,这样树莓派不用连接就能接收温湿度广播数据了。由于周围环境较为可信且刻意调低了发射增益,我没有设置 PIN 码和加密,防止哪天忘了连不上。就是懒了

树莓派接收蓝牙广播

参考:使用树莓派定时读取小米温湿度传感器数据并发送到微信

也已经有老外编写了完善的接收程序,直接查看仓库中说明使用即可:https://github.com/JsBergbau/MiTemperature2

存入 InfluxDB 数据库

安装并配置 InfluxDB 数据库

参考:https://blog.csdn.net/qq_41475058/article/details/108050440

1
sudo apt install influxdb influxdb-client

然后数据库服务器会在 8086 端口上开始监听。似乎需要添加 admin 用户才能开启权限认证,我只需要它能跑起来就行就没管。懒了

1
2
3
4
influx  # 默认连接到localhost:8086
show users # 查看所有用户,默认没有
CREATE USER "pi" WITH PASSWORD '******' WITH ALL PRIVILEGES # 创建 pi 用户用于管理数据
create database mi # 创建 mi 数据库用于存放数据

将广播数据存入

编辑接收程序中的 sendToInflux.sh 如下:

sendToInflux.sh
1
curl -i -u "pi:PASSWORD" -XPOST http://127.0.0.1:8086/write?db=mi\&precision=s --data-binary "AquaraBluetoothSensors,sensorname=$2 temperature=$3,calibratedHumidity=$4,voltage=$5,batteryLevel=$6 $7"

然后 python3 LYWSD03MMC.py --atc --battery --callback sendToInflux.sh 即可开始接受广播数据并存入数据库。

此时在数据库中可以看到数据了:

1
2
3
use mi # 进入 mi 数据库
show measurements # 查看表,此时应有表 AquaraBluetoothSensors
select * from AquaraBluetoothSensors # 查看表中所有数据

还可以写个 service 来跑,比如编辑 /etc/systemd/system/MiTemperature.service

/etc/systemd/system/MiTemperature.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=MiTemperature advertisements receiver
After=network.target

[Service]
Type=simple
User=pi
Restart=always
RestartSec=5
WorkingDirectory=/home/pi/Git/MiTemperature2
ExecStart=/usr/bin/python3 LYWSD03MMC.py --atc --battery --callback sendToInflux.sh
StandardOutput=file:/home/pi/Git/MiTemperature2/output.log
StandardError=file:/home/pi/Git/MiTemperature2/error.log

[Install]
WantedBy=multi-user.target

开启服务并开机自启

1
2
sudo systemctl start MiTemperature.service
sudo systemctl enable MiTemperature.service

Grafana 可视化

参考官方说明,使用 apt 安装:https://grafana.com/docs/grafana/v9.0/setup-grafana/installation/debian/#install-from-apt-repository

1
2
3
4
5
6
sudo apt install apt-transport-https
sudo apt install wget # 说明中的 software-properties-common 我没装上,好像不影响
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/enterprise/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt-get install grafana-enterprise

然后编辑 /etc/grafana/grafana.ini 更换服务端口,启动服务:

1
2
sudo systemctl start grafana-server.service
sudo systemctl enable grafana-server.service

最后浏览器访问对应端口上的网页,默认用户名和密码是 admin,然后进行配置即可。Grafana 的功能蛮复杂的,有空可能单独开一篇来记录~

作者

Centaurus99

发布于

2022-09-07

更新于

2022-09-07


评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×