ioBroker MQTT适配器配置指南【1. Client篇】

ioBroker的mqtt适配器

MQTT协议相信对每一个接触智能家居的用户,都不会很陌生。许多智能设备都通过此协议与云端或智能家居平台通信,ioBroker与其他智能家居平台一样,也有系统自带的mqtt适配器

此图片大概描述了mqtt协议的工作过程。

安装适配器

首先需要明确一下,ioBroker有关mqtt的适配器有两个,一个是MQTT Broker/Client,另一个是MQTT client

这篇帖子介绍的是MQTT Broker/Client(版本2.0.4)。

安装mqtt适配器和其他适配器一样,在管理员页面,点击添加实例按钮安装即可。

配置适配器

这个适配器分为Broker(也就是接收所有mqtt消息的中枢)和Client(发布mqtt topic或者订阅mqtt topic)两种模式。我们可以创建多个适配器分别工作在Broker和Client状态下,互不影响。此帖先讲Client相关的内容。

Client通信配置

这页是基本的通信配置页面。主要需要配置以下几个参数

  • Type:实例的类型,是Broker模式还是Client模式。此处我们选择Client模式。
  • URL:创建连接的IP地址,需要和Broker的IP一致。
  • port:创建连接的Port,需要和Broker的Port一致。
  • Secure:是否ssl连接。
  • User:创建连接时的用户名,需要和Broker设置的用户名一致。
  • Password:创建连接时的密码,需要和Broker设置的密码一致。
  • Password Confirmation:再次输入连接时的密码。

Client MQTT配置

  • Subscribe patterns: 订阅哪些topic。
    如果是#表示Broker收到的所有的topic都会发给该Client。
    如果是javascript/#表示Broker只有以javascript/开头的topic,才会转发给该Client。
    如果要订阅多个匹配,使用英文逗号分隔每一个匹配的模式。

  • Prefix for all topics:当此Client发布任何topic的时候,都会在topic前加上这里定义的前缀。
    比如此Client要发布hass-mqtt\0\switch\set这个topic,如果在此处定义Prefix是haha\,则发布出去的topic是haha\hass-mqtt\0\switch\set

  • Mask to publish own states:需要发布哪些ioBroker系统的状态。
    默认不配置的话,此client会监听ioBroker系统所有的对象的状态,并且当状态发生变化时,将这个变化信息发布到Broker。
    比如当hass-mqtt.0.switch.state的值变为false了,此Client就会向Broker发布这样的topichass-mqtt\0\switch\state,值为false
    如果配置此项,仅有此项ioBroker状态变化时才会发布。

  • Publish only on change: 配合上一个描述,如果勾选此项,仅有监听的ioBroker系统状态值发生了变化,才会发布此状态变化到Broker。

  • Publish own states on connection: 配合上上个描述,如果勾选此项,当连接到Broker之后,将监听状态的当前值都发布到mqtt系统中。

  • Trace output for every message:如果勾选此项,在适配器的debug级别的log中,将打印出发出的每一条mqtt消息的详细内容。

  • Send state (ack=true) too:如果勾选此项,监听的ioBroker状态发生变化,不管变化值ack为true与否,都会交与client处理。如果不勾选,只有(ack=false)的状态才会交给client处理。

  • Use different topic for get and set:如果勾选此项,监听的ioBroker状态发生变化后,需要发送给Broker时,会在topic增加\set后缀。从Broker获取topic值时,并不会增加。
    比如hass-mqtt.0.switch.state的值发生了变化,发送给Broker的topic将变为hass-mqtt\0\switch\state\set。而获取state值时,仍然是订阅的hass-mqtt\0\switch\statetopic。

  • Client ID:与Broker建立连接时的ID。

  • Max topic:topic的最长长度。

  • Interval before send topics by connection:当建立连接后,需要等待多久再发送监听的ioBroker状态值。

  • Send interval:发送mqtt消息之间的间隔。

  • Default QoS:发送mqtt消息时QoS值的设置。

  • Default retain flag:发送mqtt消息时retain值的设置。

Client连接后的对象

  • info.connection:表示是否与Broker建立了连接。
  • 其他对象是Client收到了自己订阅的topic,但是topic并没有能够对应到ioBroker系统的对象。

Client收到MQTT消息

当Client收到订阅的消息后,分两种情况。

  1. 该消息topic能够符合ioBroker的object的命名规范,比如收到hass-mqtt\0\switch\state这样的topic,此时ioBroker系统中也有对应的hass-mqtt.0.switch.state的对象,那么该消息的值将直接赋值到该ioBroker对象的状态值中。
  2. 该消息topic不符合ioBroker的object的命名规范,比如收到homeassistant\switch\config这样的topic,此时Client适配器会在自己的命名空间内创建这样的对象,并且保存topic的值。

Client发送MQTT消息

MQTT发送消息也有三种方式。

  1. 如之前Client配置中讲到,Client可以配置监听ioBroker系统的指定的对象状态值,当值改变后,会将此对象按照规则转换为topic,并且将状态值作为payload发送出去。
    比如hass-mqtt.0.switch.state对象状态变为false。则会发送一条消息,topic是hass-mqtt\0\switch\state,值为false

  2. 在其他适配器创建ioBroker对象时,如果在native: {topic: "specific/topic/demo"}定义了topic这样的字段,那么当此ioBroker状态发生变化时,topic将以此定义的字段为topic发送mqtt消息。

  3. mqtt client自己命名空间下的所有对象,如果状态值改变了,则也会发送mqtt消息。比如mqtt.0.homeassistant.switch.demo.power的值变为true,则client会发布一条mqtt消息,topic是homeassistant.switch.demo.power(注意此处没有mqtt\0\的前缀),值为true。

下期预告

下一篇帖子将介绍如何配置mqtt server。

超级详细的基础教程,学习了。谢谢大佬(传说中的老妖大佬?)。

嗯,是的。

我后期会写mqtt broker的教程。
那个需要写的更多。。。

膜拜老妖。

不敢不敢

妖神,mqtt broker的教程啥时出呢

本人小白一枚,请问大神,我要安装这适配器,是不是要在docker安装好mqtt?目前只是我按照你这里的教程设置后,测试的时候总是显示英文连接超时,应该就是尚未搭建好。

这个插件有两个用途,一个是可以当服务端,一个当客户端。你可以先去百度mqtt的客户端和服务端分别是什么。然后回来看这个教程,可能会有深刻的了解。

好的,谢谢萝卜大神,我去了解下,再来学习。


提示无法连接,请高手指点一下?我重加载了也是一样

点配置出现这个:

你这是什么环境下安装的呢

请问这个适配器的界面是怎么进入的呢