『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 104610|回复: 170

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

  [复制链接]

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
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

主题

217

帖子

2229

积分

论坛技术达人

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

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

18

主题

704

帖子

4024

积分

元老级技术达人

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

使用道具 举报

8

主题

2073

帖子

6053

积分

论坛元老

流水无味

Rank: 8Rank: 8

积分
6053
金钱
3980
HASS币
145

灌水之王

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

使用道具 举报

4

主题

69

帖子

587

积分

论坛技术达人

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

使用道具 举报

6

主题

743

帖子

5956

积分

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
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

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

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

意思就是

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

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 06:01 , Processed in 0.061479 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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