介绍

其中一个选项可用于监视控件广播的信息蓝牙标签是云系统,比如AWS(亚马逊网络服务)。在本文中,我们将展示如何配置AWS和RouterOS,以便使用MQTT和HTTPS协议发布数据。l雷竞技l雷竞技在这种情况下,RouterOS将充当网关,并将BLEtag广播的数据发布到云(AWS)。在此场景中,AWS将充当MQTT代理和MQTT订阅者(服务器,数据将在其中发布/显示)。

在继续设置之前,您需要在AWS系统中创建一个帐户。你可以在下面找到更多关于如何做到这一点的信息链接

创建帐户后,确保支付卡在下面验证Your_Username >我的帐户,否则该帐户将不活跃。

服务>物联网>物联网核心

测试节中,您可以使用内置的MQTT测试客户机,这样您就可以测试发布和订阅主题。你有订阅一个主题发布到主题选项卡,允许您检查两个进程。MQTT测试客户端部分还可以显示HTTPS帖子。

AWS物联网配置

请注意:本节中显示的配置适用于MQTT发布/订阅场景,但您也可以使用相同的AWS设置测试HTTPS发布。

的事情

步骤1:导航到管理>的事情.这是配置开始的菜单(Things菜单是设备或逻辑实体的表示)。

新闻创建>创建一个单独的东西>选择一个名字下一步> >创建证书。

第二步:下载“AmazonRootCA1”。xxxx.cert. pem”证书(AWS的根CA),“xxxx.cert. pem”证书。Pem”证书(thing的证书)和“xxxx.private. Pem”证书。密钥(私钥)-“xxxx”部分对于每个新创建的证书是唯一的。


步骤3:您可以选择完成设置(通过选择)完成)或制定策略(通过选择)附加保单)。您需要向创建的“事物”添加策略,但如果您使用的是新帐户,则可能没有任何策略可供选择。不用担心,稍后您可以手动创建它们。


还有另外两个很重要的菜单安全>证书安全>政策

证书

证书菜单中,您可以创建证书、激活它们并将它们附加到策略。“Things”配置应该已经创建了证书。只需确保证书是“激活的”。要做到这一点,选择证书,单击“行动“然后点击”激活”。

政策

步骤1:创建新策略。点击“创建然后输入保单的名称。在“创建策略选项卡中有一个设置“动作”的选项。在本例中,我们将使用4个操作(物联网:发布物联网:接收物联网:订阅物联网:连接)。的示例中可以找到有关策略的更多信息链接

第二步:导航到添加语句”一节。在“行动“场,选物联网:发布物联网:接收动作,用逗号“,”分隔。在“资源是"字段替换文本"replaceWithATopic与实际相关的主题(例如)我的/测试/主题”)。在“效果“复选框标记”允许”。

第三步:点击“添加新语句”添加声明”。通过选择向语句添加操作物联网:订阅并将文本替换为资源是“场”replaceWithATopicFilter”与实际相关的主题(例如“我的/测试/主题”)。在“效果“复选框标记”允许”。

步骤4:添加最后一条语句和设置物联网:连接行动。只更改“replaceWithAClientId使用适当的客户端id(例如)测试客户端),并在“允许”复选框。要完成设置,请单击“创建”。

步骤5:您需要将证书附加到新创建的策略。要做到这一点,请转到安全>证书,选择证书,点击“行动"和"附加的政策”。

选择策略并单击“附加”。


这样,AWS设置就完成了。

端点地址(代理地址)

你可以找到端点地址在“设置部分(设置>设备数据端点)。该地址应该在RouterOS设置中配置为代理的IP/FQDN地址。l雷竞技

l雷竞技RouterOS配置

请注意为了配置MQTT,请确保物联网预先安装。

在我们的示例中,我们使用作为网关和脚本(专门为KNOT创建)来发布数据。在你的特定应用场景中,你可以使用任何RouterOS设备(安装了iot包)来发布你需要的任何数据。l雷竞技

证书

由于AWS使用SSL连接,我们将需要以前下载的证书和密钥。

进入“文件”菜单,添加到“文件列表”AmazonRootCA1.pemxxxx.cert.pem.crtxxxx.private.pem.crt

进入系统>证书并导入所有3个文件(通过“导入”按钮-一个接一个):

确保两个证书都是可信的(T),并确保“xxxx.certificate.pem”。crt”带有私钥(K)。

MQTT代理

导航到IoT>MQTT并添加一个新的代理(“+”按钮)。

在“Name”字段中命名代理(例如,AWS)。

