魅族蓝牙温度湿度遥控器,利用蓝牙MQTT网关,接入HomeAssistant
创作立场声明:这些年全靠国内外各位大佬的辛勤奉献,使得现在智能家居的解决方案遍地开花!本人作为伸手党十分不好意思,于是抽空折腾了一篇技术文章,用于回馈大家以及帮助过我的各位朋友!文内对各条指令都做了解释,方便各位理解学习linux的一些知识,另外您还可以学习到许多小技巧,比如一条命令替换某文本文件内容并输出到一个新文件、一条命令替换某文本文件所有内容、不需要脚本也能懒人复制粘贴一次执行多条命令,等等......
图少话多,依赖实操,希望能对各位有所帮助!
请大家多多分享文章,点赞、收藏、评论!谢谢!
版本说明:
包含多魅族配置方法
新增自定义电量百分比的方法
提供某些情况下报错的解决方案
解决网关运行时bluepy报错的问题
更新时间:20200410-0001
文章作者:NAS群-嘿嘿
感谢 NAS群-夏昸 大佬提供的设备与指导!
感谢 微信“NAS硬件DIY信息交流”群里各位大佬们 提供的指导与帮助!
本文为原创文章,版权归作者本人所有,未经授权,不得转载!授权转载时请保留作者名及文章原始链接!
参考资料,感谢各位!
[进阶教程] 魅族温湿度通过 N1 接入 homeassistant
作者:houhd
https://bbs.hassbian.com/thread-7582-1-2.html
蓝牙MQTT网关,原作者zewelor的github
作者:zewelor
https://github.com/zewelor/bt-mqtt-gateway
[进阶教程] bt-mqtt-gateway 蓝牙网关,新增魅族、蓝牙信号强度
作者:meishild
https://bbs.hassbian.com/thread-8036-1-1.html
蓝牙MQTT网关,加入魅族温度湿度以及蓝牙信号,作者meishild的github
作者:meishild
https://github.com/meishild/bt-mqtt-gateway
低负载dtb提取自flippy大佬的N1刷机包[2019-12-23]19+版,内核5.3.18(5.3内核终结版)
https://www.right.com.cn/forum/thread-981406-1-1.html
armbian镜像下载
链接:https://pan.baidu.com/s/18M8ki_2njoljiIHWCeN5Vg
提取码:jj7o
Armbian_5.98_Aml-g12_Ubuntu_bionic_default_5.3.0_20191008.img
meson-gxl-s905d-phicomm-n1-19+k5.3.18.dtb
低负载dtb复制进/dtb/amlogic/,有两种使用方法(建议方法1):
1、改名替换meson-gxl-s905d-phicomm-n1.dtb,然后修改uEnv.ini相关内容为dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
1、不改名,直接修改uEnv.ini相关内容为dtb_name=/dtb/amlogic/meson-gxl-s905d-phicomm-n1-19+k5.3.18.dtb
N1安装armbian的方法及步骤本文不涉及,请自行查找相应资料
建议不要跳过创建用户的步骤,创建用户不影响root账号的使用
本文所有操作均在root用户下执行
本文所有操作在armbian 5.98/5.99 ubuntu版本下测试通过
(Ubuntu Bionic with Armbian Linux 5.3.0-aml-g12)
uname -a
执行结果是这样的:
Linux n1 5.3.0-aml-g12 #5.99 SMP PREEMPT Mon Nov 25 14:50:13 MSK 2019 aarch64 aarch64 aarch64 GNU/Linux
cat /proc/version
执行结果是这样的:
Linux version 5.3.0-aml-g12 (root@vbox) (gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)) #5.99 SMP PREEMPT Mon Nov 25 14:50:13 MSK 2019
本文使用的homeassistant是hassio 0.107.7
本文使用的python为3.6版本,蓝牙mqtt网关的要求为python 3.5及更高版本
本文的范例为同时连接2个魅族蓝牙温度湿度遥控器,请根据自己的情况增减
初次使用建议按步骤详解操作
懒人省心复制粘贴一次性执行命令列表在文章底部(蓝牙bluetoothctl能成功搜索到魅族蓝牙MAC后才能使用)
魅族蓝牙温度湿度遥控器,与HomeAssistant的连接过程
魅族 <--> [ 蓝牙 <--> bt-mqtt-getway ] <--> mqtt服务器 <--> ha
方括号内的部分,要在同一台机器内
正式操作前的准备
更新列表
apt-get update
安装所需软件包
apt-get install git build-essential python3 python3-virtualenv python3-pip python3-wheel bluetooth bluez libglib2.0-dev virtualenv python3-setuptools
建议!
建议使用screen管理会话(在会话窗口内操作,ssh中断时不会导致脚本终止或程序停止)
安装screen
apt-get install screen
创建screen会话窗口(XX为自定义窗口名)
screen -S XX
暂时离开会话窗口(窗口内的脚本和程序继续保持运行)
按键ctrl+a d
返回会话窗口(XX为自定义窗口名,须与创建时相同)
screen -r XX
蓝牙安装及开启,并测试是否能成功搜索到魅族蓝牙MAC
首先利用armbian自带的设置界面安装蓝牙支持
armbian-config → Network → BT install
###############bluepy安装二选一###############
1、二选一,安装过程有报错,但最终提示成功安装
pip3 install bluepy
2、二选一,手动编译安装bluepy
创建工作目录,可自行修改替换
mkdir /root/bt-mqtt-gateway
进入工作目录,可自行修改替换
cd /root/bt-mqtt-gateway/
拉取bluepy代码
git clone https://github.com/IanHarvey/bluepy.git
进入拉取目录,
cd /root/bt-mqtt-gateway/bluepy
编译
python3 setup.py build
安装
python3 setup.py install
###############bluepy安装二选一###############
###############报错解决方案,未报错的话跳过我下面的内容###############
报错各种只读(如Not using locking for read only lock file,或Read-only file system)
查看文件系统及类型(用于找到/根目录挂载点的设备名称/dev/mmcblk1p2,以及文件系统类型ext4)
df -T
使用fsck手动修复
fsck.ext4 -y /dev/mmcblk1p2
重启
reboot
注意!此报错说明有以下二种可能:
1、之前有过非正常关机,导致文件系统受损
2、闪存芯片受损,存储芯片故障导致只读
###############报错解决方案,未报错的话跳过我上面的内容###############
运行蓝牙控制程序
bluetoothctl
在[bluetooth]#模式下输入
开启蓝牙
power on
列出蓝牙设备
devices
扫描可连接的蓝牙设备
scan on
能看到
[NEW] Device 68:3E:34:CC:XX:X1 魅族遥控器
[NEW] Device 68:3E:34:CC:XX:X2 魅族遥控器
重要提示:不要信任配对与连接魅族蓝牙,否则在蓝牙mqtt网关运行时会报错(bluepy.btle.BTLEManagementError: Failed to execute management command 'le on' (code: 17, error: Invalid Index))
不用打开agent
不用信任trust
不用配对pair
不用连接connect
退出蓝牙控制程序
quit
装完armbian的蓝牙支持后重启一下N1
reboot
使用bt-mqtt-gateway蓝牙mqtt网关接入魅族蓝牙温度湿度、蓝牙信号强度
步骤详解
创建工作目录,可自行修改替换
mkdir /root/bt-mqtt-gateway
进入工作目录,可自行修改替换
cd /root/bt-mqtt-gateway/
拉取代码
git clone https://github.com/meishild/bt-mqtt-gateway.git
进入拉取目录,注意有2个bt-mqtt-gateway
cd /root/bt-mqtt-gateway/bt-mqtt-gateway/
创建虚拟化的python运行环境
virtualenv -p python3 .venv
激活虚拟化环境
source .venv/bin/activate
编辑依赖列表文件
vi requirements.txt
#替换文件内容
paho-mqtt
pyyaml
interruptingcow
apscheduler
bluepy
btlewrap
#替换结束
安装依赖
pip3 install -r requirements.txt
###############报错解决方案,未报错的话跳过我下面的内容###############
报错zipfile.BadZipFile: File is not a zip file
rm -rf /root/.cache/pip/wheels/*
###############报错解决方案,未报错的话跳过我上面的内容###############
创建多魅族网关,信号组件进程,可按情况增减,修改2处,01Worker与末尾01.py中的数字
sed 's/BtrssiWorker/Btrssi01Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi01.py
sed 's/BtrssiWorker/Btrssi02Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi02.py
创建多魅族网关,湿度温度电量组件进程,可按情况增减,修改2处,01Worker与末尾01.py中的数字
sed 's/MzbtirWorker/Mzbtir01Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir01.py
sed 's/MzbtirWorker/Mzbtir02Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir02.py
利用范例创建网关配置文件
cp /root/bt-mqtt-gateway/bt-mqtt-gateway/config.yaml.example /root/bt-mqtt-gateway/bt-mqtt-gateway/config.yaml
编辑网关配置文件,在测试阶段可以把数据刷新间隔时间改短一些,比如30秒,正常使用时再改长
vi /root/bt-mqtt-gateway/bt-mqtt-gateway/config.yaml
#替换文件内容
mqtt:
# mqtt服务器ip
host: 192.168.1.1
# mqtt服务器端口
port: 1883
# mqtt服务器用户名
username: username
# mqtt服务器密码
password: password
#ca_cert: /etc/ssl/certs/ca-certificates.crt # Uncomment to enable MQTT TLS, update path to appropriate location.
#ca_verify: False # Verify TLS certificate chain and host, disable for testing with self-signed certificates, default to True
#topic_prefix: hostname # All messages will have that prefix added, remove if you dont need this.
client_id: bt-mqtt-gateway
availability_topic: lwt_topic
manager:
sensor_config:
topic: homeassistant
retain: true
topic_subscription:
update_all:
topic: homeassistant/status
payload: online
command_timeout: 35 # Timeout for worker operations. Can be removed if the default of 35 seconds is sufficient.
workers:
# 魅族信号组件进程名,有几个魅族就加几个进程,进程名可自定义,取决于上面命令创建了几个btrssi0*.py
btrssi01:
args:
# topic名,可以自定义,修改后影响ha相关配置
topic_prefix: rssi01
devices:
# 魅族MAC,全大写
name: 68:3E:34:CC:XX:X1
# 数据刷新间隔,秒
update_interval: 300
# 魅族温度湿度电量组件进程名,有几个魅族就加几个进程,进程名可自定义,取决于上面命令创建了几个mzbtir0*.py
mzbtir01:
args:
# topic名,可以自定义,修改后影响ha相关配置
topic_prefix: mzbtir01
devices:
# 魅族MAC,全大写
name: 68:3E:34:CC:XX:X1
# 数据刷新间隔,秒
update_interval: 300
# 魅族信号组件进程名,有几个魅族就加几个进程,进程名可自定义,取决于上面命令创建了几个btrssi0*.py
btrssi02:
args:
# topic名,可以自定义,修改后影响ha相关配置
topic_prefix: rssi02
devices:
# 魅族MAC,全大写
name: 68:3E:34:CC:XX:X2
# 数据刷新间隔,秒
update_interval: 300
# 魅族温度湿度电量组件进程名,有几个魅族就加几个进程,进程名可自定义,取决于上面命令创建了几个mzbtir0*.py
mzbtir02:
args:
# topic名,可以自定义,修改后影响ha相关配置
topic_prefix: mzbtir02
devices:
# 魅族MAC,全大写
name: 68:3E:34:CC:XX:X2
# 数据刷新间隔,秒
update_interval: 300
#替换结束
进入拉取目录,为啥有2个bt-mqtt-gateway,那是怕直接在/root/目录下操作,把目录搞的乱七八糟
cd /root/bt-mqtt-gateway/bt-mqtt-gateway/
激活虚拟化环境
source .venv/bin/activate
运行网关,查看是否有运行错误,如果有,就执行下一条查看详情
./gateway.py
运行网关,debug模式,调试用,可以看到topic(state_topic)
./gateway.py -d
无错的话就继续下面的步骤
使蓝牙mqtt网关成为系统服务,开机自动启动、服务异常自动重启
利用范例创建系统服务配置文件
cp bt-mqtt-gateway.service /etc/systemd/system/
编辑蓝牙mqtt网关系统服务配置文件
vi /etc/systemd/system/bt-mqtt-gateway.service
#替换文件内容
[Unit]
Description=Bluetooth MQTT gateway
Documentation=https://github.com/zewelor/bt-mqtt-gateway
After=network.target
[Service]
Type=simple
# 工作目录,注意路径
WorkingDirectory=/root/bt-mqtt-gateway/bt-mqtt-gateway
# 启动进程时执行的命令,注意路径
# 正常启动网关(二选一,自行选择使用哪条命令,出问题就注释一条,解除注释另一条,不可同时使用,解决Start request repeated too quickly报错)
ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
# 虚拟化环境启动网关(二选一,自行选择使用哪条命令,出问题就注释一条,解除注释另一条,不可同时使用,解决Start request repeated too quickly报错)
#ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/.venv/bin/python3 /root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
Restart=always
[Install]
WantedBy=multi-user.target
#替换结束
###############报错解决方案,未报错的话跳过我下面的内容###############
解释一下为啥要自行选择上面的命令
为了解决某些情况下网关正常,但是系统服务启动失败的问题
解决Start request repeated too quickly报错
方法1:正常启动网关(ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py)
方法2:指定虚拟化环境启动网关(ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/.venv/bin/python3 /root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py)
操作方法
注释这一条
#ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
解除注释这一条
ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/.venv/bin/python3 /root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
systemctl status bt-mqtt-gateway报错内容
(.venv) root@aml:~/bt-mqtt-gateway/bt-mqtt-gateway# systemctl status bt-mqtt-gateway
● bt-mqtt-gateway.service - Bluetooth MQTT gateway
Loaded: loaded (/etc/systemd/system/bt-mqtt-gateway.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2020-04-03 05:41:32 UTC; 2min 2s ago
Docs: https://github.com/zewelor/bt-mqtt-gateway
Process: 1266 ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py (code=exited, status=1/FAILURE)
Main PID: 1266 (code=exited, status=1/FAILURE)
Apr 03 05:41:32 aml systemd[1]: bt-mqtt-gateway.service: Service RestartSec=100ms expired, scheduling restart.
Apr 03 05:41:32 aml systemd[1]: bt-mqtt-gateway.service: Scheduled restart job, restart counter is at 5.
Apr 03 05:41:32 aml systemd[1]: Stopped Bluetooth MQTT gateway.
Apr 03 05:41:32 aml systemd[1]: bt-mqtt-gateway.service: Start request repeated too quickly.
Apr 03 05:41:32 aml systemd[1]: bt-mqtt-gateway.service: Failed with result 'exit-code'.
Apr 03 05:41:32 aml systemd[1]: Failed to start Bluetooth MQTT gateway.
###############报错解决方案,未报错的话跳过我上面的内容###############
重新加载服务配置文件
systemctl daemon-reload
启动服务
systemctl start bt-mqtt-gateway
查看服务状态
systemctl status bt-mqtt-gateway
设置开机自启
systemctl enable bt-mqtt-gateway
到这里蓝牙mqtt网关就成功开启并运行了
步骤详解结束
###############报错解决方案,未报错的话跳过我下面的内容###############
在蓝牙mqtt网关运行时报错(bluepy.btle.BTLEManagementError: Failed to execute management command 'le on' (code: 17, error: Invalid Index))
解决方法:
运行蓝牙控制程序
bluetoothctl
移除已信任trust、已配对pair、已连接connect的魅族蓝牙MAC
[bluetooth]# remove 68:3E:34:CC:XX:X1
[bluetooth]# remove 68:3E:34:CC:XX:X2
退出蓝牙控制程序
quit
重启服务
systemctl restart bt-mqtt-gateway
查看服务状态
systemctl status bt-mqtt-gateway
###############报错解决方案,未报错的话跳过我上面的内容###############
其他指令
重启服务
systemctl restart bt-mqtt-gateway
停止服务
systemctl stop bt-mqtt-gateway
取消开机自启
systemctl disable bt-mqtt-gateway
检查服务日志,运行时间越长,日志越多
journalctl -xef -u bt-mqtt-gateway
查看蓝牙mqtt网关进程
ps aux | grep gateway
执行结果是这样的:
root 12240 0.5 2.3 931356 42700 ? Ssl 17:38 0:09 python3 /root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
查看蓝牙mqtt网关系统服务
systemctl list-units --all --type=service | grep gateway
执行结果是这样的:
bt-mqtt-gateway.service loaded active running Bluetooth MQTT gateway
卸载方法
注意路径
systemctl stop bt-mqtt-gateway
systemctl disable bt-mqtt-gateway
rm -rf /root/bt-mqtt-gateway
rm /etc/systemd/system/bt-mqtt-gateway.service
systemctl daemon-reload
正常运行状态
可以反复多次执行systemctl status bt-mqtt-gateway来查看
也可执行journalctl -xef -u bt-mqtt-gateway来持续查看
时不时出现报错Unexpected error: Failed to connect to peripheral,不影响使用
HA相关配置部分
topic样本,topic前部的rssiXX与mzbtirXX名称取决于之前修改的网关组件进程步骤
信号强度,dBm
rssiXX/name/rssi
信号等级,Lv
rssiXX/name/rssi_level
温度,摄氏度
mzbtirXX/name/temperature
湿度,百分比
mzbtirXX/name/humidity
剩余电量,百分比
mzbtirXX/name/battery
注意state_topic里的rssi01(信号)和mzbtir01(温度湿度电量),与/root/bt-mqtt-gateway/bt-mqtt-gateway/config.yaml里配置的相对应,有几个魅族就加几组
传感器名称,比如sensor.ke_ting_xin_hao_deng_ji,是来源于platform里的name: '客厅信号等级',由ha自动生成拼音和下划线,若是不确定是否写对,可以到开发者工具里的状态标签下查看
传感器写法,放到ha配置文件的packages目录下,后缀.yaml
sensor:
- platform: mqtt
name: '客厅信号强度'
state_topic: 'rssi01/name/rssi'
icon: mdi:bluetooth
unit_of_measurement: 'dBm'
value_template: '{{ value }}'
- platform: mqtt
name: '客厅信号等级'
state_topic: 'rssi01/name/rssi_level'
icon: mdi:signal
unit_of_measurement: 'Lv'
value_template: '{{ value }}'
- platform: mqtt
name: '客厅温度'
state_topic: 'mzbtir01/name/temperature'
device_class: "temperature"
icon: mdi:thermometer
unit_of_measurement: '°C'
value_template: '{{ value }}'
- platform: mqtt
name: '客厅湿度'
state_topic: 'mzbtir01/name/humidity'
device_class: "humidity"
icon: mdi:water-percent
unit_of_measurement: '%'
value_template: '{{ value }}'
- platform: mqtt
name: '客厅剩余电量'
state_topic: 'mzbtir01/name/battery'
device_class: "battery"
icon: mdi:battery
unit_of_measurement: '%'
value_template: '{{ value }}'
- platform: mqtt
name: '卧室信号强度'
state_topic: 'rssi02/name/rssi'
icon: mdi:bluetooth
unit_of_measurement: 'dBm'
value_template: '{{ value }}'
- platform: mqtt
name: '卧室信号等级'
state_topic: 'rssi02/name/rssi_level'
icon: mdi:signal
unit_of_measurement: 'Lv'
value_template: '{{ value }}'
- platform: mqtt
name: '卧室温度'
state_topic: 'mzbtir02/name/temperature'
device_class: "temperature"
icon: mdi:thermometer
unit_of_measurement: '°C'
value_template: '{{ value }}'
- platform: mqtt
name: '卧室湿度'
state_topic: 'mzbtir02/name/humidity'
device_class: "humidity"
icon: mdi:water-percent
unit_of_measurement: '%'
value_template: '{{ value }}'
- platform: mqtt
name: '卧室剩余电量'
state_topic: 'mzbtir02/name/battery'
device_class: "battery"
icon: mdi:battery
unit_of_measurement: '%'
value_template: '{{ value }}'
homeassistant:
customize:
sensor.ke_ting_xin_hao_deng_ji
sensor.ke_ting_xin_hao_qiang_du
sensor.ke_ting_wen_du
sensor.ke_ting_shi_du
sensor.ke_ting_sheng_yu_dian_liang
sensor.wo_shi_xin_hao_deng_ji
sensor.wo_shi_xin_hao_qiang_du
sensor.wo_shi_wen_du
sensor.wo_shi_shi_du
sensor.wo_shi_sheng_yu_dian_liang
ha的配置文件目录里,groups.yaml加入以下内容
huanjing:
name: 室内环境
entities:
- sensor.ke_ting_xin_hao_deng_ji
- sensor.ke_ting_xin_hao_qiang_du
- sensor.ke_ting_wen_du
- sensor.ke_ting_shi_du
- sensor.ke_ting_sheng_yu_dian_liang
- sensor.wo_shi_xin_hao_deng_ji
- sensor.wo_shi_xin_hao_qiang_du
- sensor.wo_shi_wen_du
- sensor.wo_shi_shi_du
- sensor.wo_shi_sheng_yu_dian_liang
配置完毕就去ha里检查配置并重启,然后就能看到相应的面板了。
若是之前修改过ui,那可能不会自动出现,这时要不就自行添加,要不就恢复hassio的ui自动配置
rm /usr/share/hassio/homeassistant/.storage/lovelace
ha配置文件内打开mqtt自动发现,重启即可看见魅族温度湿度传感器,以及蓝牙信号传感器
通常不需要这么做,因为打开mqtt自动发现会弄出许多杂乱的东西。
mqtt:
discovery: true
discovery_prefix: homeassistant
补充内容:关于后续添加魅族的方法,主要有几个地方需要修改及执行(XX序号自行替换修改)
1、网关魅族组件进程文件的创建,有几个加几个
信号组件
sed 's/BtrssiWorker/BtrssiXXWorker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssiXX.py
湿度温度电量组件
sed 's/MzbtirWorker/MzbtirXXWorker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtirXX.py
2、网关配置文件内,组件段落的添加
# 魅族信号组件进程名,有几个魅族就加几个进程,进程名可自定义,取决于上面命令创建了几个btrssi0*.py
btrssiXX:
args:
# topic名,可以自定义,修改后影响ha相关配置
topic_prefix: rssiXX
devices:
# 魅族MAC,全大写
name: 68:3E:34:CC:XX:XX
# 数据刷新间隔,秒
update_interval: 300
# 魅族温度湿度电量组件进程名,有几个魅族就加几个进程,进程名可自定义,取决于上面命令创建了几个mzbtir0*.py
mzbtirXX:
args:
# topic名,可以自定义,修改后影响ha相关配置
topic_prefix: mzbtirXX
devices:
# 魅族MAC,全大写
name: 68:3E:34:CC:XX:XX
# 数据刷新间隔,秒
update_interval: 300
3、重启蓝牙网关,让配置生效
重启服务
systemctl restart bt-mqtt-gateway
查看服务状态
systemctl status bt-mqtt-gateway
4、ha配置文件的packages目录里,对应yaml文件里传感器段落的添加
添加在sensor:下的内容
- platform: mqtt
name: '某某信号强度'
state_topic: 'rssiXX/name/rssi'
icon: mdi:bluetooth
unit_of_measurement: 'dBm'
value_template: '{{ value }}'
- platform: mqtt
name: '某某信号等级'
state_topic: 'rssiXX/name/rssi_level'
icon: mdi:signal
unit_of_measurement: 'Lv'
value_template: '{{ value }}'
- platform: mqtt
name: '某某温度'
state_topic: 'mzbtirXX/name/temperature'
device_class: "temperature"
icon: mdi:thermometer
unit_of_measurement: '°C'
value_template: '{{ value }}'
- platform: mqtt
name: '某某湿度'
state_topic: 'mzbtirXX/name/humidity'
device_class: "humidity"
icon: mdi:water-percent
unit_of_measurement: '%'
value_template: '{{ value }}'
- platform: mqtt
name: '某某剩余电量'
state_topic: 'mzbtirXX/name/battery'
device_class: "battery"
icon: mdi:battery
unit_of_measurement: '%'
value_template: '{{ value }}'
添加在homeassistant:下customize:下的内容(传感器名称,比如sensor.mou_mou_xin_hao_deng_ji,是来源于platform里的name: '某某信号等级',由ha自动生成拼音和下划线,若是不确定是否写对,可以到开发者工具里的状态标签下查看):
sensor.mou_mou_xin_hao_deng_ji
sensor.mou_mou_xin_hao_qiang_du
sensor.mou_mou_wen_du
sensor.mou_mou_shi_du
sensor.mou_mou_sheng_yu_dian_liang
5、ha配置目录里groups.yaml文件内的段落添加(传感器名称,比如sensor.mou_mou_xin_hao_deng_ji,是来源于platform里的name: '某某信号等级',由ha自动生成拼音和下划线,若是不确定是否写对,可以到开发者工具里的状态标签下查看):
moumouhuanjing:
name: 某某环境
entities:
- sensor.mou_mou_xin_hao_deng_ji
- sensor.mou_mou_xin_hao_qiang_du
- sensor.mou_mou_wen_du
- sensor.mou_mou_shi_du
- sensor.mou_mou_sheng_yu_dian_liang
6、在ha里检查配置并重启
补充内容:关于自定义电量百分比
范例:
创建电量百分比定义
cat <<'EOF' > /root/bt-mqtt-gateway/cr2032
if v > 3:
return 100
elif v > 2.95:
return 95
elif v > 2.90:
return 90
elif v > 2.85:
return 85
elif v > 2.80:
return 80
elif v > 2.75:
return 75
elif v > 2.70:
return 70
elif v > 2.65:
return 65
elif v > 2.60:
return 60
elif v > 2.55:
return 55
elif v > 2.50:
return 50
elif v > 2.45:
return 45
elif v > 2.40:
return 40
elif v > 2.35:
return 35
elif v > 2.30:
return 30
elif v > 2.25:
return 25
elif v > 2.20:
return 20
elif v > 2.15:
return 15
elif v > 2.10:
return 10
elif v > 2.05:
return 5
elif v > 2:
return 1
EOF
把定义替换至“湿度温度电量组件进程”,多个魅族自行增加命令条数(XX序号注意替换修改)
sed -e 's/MzbtirWorker/MzbtirXXWorker/g' -e '/def get_cr2032_to_battery(v):/r /root/bt-mqtt-gateway/cr2032' -e '/if v > 3:/,+11d' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtirXX.py
懒人省心复制粘贴一次性执行命令列表
(蓝牙bluetoothctl能成功搜索到魅族蓝牙MAC后才能使用)
若是最后不成功,建议按文章内的步骤详解走一遍,看看是哪里出问题
已删除所有#注释内容(主要是因为中文注释,远程ssh复制粘贴时,可能会乱码,造成错误)
先进入root,修改好下方mqtt服务器与魅族MAC这些信息,然后连着最后一个空行复制,进入ssh粘贴
git拉取后的工作目录在/root/bt-mqtt-gateway/bt-mqtt-gateway,可自行修改替换
apt-get update
apt-get install git build-essential python3 python3-virtualenv python3-pip python3-wheel bluetooth bluez libglib2.0-dev virtualenv python3-setuptools -y
mkdir /root/bt-mqtt-gateway
cd /root/bt-mqtt-gateway/
git clone https://github.com/meishild/bt-mqtt-gateway.git
cd /root/bt-mqtt-gateway/bt-mqtt-gateway
virtualenv -p python3 .venv
source .venv/bin/activate
cat <<'EOF' > /root/bt-mqtt-gateway/bt-mqtt-gateway/requirements.txt
paho-mqtt
pyyaml
interruptingcow
apscheduler
bluepy
btlewrap
EOF
pip3 install -r requirements.txt
sed 's/BtrssiWorker/Btrssi01Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi01.py
sed 's/BtrssiWorker/Btrssi02Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/btrssi02.py
sed 's/MzbtirWorker/Mzbtir01Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir01.py
sed 's/MzbtirWorker/Mzbtir02Worker/g' /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir.py > /root/bt-mqtt-gateway/bt-mqtt-gateway/workers/mzbtir02.py
cat <<'EOF' > /root/bt-mqtt-gateway/bt-mqtt-gateway/config.yaml
mqtt:
host: 192.168.1.1
port: 1883
username: username
password: password
#ca_cert: /etc/ssl/certs/ca-certificates.crt
#ca_verify: False
#topic_prefix: hostname
client_id: bt-mqtt-gateway
availability_topic: lwt_topic
manager:
sensor_config:
topic: homeassistant
retain: true
topic_subscription:
update_all:
topic: homeassistant/status
payload: online
command_timeout: 35
workers:
btrssi01:
args:
topic_prefix: rssi01
devices:
name: 68:3E:34:CC:XX:X1
update_interval: 300
mzbtir01:
args:
topic_prefix: mzbtir01
devices:
name: 68:3E:34:CC:XX:X1
update_interval: 300
btrssi02:
args:
topic_prefix: rssi02
devices:
name: 68:3E:34:CC:XX:X2
update_interval: 300
mzbtir02:
args:
topic_prefix: mzbtir02
devices:
name: 68:3E:34:CC:XX:X2
update_interval: 300
EOF
cat <<'EOF' > /etc/systemd/system/bt-mqtt-gateway.service
[Unit]
Description=Bluetooth MQTT gateway
Documentation=https://github.com/zewelor/bt-mqtt-gateway
After=network.target
[Service]
Type=simple
WorkingDirectory=/root/bt-mqtt-gateway/bt-mqtt-gateway
ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
#ExecStart=/root/bt-mqtt-gateway/bt-mqtt-gateway/.venv/bin/python3 /root/bt-mqtt-gateway/bt-mqtt-gateway/gateway.py
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable bt-mqtt-gateway
systemctl start bt-mqtt-gateway
systemctl status bt-mqtt-gateway
写作动机:
这些年全靠国内外各位大佬的辛勤奉献,使得现在智能家居的解决方案遍地开花!本人作为伸手党十分不好意思,于是抽空折腾了一篇技术文章,用于回馈大家以及帮助过我的各位朋友!文内对各条指令都做了解释,方便各位理解学习linux的一些知识,另外您还可以学习到许多小技巧,比如一条命令替换某文本文件内容并输出到一个新文件、一条命令替换某文本文件所有内容、不需要脚本也能懒人复制粘贴一次执行多条命令,等等......
文末再次请大家多多分享文章,点赞、收藏、评论!谢谢!
全文完!希望大家玩的嗨皮!
眼睛君
校验提示文案
夏昸
校验提示文案
狂吞耗子药
校验提示文案
NAS群-嘿嘿
校验提示文案
值友5900192541
校验提示文案
casatift
校验提示文案
casatift
校验提示文案
眼睛君
校验提示文案
值友5900192541
校验提示文案
NAS群-嘿嘿
校验提示文案
夏昸
校验提示文案
狂吞耗子药
校验提示文案