MQTT是一种开放的OASIS和ISO标准轻量级发布-订阅网络协议,用于在设备之间传输消息。典型的MQTT通信拓扑包括:
目前,RouterOSl雷竞技可以充当MQTT发布者,也可以通过容器特性。
子菜单:/物联网mqtt
请注意:物联网包装是必需的。
RouterOS 6.48.3版本自带IoT包。l雷竞技你可以从我们的下载页面-在“额外包裹”栏。
您可以在下面找到更多MQTT发布场景的应用程序示例:
上述示例中的设置适用于任何RouterOS设备。l雷竞技唯一需要记住的是,AWS和Azure的示例展示了从蓝牙有效负载构建MQTT消息的脚本,目前只有结支持蓝牙。对于不是l雷竞技KNOT的RouterOS设备,您将需要根据需要更改脚本(例如,您可以使用本指南中的基本脚本)。
使用实例添加一个新的代理。
[admin@device] /iot MQTT代理添加
可配置属性如下所示:
财产 | 描述 |
---|---|
地址(IP |主机名;默认值:) | 代理的IP地址或主机名 |
证书(字符串;默认值:) |
将用于SSL连接的证书 |
客户机id(字符串;默认值:) |
用于连接的唯一ID。代理使用这个ID来标识客户端。 |
的名字(字符串;默认值:) |
代理的描述性名称 |
密码(字符串;默认值:) |
代理的密码(如果代理需要) |
港口(整数:0 . . 1 - 4294967295;默认值:1883) |
代理使用的网络端口 |
ssl(是|不是;默认值:没有) |
Secure Socket层配置 |
用户名(字符串;默认值:) | 代理的用户名(如果代理需要) |
财产 | 描述 |
---|---|
代理(字符串;默认值:) |
选择要在其中发布消息的代理 |
消息(字符串;默认值:) |
希望发布到代理的消息 |
qos(整数:0 . . 1 - 4294967295;默认值:0) |
服务质量参数,由代理定义 |
保留(是|不是;默认值:没有) |
如果没有人订阅该主题,是保留该消息还是丢弃该消息。此参数由代理定义。 |
主题(字符串;默认值:) |
主题,由代理定义 |
MQTT发布的示例如下所示:
[admin@device] /iot mqtt> publish broker=AWS topic=my/test/topic message="{\"temperature\":15}"
在这种情况下,AWS是在代理部分中配置的代理名称,我的/测试/主题主题(在服务器端/代理本身上配置)和”{\“温度\”:15}”是您希望发布的消息(在这个特定的示例中,是JSON格式)。Retain和QoS参数都是可选的——都由代理定义。
在这个场景中,我们的代理是AWS.
为了查看显示的消息,您需要预先订阅主题(在本例中,我的/测试/主题).
订阅主题后,就可以发布消息。AWS(或任何其他代理)应该显示以下消息:
您还可以使用脚本(使该过程自动化)。例如,你可以这样运行一个脚本:
#所需软件包:物联网
################################ 配置 ################################
应该用于发布的现有MQTT代理的名称
:本地代理“AWS”# MQTT主题,消息应该在其中发布
:local topic" my/test/topic"#################################### 系统 ###################################
:put("[*]正在收集系统信息…")
:local cpuLoad [/system resource get cpu-load]
: free-memory[/系统资源获取free-memory]
:local usedMemory ([/system resource get total-memory] - $freeMemory)
:local rosVersion[/系统包get value-name=version \ .
[/系统包查找where name ~ "^routeros"]]l雷竞技
:local model [/system ios版雷竞技官网入口routerboard get value-name=model]
:local serialNumber [/system ios版雷竞技官网入口routerboard get value-name=serial-number]
:local upTime[/系统资源get upTime]#################################### MQTT #####################################
:本地消息\
“{\”模式\”:\ " $模型\ ",\
serialNumber美元\“sn \”,\“\”,\
rosVersion美元\“活性氧\”,\“\”,\
cpu \“\”:cpuLoad美元,\
“眉目”\ \”:usedMemory美元,\
fmem \“\”:$ freeMemory \
\ \“运行时间”:\ " $正常运行时间\“}”:日志信息"$message";
:put("[*]总消息大小:$[:len $message] bytes")
:put("[*]发送消息到MQTT代理…")
/iot MQTT发布broker=$broker topic=$topic message=$message
:put ("[*] Done")
脚本从RouterOS设备收集数据(型号、序列号、RouterOS版本、当前l雷竞技CPU、已用内存、空闲内存和正常运行时间),并以JSON格式将消息(数据)发布给代理:
不要忘记根据您的设置更改脚本的“Configuration”部分。