在“地址”字段中输入/粘贴AWS地址(您可以在AWS设置中找到它)。设置>设备数据端点”- - -端点地址)。

在“port”字段中配置代理使用的端口,并通过SSL复选框(在本例中,AWS使用)启用SSL8883而且,由于我们使用证书,它需要启用SSL)。

“Username”和“Password”字段在此场景中不需要(取决于代理的配置-跳过这两个字段)。

在“客户端Id”字段中设置一个客户端Id(它是在AWS策略中配置的Id -在本例中,测试客户端)。

由于使用了SSL,因此必须在“证书”字段中选择证书(selectxxxx.certificate.pem.crt)。

点击“Apply”和“OK”完成代理的设置。

MQTT使用脚本发布

为了将数据从蓝牙标签(在我们的示例中为TG-BT5-IN)发布到AWS,我们将使用该脚本。脚本示例如下所示,可以使用此下载链接

每一行都以一个符号开头"#是指导性的,它描述了将在线下配置的参数。更改将应用于特定情况的引号“”内的参数。

#必需的包:iot

################################ 配置 ################################
应该用于发布的现有MQTT代理的名称
:本地代理“AWS”

应该发布消息的# MQTT主题
:本地主题“my/test/topic”

接口的MAC应该被用作“定位器ID”
locallocatorface“ether1”

# POSIX regex用于过滤广告蓝牙地址。如。“公元前^:33:交流”
#只包括以这3个八位字节开头的地址。
#要禁用此过滤器,请将其设置为“”
: localaddressregex ""

# POSIX regex用于过滤蓝牙广告基于他们的数据。相同
#用法与'addressRegex'相同。
:本地广告dataregex ""

#信号强度滤波器。例如-40只包括蓝牙广告
#信号强度大于-40dBm。
#要禁用此过滤器,请将其设置为“”
:local rssiThreshold "-40"

#################################### 系统 ###################################
:put("[*]收集系统信息…")
:local ifaceMac [/interface get [/interface find name=$locatorIface] mac-address]
:local cpuLoad [/system resource get cpu-load]
:local free-memory[/系统资源获取free-memory]
: localusedmemory ([/system resource get total-memory] - $freeMemory)
:local rosVersion [/system package get value-name=version \
[/system package find where name ~ "^l雷竞技routeros"]]
:local model [/system ios版雷竞技官网入口routerboard get value-name=model]
:local serialNumber [/system ios版雷竞技官网入口routerboard get value-name=serial-number]
# Health有点不确定,因为'/system Health '在ROS6中没有'find
:本地运行状况[/系统运行状况打印为值]
:本地供电电压0
: localboardtemp 0
:foreach entry in=$health do={
:如果($ entry - >“名字”=“电压”)做={:设置supplyVoltage美元($ entry - >“价值”)}
:if ($entry->"name" = "board-temperature1") do={:set $boardTemp ($entry->"value")}
}

################################## 蓝牙 ##################################
:put("[*]正在收集蓝牙信息…")
:全球btOldestAdvertisementTimestamp
:if ([:typeof $btOldestAdvertisementTimestamp] = " none ") do={
#启动后第一次运行这个脚本,需要初始化
# persistent变量
:set $btOldestAdvertisementTimestamp 0
}
: localbtprocessingstart [/system clock get time]
:本地广告[/iot蓝牙扫描仪广告打印详情\
As-value where \
epoch > $btOldestAdvertisementTimestamp和\
地址~ $addressRegex和\
data ~ $advertisingDataRegex和\
rssi > $rssiThreshold
]
:local advJson ""
:local advCount 0
:local advSeparator ""
:local lastAdvTimestamp 0
删除MAC/蓝牙地址中的分号
: localminimizemac do={
:本地最小化
:local lastIdx ([:len $address] - 1)
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $
:local char [:pick $address $idx]
:if ($char != ":")
设置$最小化$char
}
}
:返回$最小化
}

:foreach adv =$ advertising ={
:本地地址($adv->"address")
: localts ($adv->"epoch")
:本地rssi ($adv->"rssi")
:本地AD ($adv->"data")
: localobj "\
{\
\ \“id”:\ " $ [$ minimizeMac地址= $地址]\”、\
ts \“\”:ts美元,\
rssi \“\”:$ rssi \
\“ed \”:{\
\ \“广告”:\ \“美元广告\”
} \
}”
:设置$advCount ($advCount + 1)
设置$lastAdvTimestamp $ts
确保最后一个对象不以逗号结束
$advJson$advSeparator$obj"
:if ($advSeparator = "") do={
:set $advSeparator ","
}
}

