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

2020-04-10 13:42:33 12点赞 61收藏 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的一些知识,另外您还可以学习到许多小技巧,比如一条命令替换某文本文件内容并输出到一个新文件、一条命令替换某文本文件所有内容、不需要脚本也能懒人复制粘贴一次执行多条命令,等等......

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

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

展开 收起

魅族 MEIZU Lipro 驱动电源 55W输出功率 后切调光 智能无频闪 防雷击过压过温短路保护设计

魅族 MEIZU Lipro 驱动电源 55W输出功率 后切调光 智能无频闪 防雷击过压过温短路保护设计

暂无报价

魅族 MEIZU Lipro LED 灯泡 6W(2700K) E27螺口 舒适低蓝光节能省电无频闪 单只装

魅族 MEIZU Lipro LED 灯泡 6W(2700K) E27螺口 舒适低蓝光节能省电无频闪 单只装

暂无报价

魅族 MEIZU Lipro LED 灯泡 8W(3400K) E27螺口 舒适低蓝光节能省电无频闪 单只装

魅族 MEIZU Lipro LED 灯泡 8W(3400K) E27螺口 舒适低蓝光节能省电无频闪 单只装

暂无报价

魅族 MEIZU Lipro LED 灯泡 8W(4000K) E27螺口 舒适低蓝光节能省电无频闪 单只装

魅族 MEIZU Lipro LED 灯泡 8W(4000K) E27螺口 舒适低蓝光节能省电无频闪 单只装

暂无报价

魅族 MEIZU Lipro LED 地脚灯 智能雷达感应 适用于楼梯过道卧室客厅车库 柔光低功耗

魅族 MEIZU Lipro LED 地脚灯 智能雷达感应 适用于楼梯过道卧室客厅车库 柔光低功耗

暂无报价

魅族 MEIZU Lipro LED 智能吸顶灯(直径40)超薄灯体 高色彩还原 健康光舒适无可见频闪 支持AI语音/APP调控

魅族 MEIZU Lipro LED 智能吸顶灯(直径40)超薄灯体 高色彩还原 健康光舒适无可见频闪 支持AI语音/APP调控

暂无报价

魅族 MEIZU Lipro LED 灯泡 6W(3400K) E27螺口 舒适低蓝光节能省电无频闪 单只装

魅族 MEIZU Lipro LED 灯泡 6W(3400K) E27螺口 舒适低蓝光节能省电无频闪 单只装

暂无报价

魅族 MEIZU Lipro LED 橱柜灯(有线供电版) 简易安装 人体智能感应 适用于厨房玄关书桌衣柜

魅族 MEIZU Lipro LED 橱柜灯(有线供电版) 简易安装 人体智能感应 适用于厨房玄关书桌衣柜

暂无报价

MEIZU 魅族 插排快充版 多功能插座

MEIZU 魅族 插排快充版 多功能插座

暂无报价

魅族 MEIZU Lipro LED 灯带 3500K 单卷5米 柔性布光 自由裁剪 智能节能 适用于客厅卧室书房

魅族 MEIZU Lipro LED 灯带 3500K 单卷5米 柔性布光 自由裁剪 智能节能 适用于客厅卧室书房

暂无报价

魅族 MEIZU Lipro LED 筒灯 11W(4000K)开孔75-80mm 嵌入式低蓝光智能节能无频闪防眩光

魅族 MEIZU Lipro LED 筒灯 11W(4000K)开孔75-80mm 嵌入式低蓝光智能节能无频闪防眩光

暂无报价

魅族(MEIZU)魅族声波电动牙刷刷头 进口杜邦刷毛 立体裁切 顶部磨圆(白色两支装)

魅族(MEIZU)魅族声波电动牙刷刷头 进口杜邦刷毛 立体裁切 顶部磨圆(白色两支装)

暂无报价

魅族 MEIZU Lipro LED 灯泡 8W(2700K) E27螺口 舒适低蓝光节能省电无频闪 单只装

魅族 MEIZU Lipro LED 灯泡 8W(2700K) E27螺口 舒适低蓝光节能省电无频闪 单只装

暂无报价

魅族 MEIZU Lipro LED 灯带 4000K 单卷5米 柔性布光 自由裁剪 智能节能 适用于客厅卧室书房

魅族 MEIZU Lipro LED 灯带 4000K 单卷5米 柔性布光 自由裁剪 智能节能 适用于客厅卧室书房

暂无报价

魅族 MEIZU 无线超充板 主动散热 智能静音 百搭玉润 支持Qi标准 多重保护

魅族 MEIZU 无线超充板 主动散热 智能静音 百搭玉润 支持Qi标准 多重保护

暂无报价

魅族 MEIZU Lipro LED 灯泡 6W(4000K) E27螺口 舒适低蓝光节能省电无频闪 单只装

魅族 MEIZU Lipro LED 灯泡 6W(4000K) E27螺口 舒适低蓝光节能省电无频闪 单只装

暂无报价
7评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

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