我们知道HASS连一个MQTT服务器很简单,在配置文件中加入以下代码就行了
mqtt:
broker: 192.168.6.166
port: 1883
username: mqtt
password: mqtt
但如果想在同一个HASS实例中,连接多个MQTT怎么办呢?是否能像下面代码一样设置呢?
mqtt:
- broker: 192.168.6.166
port: 1883
username: mqtt
password: mqtt
- broker: 192.168.6.188
port: 1883
username: mqtt
password: mqtt
答案是否定的!这样设置会报错,不允许有多个broker出现!为什么呢?这也可以理解,比如你连接了两个不同的mqtt服务器,而你的mqtt开关如下配置的:
switch:
- platform: mqtt
name: bedroom_main_light
state_topic: 'hassmart/switch/hassmart_1key_module_C2756C_1/state'
command_topic: 'hassmart/switch/hassmart_1key_module_C2756C_1/set'
qos: 1
retain: false
那么问题来了,这两个topic究竟是哪个mqtt服务器里的?这里根本无法区分!所以HASS只允许配置一个mqtt服务器。
但在特定情况下,我们又想一个HASS连接两个或以上MQTT服务器(比如有一个稳定的HASS在跑,上面接的有相关MQTT设备,同时又有一个测试版HASS在跑,而测试版HASS中又想连接稳定版HASS中的MQTT设备),能否实现呢?答案是肯定的!那就是利用Mosquitto的桥接功能来实现。原理就相当于主mqtt服务器作为一个client连接到另外的mqtt服务器上,并订阅相关的topic,转发相关的信息到本服务器的相同topic上,并把本服务器上的topic同步到另外mqtt服务器的相同topic上。
这里再补充一个需求样例,比如你一个HASS既想连接局域网内的MQTT服务器,又想连接外网的MQTT服务器,如果不桥接是无法实现的。
下面说下HASS.IO里的MQTT桥接方法:
首先,在Mosquitto broker addon里,将customize里的active由false改为true,启用自定义配置文件。
该选项开启后,将自动读取/share/mosquitto/目录下的以.conf结尾的配置文件。所以,这里需要在/share/目录下新建mosquitto文件夹,在mosquitto文件夹里再建立一个mqtt-bridge.conf文件,将以下代码拷贝到此文件中(注意修改192.168.6.8为你要桥接的mqtt服务器地址,topic我这里只同步hassmart开头的,要想同步所有topic,直接用#,both表示出和入的信息均同步,remote_username和remote_password分别为要桥接的mqtt服务器用户名和密码)。
# Additional MQTT Broker
connection mqtt-bridge
address 192.168.6.8:1883
topic hassmart/# both
remote_username mqtt
remote_password mqtt
保存文件后,重启mosquitto broker addon即可生效。
此时接入到桥接mqtt服务器上的设备,均可直接接入当前HASS了,加入相关代码,重启HASS,接下来就是见证奇迹的时刻了!
以其它方式安装的mosquitto,直接修改mosquitto.conf,加入上述代码,重启mosquitto服务即可实现相同的效果。
更多好玩的桥接设置,请自行参阅mosquitto官方文档。
最后还有最重要一点:
Happy automating!
|