:if ($advCount > 0) do={

:set $btOldestAdvertisementTimestamp $lastAdvTimestamp

}

:put("[*]找到$advCount新广告\
(处理时间:$[([/system clock get time] - $btProcessingStart)])")

#################################### MQTT #####################################
:本地消息\
“{\
\"clientId\":\"$[/iot mqtt broker get value-name=client-id \
[/iot MQTT broker find name=$broker]]\",\
\ " t \”:0 \
\ \“v \ ": 1日
OldestAdvertisementTimestamp \“\”:$ btOldestAdvertisementTimestamp \
\“loc \”:[{\
\ \“id”:\ " $ $ minimizeMac地址= $ ifaceMac \”、\
\ \“标签”:[$ advJson], \
\“ed \”:{\
\”模式\”:\ " $模型\ ",\
serialNumber美元\“sn \”,\“\”,\
rosVersion美元\“活性氧\”,\“\”,\
cpu \“\”:cpuLoad美元,\
“眉目”\ \”:usedMemory美元,\
fmem \“\”:$ freeMemory \
\“事业单位\”:$ supplyVoltage \
\ temp \”:$ boardTemp \
} \
}) \
}”
:日志信息"$message";
:put("[*]总消息大小:$[:len $message] bytes")
:put("[*]向MQTT代理发送消息…")
/iot MQTT publish broker=$broker topic=$topic message=$message
:put ("[*] Done")

要考虑2条脚本线。

:本地代理“AWS”

行,您应该在引号“”中指定经纪人的名称(在我们的示例中,AWS)。

:本地主题“my/test/topic”

行,您应该在引号“”中指定正确的主题。主题是在AWS策略中配置的(在我们的示例中,我的/测试/主题)。

脚本配置的其余部分取决于总体需求。该脚本解释了哪些参数被配置为要发布。

导航到System>Scripts,在那里添加一个新脚本,并粘贴上面显示的脚本(将其命名为script1)。

要运行该脚本,可以使用命令行:

/system script运行script1

带脚本的HTTPS post

另一种可用于将数据从网关发送到云的协议是HTTPS。方法可以实现这一点获取工具。直到7.1beta6 Routl雷竞技erOS版本, fetch没有选择客户端证书进行身份验证的选项(这意味着不支持使用客户端证书进行HTTPS发布),在7.1beta6中添加了一个新特性来启用此设置/支持。使用CURL和Python的HTTPS post示例(以及其他有用信息)显示在AWS HTTPS手册

为了将来自蓝牙标签(在我们的示例中为TG-BT5-IN)的数据发布到AWS,我们将使用该脚本。脚本示例如下所示,可以使用此下载链接

每一行都以一个符号开头"#是指导性的,它描述了将在线下配置的参数。更改将应用于特定情况的引号“”内的参数。

################################ 配置 ################################
接口的MAC应该被用作“定位器ID”
locallocatorface“ether1”

# POSIX regex用于过滤广告蓝牙地址。如。“公元前^:33:交流”
#只包括以这3个八位字节开头的地址。
#要禁用此过滤器,请将其设置为“”
: localaddressregex ""

# POSIX regex用于过滤蓝牙广告基于他们的数据。相同
#用法与'addressRegex'相同。
:本地广告dataregex ""

#信号强度滤波器。例如-40只包括蓝牙广告
#信号强度大于-40dBm。
#要禁用此过滤器,请将其设置为“”
:local rssiThreshold "-40"

#################################### 系统 ###################################
:put("[*]收集系统信息…")
:local ifaceMac [/interface get [/interface find name=$locatorIface] mac-address]
:local cpuLoad [/system resource get cpu-load]
:local free-memory[/系统资源获取free-memory]
: localusedmemory ([/system resource get total-memory] - $freeMemory)
:local rosVersion [/system package get value-name=version \
[/system package find where name ~ "^l雷竞技routeros"]]
:local model [/system ios版雷竞技官网入口routerboard get value-name=model]
:local serialNumber [/system ios版雷竞技官网入口routerboard get value-name=serial-number]
# Health有点不确定,因为'/system Health '在ROS6中没有'find
:本地运行状况[/系统运行状况打印为值]
:本地供电电压0
: localboardtemp 0
:foreach entry in=$health do={
:如果($ entry - >“名字”=“电压”)做={:设置supplyVoltage美元($ entry - >“价值”)}
:if ($entry->"name" = "board-temperature1") do={:set $boardTemp ($entry->"value")}
}

################################## 蓝牙 ##################################
:put("[*]正在收集蓝牙信息…")
:全球btOldestAdvertisementTimestamp
:if ([:typeof $btOldestAdvertisementTimestamp] = " none ") do={
#启动后第一次运行这个脚本,需要初始化
# persistent变量
:set $btOldestAdvertisementTimestamp 0
}
: localbtprocessingstart [/system clock get time]
:本地广告[/iot蓝牙扫描仪广告打印详情\
As-value where \
epoch > $btOldestAdvertisementTimestamp和\
地址~ $addressRegex和\
data ~ $advertisingDataRegex和\
rssi > $rssiThreshold
]
:local advJson ""
:local advCount 0
:local advSeparator ""
:local lastAdvTimestamp 0
删除MAC/蓝牙地址中的分号
: localminimizemac do={
:本地最小化
:local lastIdx ([:len $address] - 1)
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $
:local char [:pick $address $idx]
:if ($char != ":")
设置$最小化$char
}
}
:返回$最小化
}

:foreach adv =$ advertising ={
:本地地址($adv->"address")
: localts ($adv->"epoch")
:本地rssi ($adv->"rssi")
:本地AD ($adv->"data")
: localobj "\
{\
\ \“id”:\ " $ [$ minimizeMac地址= $地址]\”、\
ts \“\”:ts美元,\
rssi \“\”:$ rssi \
\“ed \”:{\
\ \“广告”:\ \“美元广告\”
} \
}”
:设置$advCount ($advCount + 1)
设置$lastAdvTimestamp $ts
确保最后一个对象不以逗号结束
$advJson$advSeparator$obj"
:if ($advSeparator = "") do={
:set $advSeparator ","
}
}

