本帖最后由 seon 于 2020-12-1 16:55 编辑
首先感谢@xiaopi 同学的分享,正准备琢磨要判断家里是否有人的时候,就看到了他的帖子,提到了一个类似monitor的项目叫room-assistant。
打开官网看了一眼简介,这项目的目标是实现room级的自动化,也就是能做到根据人在哪个具体的房间而触发相应的自动化。
那看起来,我只想做整个屋子的检测应该也不在话下了。于是进一步看了下安装方法,似乎也还不算复杂,那就搞起来吧!
官方提供三种安装方式: NodeJS、Docker和Hass.io add-on
因为已经安装了Hass.io,所以最理想当然是Hass.io的add-on了,可惜官网给的那个repo,我没能成功添加到Hass.io里,只好作罢
最后选择了NodeJS的方式,反正我的树莓派上早已经安装好NodeJS的环境了。
下面就是我基于树莓派4B的具体的配置步骤,其实就是官网的步骤我给翻译一下
1、安装NodeJS,已经安装过的同学可以跳过这一步
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
复制代码
2、安装其他的相关依赖
sudo apt-get update
sudo apt-get install build-essential libavahi-compat-libdnssd-dev bluetooth libbluetooth-dev libudev-dev
复制代码
3、安装room-assistant,由于国内访问npm软件源速度很慢,所以这里指定使用淘宝的npm源来安装,速度会快很多
sudo npm i --global --unsafe-perm room-assistant --registry=https://registry.npm.taobao.org
复制代码
安装期间有些native的模块需要编译,会报出一些warning,不用担心,只要最后出现类似下面的内容,就说明安装成功了,时间会有点长
+ [email protected]
added 422 packages from 339 contributors and updated 1 package in 263.822s
复制代码
4、如果需要依赖蓝牙设备进行检测,还需要执行下面的命令进行授权。我主要就是通过蓝牙检测手机和手表的,所以需要执行这些命令
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
sudo setcap cap_net_raw+eip $(eval readlink -f `which hcitool`)
sudo setcap cap_net_admin+eip $(eval readlink -f `which hciconfig`)
复制代码
以上,room-assistant就安装完成了,下面是配置。
room-assistant配置
下面的配置过程,均需要在pi用户下执行。
1、创建配置目录
mkdir -p ~/room-assistant/config
复制代码
2、创建配置文件
vi ~/room-assistant/config/local.yml
复制代码
3、输入配置文件的内容,方括号括起来的部分 需要根据你的环境替换为实际值。MAC地址是手机蓝牙的MAC地址,以iPhone 为例,查看方式为:设置 - 通用 - 关于本机 - 蓝牙
global:
integrations:
- homeAssistant
- bluetoothClassic
homeAssistant:
mqttUrl: '[mqtt://homeassistant.local:1883]'
mqttOptions:
username: [youruser]
password: [yourpass]
bluetoothClassic:
addresses:
- [<bluetooth-mac-of-device-to-track>]
复制代码
OK,配置完成。现在可以到你的room-assistant目录下面,去启动了
经过一小段时间的等待,room-assistant启动完成后,应该会打印出以下内容
HomeAssistantService: Successfully connected to MQTT broker at mqtt://192.168.1.153:1883
12/1/2020, 3:35:41 PM - info - ConfigService: Loading configuration from /usr/lib/node_modules/room-assistant/dist/config/definitions/default.js, config/local.yml
12/1/2020, 3:35:41 PM - info - ClusterService: Starting mDNS advertisements and discovery
12/1/2020, 3:35:41 PM - info - NestApplication: Nest application successfully started
12/1/2020, 3:35:42 PM - info - ClusterService: raspberrypi has been elected as leader
12/1/2020, 3:35:42 PM - info - EntitiesService: Refreshing entity states
12/1/2020, 3:35:54 PM - info - HomeAssistantService: Device tracker requires manual setup in Home Assistant with topic: room-assistant/device_tracker/bluetooth-classic-f8-87-f1-12-d6-af-tracker/state
复制代码
可以看到,room-assistant已经成功连接到了mqtt,并且提示需要到home-assistant里面,手动配置device tracker
到这里,说明room-assistant的安装和配置,都已经没问题了。以后为了每次重启树莓派,room-assistant都能自动启动,需要配置成一个service。
1、按ctrl + c结束掉刚刚启动的room-assistant
2、新建room-assistant.service文件
sudo vi /etc/systemd/system/room-assistant.service
复制代码
3、写入以下内容
[Unit]
Description=room-assistant service
[Service]
ExecStart=/usr/bin/room-assistant
WorkingDirectory=/home/pi/room-assistant
Restart=always
RestartSec=10
User=pi
[Install]
WantedBy=multi-user.target
复制代码
4、设置为自动启动,并且启动service
sudo systemctl enable room-assistant.service
sudo systemctl start room-assistant.service
复制代码
好了,以后基本上就不用管它了~
如果以后有新的设备需要监测,就编辑room-assistant的配置文件
vi ~/room-assistant/config/local.yml
复制代码
添加了新的蓝牙MAC后,执行
sudo systemctl restart room-assistant.service
复制代码
即可完成更新。
现在就转到home-assistant里面,继续配置
home-assistant配置
1、在ha的配置目录里,新建known_devices.yaml。如果已经有这个文件了,就跳过这一步
2、在known_devices.yaml新添加一个要track的对象,方括号括起来的部分 你可以自定义
[member_1]:
hide_if_away: false
icon:
mac:
name: [username]
picture:
track: true
复制代码
3、在packages目录下新建device_tracker.yaml,写入以下内容。其中的member_1需要跟上面定义的一样。后面的内容,就是刚刚room-assistant启动后,最后一行所显示的内容,实际上是mqtt的topic
device_tracker:
- platform: mqtt
payload_home: 'true'
payload_not_home: 'false'
devices:
[member_1]: '[room-assistant/device_tracker/bluetooth-classic-xx-xx-xx-xx-xx-xx-tracker/state]'
复制代码
OK,大功告成,重启ha,在你的仪表盘里面添加一个entity: device_tracker.member_1,就可以看到状态了。你可以关掉手机蓝牙,等上一会,就会发现member_1变为离家状态,再打开蓝牙,过一会就会变为在家状态。
剩下的事情,大家就可以自由发挥啦