魅族蓝牙温度湿度遥控器,利用蓝牙MQTT网关,接入HomeAssistant

2020-04-10 13:42:33 12点赞 62收藏 7评论

创作立场声明:这些年全靠国内外各位大佬的辛勤奉献,使得现在智能家居的解决方案遍地开花!本人作为伸手党十分不好意思,于是抽空折腾了一篇技术文章,用于回馈大家以及帮助过我的各位朋友!文内对各条指令都做了解释,方便各位理解学习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后才能使用)

魅族蓝牙温度湿度遥控器,利用蓝牙MQTT网关,接入HomeAssistant

魅族蓝牙温度湿度遥控器,利用蓝牙MQTT网关,接入HomeAssistant

魅族蓝牙温度湿度遥控器,与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,不影响使用

魅族蓝牙温度湿度遥控器,利用蓝牙MQTT网关,接入HomeAssistant

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里检查配置并重启,然后就能看到相应的面板了。

魅族蓝牙温度湿度遥控器,利用蓝牙MQTT网关,接入HomeAssistant

若是之前修改过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的一些知识,另外您还可以学习到许多小技巧,比如一条命令替换某文本文件内容并输出到一个新文件、一条命令替换某文本文件所有内容、不需要脚本也能懒人复制粘贴一次执行多条命令,等等......

文末再次请大家多多分享文章,点赞、收藏、评论!谢谢!

全文完!希望大家玩的嗨皮!

展开 收起
7评论

  • 精彩
  • 最新
  • 谢谢分享,这车还是去年的,受众太小了,要我肯定不会在这儿发 [喜极而泣]

    校验提示文案

    提交
    谢谢大佬支持!只能发这边了,别的地方我没高级账号哈哈哈哈哈 [狂汗]

    校验提示文案

    提交
    收起所有回复
  • 走过路过,不要错过,保姆教程,小白福音。

    校验提示文案

    提交
  • 泉州老王威武!

    校验提示文案

    提交
  • 第一次发文,张大妈的排版没搞清楚,少了许多隔开段落的空行 [喜极而泣]

    校验提示文案

    提交
  • 虽然看不懂,给大佬递茶先

    校验提示文案

    提交
  • 这车已经没了,性价比很高,但实用性不高

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
62
扫一下,分享更方便,购买更轻松