:if ($advCount > 0) do={

:set $btOldestAdvertisementTimestamp $lastAdvTimestamp

}

:put("[*]找到$advCount新广告\
(处理时间:$[([/system clock get time] - $btProcessingStart)])")

#################################### MQTT #####################################
:本地消息\
“{\
\ " t \”:0 \
\ \“v \ ": 1日
OldestAdvertisementTimestamp \“\”:$ btOldestAdvertisementTimestamp \
\“loc \”:[{\
\ \“id”:\ " $ $ minimizeMac地址= $ ifaceMac \”、\
\ \“标签”:[$ advJson], \
\“ed \”:{\
\”模式\”:\ " $模型\ ",\
serialNumber美元\“sn \”,\“\”,\
rosVersion美元\“活性氧\”,\“\”,\
cpu \“\”:cpuLoad美元,\
“眉目”\ \”:usedMemory美元,\
fmem \“\”:$ freeMemory \
\“事业单位\”:$ supplyVoltage \
\ temp \”:$ boardTemp \
} \
}) \
}”
:日志信息"$message";
:put("[*]总消息大小:$[:len $message] bytes")
/tool fetch certificate=f79dda4ec5-certificate.pem.crt.txt_0 http-method=post output=user http-header-field="Content-Type:application/json" http-data=$message url="https://xxxxx.iot.us-east-2.amazonaws.com:8443/topics/my/test/topic

:put ("[*] Done")

1 .脚本行应考虑:

/tool fetch certificate=f79dda4ec5-certificate.pem.crt.txt_0 http-method=post output=user http-header-field="Content-Type:application/json" http-data=$message url="https://xxxxxx.iot.us-east-2.amazonaws.com:8443/topics/my/test/topic

根据您的具体情况更改证书名称和URL:

url = "https://xxxx:8443/topics/yyyy,其中“xxxx”是AWS端点地址,“yyyy”是在AWS策略中配置的主题-步骤2和3(在我们的示例中为my/test/topic)。

脚本配置的其余部分取决于总体需求。该脚本解释了哪些参数被配置为要发布。

导航到System>Scripts,在那里添加一个新脚本,并粘贴上面显示的脚本(将其命名为script2)。

要运行该脚本,可以使用命令行:

/system script运行script2

验证

要验证AWS是否获取了数据,请返回AWS门户。导航到测试页面。使用订阅一个主题选择。键入在AWS策略中配置的主题(在我们的示例中,我的/测试/主题)在…主题过滤田野和出版社订阅.在下面,您应该看到订阅部分,其中将显示数据。运行这个脚本(在RouterOS中),l雷竞技你应该会在订阅”选项卡。

相同的页面/选项卡也应该显示HTTPS发送的数据包。



  • 没有标签