找回密码
 立即注册
查看: 119556|回复: 172

[进阶教程] 一个HASS同时连多个MQTT服务器的方法——MQTT桥接

 火... [复制链接]
 

123

主题

4548

回帖

1万

积分

管理员

囧死

积分
16548
金钱
11792
HASS币
45
发表于 2019-6-28 00:15:40 | 显示全部楼层 |阅读模式
我们知道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,启用自定义配置文件。

111.png

该选项开启后,将自动读取/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!




评分

参与人数 3金钱 +13 收起 理由
sorrypqa + 8 大神666!
zin + 2 厉害了word楼主!
netsnake + 3 感谢楼主分享!

查看全部评分

回复

使用道具 举报

0

主题

22

回帖

149

积分

论坛积极会员

积分
149
金钱
127
HASS币
0
发表于 2019-6-28 00:22:54 | 显示全部楼层
本帖最后由 anjkbjw 于 2019-6-28 00:27 编辑

沙发,支持,帮顶。
回复

使用道具 举报

16

主题

201

回帖

2243

积分

论坛技术达人

积分
2243
金钱
1991
HASS币
140
发表于 2019-6-28 00:29:09 | 显示全部楼层
支持,算不算是作为冗余?
回复

使用道具 举报

 

123

主题

4548

回帖

1万

积分

管理员

囧死

积分
16548
金钱
11792
HASS币
45
 楼主| 发表于 2019-6-28 00:42:07 | 显示全部楼层
fineemb 发表于 2019-6-28 00:29
支持,算不算是作为冗余?

不算冗余,理论上两个mqtt broker是独立的,桥接完就相当于一个了。
回复

使用道具 举报

19

主题

695

回帖

4126

积分

元老级技术达人

积分
4126
金钱
3402
HASS币
60
发表于 2019-6-28 01:06:35 来自手机 | 显示全部楼层
我用的是emqtt,装在另一台机子上,怎么办?
回复

使用道具 举报

8

主题

2078

回帖

6155

积分

论坛元老

流水无味

积分
6155
金钱
4069
HASS币
145

灌水之王

发表于 2019-6-28 07:34:58 | 显示全部楼层
我选择镜像一个HA 来调试
回复

使用道具 举报

4

主题

65

回帖

587

积分

论坛技术达人

积分
587
金钱
503
HASS币
60
发表于 2019-6-28 08:27:39 | 显示全部楼层
这么搞能增加稳定性么?如果一个挂了,会不会影响整个mqtt服务?
回复

使用道具 举报

mitu 手机认证

6

主题

751

回帖

6223

积分

论坛元老

积分
6223
金钱
5461
HASS币
20
发表于 2019-6-28 08:34:16 | 显示全部楼层
不错的方法。。。
回复

使用道具 举报

40

主题

3016

回帖

1万

积分

超级版主

Nero

积分
11150
金钱
8044
HASS币
182
发表于 2019-6-28 08:37:09 | 显示全部楼层
为了保住我的JJ~不敢不回帖

但在特定情况下,我们又想一个HASS连接两个或以上MQTT服务器(比如有一个稳定的HASS在跑,上面接的有相关MQTT设备,同时又有一个测试版HASS在跑,而测试版HASS中又想连接稳定版HASS中的MQTT设备)


所以,囧大的意思是?两个 HASS 连接一个 mqtt 服务器,还是一个 HASS 连接两个 mqtt服务器?还是两个 HASS 连接两个 MQTT 服务器?
Nero
回复

使用道具 举报

40

主题

3016

回帖

1万

积分

超级版主

Nero

积分
11150
金钱
8044
HASS币
182
发表于 2019-6-28 08:39:58 | 显示全部楼层
houhd 发表于 2019-6-28 01:06
我用的是emqtt,装在另一台机子上,怎么办?

意思就是

hass → emqtt (作为客户端订阅)→ mqtt
                ↓                                           ↓
             设备                                       设备
Nero
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-5-1 09:46 , Processed in 1.133524 second(s), 28 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表