介绍

在本指南中,我们将展示如何快速一步一步地设置您的方法报告的“触发”条件时,发送电子邮件通知TG-BT5-INTG-BT5-OUT标签。

根据标签的指南iOS安卓,标签有一个内置的加速度计,能够检测自由落体,唤醒/运动和倾斜状态。当标签设置为广播时雷竞技网站MikroTik格式有效载荷和加速度计触发器被启用(使用MikroTik Beacon Manager应用程序)→标签将立即广播广告有效载雷竞技网站荷/报告,无论何时触发将被检测到。

对于iOS,触发设置是这样的(处于禁用状态/默认设置):

对于Android,触发设置看起来像这样(在禁用状态/默认设置):

要激活触发检测,只需启用相应的“复选框”。

蓝牙有效载荷通过标签广播后,有效载荷的第21个八位字节将指示检测到的确切触发器。你可以看到载荷在物联网>蓝牙> Advertisng报告标签:

根据上面的截图,第21个八位字节是“04”,这表明,当标签检测到自由落体状态时,有效载荷被发送(当我们“不小心”掉下或扔出标签时,这些有效载荷被广播)。

可以找到有关microtik格式字节值的更多信息雷竞技网站链接

一旦一切都配置好了,下面将会发生:

  1. KNOT将按照时间表运行脚本。
  2. 脚本将“读取/扫描”显示在物联网>蓝牙广告报告>选项卡。
  3. 如果存储/捕获的有效载荷的第21个八位字节值等于任何“触发”值→将发送电子邮件通知。

换句话说,当KNOT扫描有效载荷并找到第21位字节表示触发器已激活的有效载荷时,您将收到一封电子邮件通知,通知已检测到触发器。

TG-BT5标签配置

在这个特定的示例中,我们需要设置标记以在雷竞技网站MikroTik格式。在microt雷竞技网站ik格式中,每个有效载荷的第21个八位字节将表明它被触发的原因。

可以找到有关如何启用触发器的手册iOS和/或安卓指南(“广告”/设置灯塔部分)。

为了更容易“激活”触发器,我们还可以根据iOS和/或安卓指南(自由落体阈值和持续时间部分)。为了测试的目的,基本上,只是为了更快地“触发”检测,我们可以改变自由落体持续时间参数设置为“0”秒(这将确保在所有轴上的阈值范围内的任何加速度将立即被检测为“自由落体”事件)。

l雷竞技RouterOS配置

请注意物联网需要包装。你可以从我们的下载页面-在“额外包裹”下。

配置可分4步完成:

  1. 启用扫描仪(并且,优选地,确认当检测到触发器时所述标签正在广播有效载荷);
  2. 设置一个电子邮件服务器;
  3. 导入脚本(并根据需求修改一些脚本行);
  4. 设置调度程序。

物联网>蓝牙>扫描仪

物联网>蓝牙>扫描仪选项卡,并确保它已启用:

广告的报告选项卡并使用MAC地址过滤选项过滤列表(您可以在标签本身的标签上找到打印在MikroTik标签上的MAC地址)。雷竞技网站

尝试“触发”配置的检测,并通过检查21字节的值来确认。

在我们的示例中,我们为我们的标记配置了“自由落体”检测把它。我们从标签上得到了“下落”状态的报告(21 octet =)04):

我们已经确认,标签正确地报告了触发器。

工具>电子邮件

导航到工具>电子邮件节并设置您选择的电子邮件服务器。

你可以找到我们的电子邮件配置示例:链接。我们将使用所示Gmail本指南中的示例。

试着发送一封测试邮件,以确保设置正确。

系统>脚本

选项(一个)

导航到系统>脚本菜单并在那里添加一个新脚本。

您可以复制下面的脚本。将下面的脚本复制到记事本中,然后再次复制到脚本中来源:”字段。

#在“”内输入标签的MAC地址
: localaddressregex "2C:C8:1B:E2:15:29"

#在“”中输入邮件主题
:本地邮件主题为“RouterOS报告!”l雷竞技

#在“”中输入电子邮件地址
:本地电子邮件地址“YOUR_EMAIL@gmail.com”

#脚本:
################################## 蓝牙 ##################################
: localflagstr ={
:本地STR ""

:if ($1 & 0x01) do={:set $str " switch"}
:if ($1 & 0x02) do={:set $str "$str "}
:if ($1 & 0x04) do={:set $str "$str free_fall"}
:if ($1 & 0x08) ={:set $str "$str impact_x"}
:if ($1 & 0x10) do={:set $str "$str impact_y"}
:if ($1 & 0x20) do={:set $str "$str impact_z"}

:if ([:len $str] = 0) do={:返回""}

:return [: select $str 1 [:len $str]]
}

: localtriggernamef "free_fall"
:本地触发器“tilt”
:local triggernameX "impact_x"
:local triggernameY "impact_y"
:local triggernameZ "impact_z"
:local triggernameS "switch"

寻找新鲜的蓝牙广告
:全球btOldestAdvertisementTimestamp
:if ([:typeof $btOldestAdvertisementTimestamp] = " none ") do={
#启动后第一次运行这个脚本,需要初始化
# persistent变量
:set $btOldestAdvertisementTimestamp 0
}
:本地广告[/iot蓝牙扫描仪广告打印详情\
As-value where \
epoch > $btOldestAdvertisementTimestamp和\
地址~ $addressRegex

:local advCount 0
:local lastAdvTimestamp 0
:本地触发器列表""

:本地triggerF
:本地triggerT
:本地triggerX
:本地triggerY
:本地triggerZ
:本地触发器

: localmessagef ""
: localmessaget ""
: localmessagex ""
: localmessagey ""
: localmessagez ""
:本地消息""

本地21 ""

:foreach adv =$ advertising ={
:本地地址($adv->"address")
:本地rssi ($adv->"rssi")
:local epoch ($adv->"epoch")
:local rtime ($adv->"time")
:本地AD ($adv->"data")
:local flags [:tonum "0x$[:pick $ad 40 42]"]
localobj "$[$flagStr $flags]"

:设置$advCount ($advCount + 1)
:设置$lastAdvTimestamp $epoch
设置$triggerlist "$triggerlist$obj"

:set triggerF [:pick $triggerlist ([find $triggerlist "free_fall"]-0) ([find $triggerlist "free_fall"]+9)]
:if ($triggerF=$triggernameF) do={:set messageF "$triggernameF";:set 21 "not00";}
:设置triggerT[:选择$triggerlist([查找$triggerlist“倾斜”]-0)([查找$triggerlist“倾斜”]+4)]
:if ($triggerT=$triggernameT) do={:set messageT "$triggernameT";:set 21 "not00";}
:set triggerX [:pick $triggerlist ([find $triggerlist "impact_x"]-0) ([find $triggerlist "impact_x"]+8)]
:if ($triggerX=$triggernameX) do={:set messageX "$triggernameX";:set 21 "not00";}
:set triggerY [:pick $triggerlist ([find $triggerlist "impact_y"]-0) ([find $triggerlist "impact_y"]+8)]
:if ($triggerY=$triggernameY) do={:set messageY "$triggernameY";:set 21 "not00";}
:set triggerZ [:pick $triggerlist ([find $triggerlist "impact_z"]-0) ([find $triggerlist "impact_z"]+8)]
:if ($triggerZ=$triggernameZ) do={:set messageZ "$triggernameZ";:set 21 "not00";}
:设置触发器[:选择$triggerlist([查找$triggerlist "switch"]-0)([查找$triggerlist "switch"]+6)]
:if ($triggerS=$triggernameS) do={:set messageS "$triggernameS";:set 21 "not00";}

}
:if ($advCount > 0) do={
:set $btOldestAdvertisementTimestamp $lastAdvTimestamp
}

#消息结构:
:本地消息”$messageF
messageT美元
messageX美元
messageY美元
messageZ美元
美元的消息
——标签报告的触发器!”

:if ($21 ="not00") do={/tool E-mail send to=$emailaddress subject="$emailsubject" body="$message"} else={:put "21 octet not have triggers detected!"}

需要考虑以下3行:

: localaddressregex "2C:C8:1B:E2:15:29"

行,我们在其中输入您希望监控的标签的MAC地址;

:本地邮件主题为“RouterOS报告!”l雷竞技

Line,你可以更改邮件的主题;

:本地电子邮件地址“YOUR_EMAIL@gmail.com”

电子邮件地址行,您需要在其中输入电子邮件地址。你想把报告寄到哪里?

您还可以使用以下行更改电子邮件的结构:

#消息结构:

:本地消息”$messageF

messageT美元

messageX美元

messageY美元

messageZ美元

美元的消息

——标签报告的触发器!”

无论你喜欢怎样命名这个脚本,例如,triggernotification。点击应用好吧


另外

在本例中,我们将专门展示一个电子邮件通知场景。但是!如果您想使用其他方法发送通知,您可以更改下面的行:

:if ($21 ="not00") do={/tool电子邮件发送到=$emailaddress主题="$emailsubject"正文="$message"}

你可以改变={/工具的电子邮件…“这句话的一部分,例如,”做= {/工具获取“或者”做= {/iot MQTT发布”。这样,您就可以发送HTTP发布或MQTT发布消息。

如果您想在检测到触发器时获得电话通知,您也可以使用IFTTT服务(HTTP post到IFTTT webhook),如我们在另一个指南中所述在这里


您可以通过命令“”手动运行该脚本。/system script运行triggernotification或者点击"运行脚本按钮下的脚本列表部分。

您应该确保在手动启动脚本之后收到了电子邮件通知。

当脚本(一),则RouterOS将检查每l雷竞技个接收/存储的蓝牙有效负载,如果在有效负载列表中找到任何触发器,就会组织并发送一封电子邮件。此电子邮件消息将简单地指出在列表中检测到哪些触发器,而不提供其他信息。

选项(b)

#在“”内输入标签的MAC地址
: localaddressregex "2C:C8:1B:E2:15:29"

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

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

#在“”中输入邮件主题
:本地邮件主题为“RouterOS报告!”l雷竞技

#在“”中输入电子邮件地址
:本地电子邮件地址“YOUR_GMAIL@gmail.com”

#脚本:
################################## 蓝牙 ##################################
: localflagstr ={
:本地STR ""

:if ($1 & 0x01) do={:set $str " switch"}
:if ($1 & 0x02) do={:set $str "$str "}
:if ($1 & 0x04) do={:set $str "$str free_fall"}
:if ($1 & 0x08) ={:set $str "$str impact_x"}
:if ($1 & 0x10) do={:set $str "$str impact_y"}
:if ($1 & 0x20) do={:set $str "$str impact_z"}

:if ([:len $str] = 0) do={:返回""}

:return [: select $str 1 [:len $str]]
}

: localtriggernamef "free_fall"
:本地触发器“tilt”
:local triggernameX "impact_x"
:local triggernameY "impact_y"
:local triggernameZ "impact_z"
:local triggernameS "switch"

寻找新鲜的蓝牙广告
:全球btOldestAdvertisementTimestamp
:if ([:typeof $btOldestAdvertisementTimestamp] = " none ") do={
#启动后第一次运行这个脚本,需要初始化
# persistent变量
:set $btOldestAdvertisementTimestamp 0
}
:本地广告[/iot蓝牙扫描仪广告打印详情\
As-value where \
epoch > $btOldestAdvertisementTimestamp和\
地址~ $addressRegex和\
data ~ $advertisingDataRegex和\
rssi > $rssiThreshold

:local advCount 0
:local lastAdvTimestamp 0
:本地触发器列表""

:本地triggerF
:本地triggerT
:本地triggerX
:本地triggerY
:本地triggerZ
:本地触发器

: localmessagef ""
: localmessaget ""
: localmessagex ""
: localmessagey ""
: localmessagez ""
:本地消息""

本地21 ""

:foreach adv =$ advertising ={
:本地地址($adv->"address")
:本地rssi ($adv->"rssi")
:local epoch ($adv->"epoch")
:local rtime ($adv->"time")
:本地AD ($adv->"data")
:local flags [:tonum "0x$[:pick $ad 40 42]"]
: localflags "$[$flagStr $flags]"
:if ($fflag ="") do={:设置$fflag "无-定期广播的有效载荷"}

: localobj "# $advCount;
时间:$ rtime
触发:$ fflags


:设置$advCount ($advCount + 1)
:设置$lastAdvTimestamp $epoch
设置$triggerlist "$triggerlist$obj"

:set triggerF [:pick $triggerlist ([find $triggerlist "free_fall"]-0) ([find $triggerlist "free_fall"]+9)]
:if ($triggerF=$triggernameF) do={:set messageF "$triggernameF";:set 21 "not00";}
:设置triggerT[:选择$triggerlist([查找$triggerlist“倾斜”]-0)([查找$triggerlist“倾斜”]+4)]
:if ($triggerT=$triggernameT) do={:set messageT "$triggernameT";:set 21 "not00";}
:set triggerX [:pick $triggerlist ([find $triggerlist "impact_x"]-0) ([find $triggerlist "impact_x"]+8)]
:if ($triggerX=$triggernameX) do={:set messageX "$triggernameX";:set 21 "not00";}
:set triggerY [:pick $triggerlist ([find $triggerlist "impact_y"]-0) ([find $triggerlist "impact_y"]+8)]
:if ($triggerY=$triggernameY) do={:set messageY "$triggernameY";:set 21 "not00";}
:set triggerZ [:pick $triggerlist ([find $triggerlist "impact_z"]-0) ([find $triggerlist "impact_z"]+8)]
:if ($triggerZ=$triggernameZ) do={:set messageZ "$triggernameZ";:set 21 "not00";}
:设置触发器[:选择$triggerlist([查找$triggerlist "switch"]-0)([查找$triggerlist "switch"]+6)]
:if ($triggerS=$triggernameS) do={:set messageS "$triggernameS";:set 21 "not00";}

}
:if ($advCount > 0) do={
:set $btOldestAdvertisementTimestamp $lastAdvTimestamp
}

:if ($21 ="not00") do={/tool E-mail send to=$emailaddress subject="$emailsubject" body="$triggerlist"} else={:put "第21位未检测到触发器!"}

当脚本(b),则RouterOS将检查每l雷竞技个接收/存储的蓝牙有效负载,如果在有效负载列表中找到任何触发器,就会组织并发送一封电子邮件。与脚本相比,此电子邮件消息将包含更详细的信息(一)。在这种情况下,消息将指示每个有效负载的接收时间。

系统>调度器

控件下添加一个新的调度器以实现该过程的自动化系统>调度器标签:

输入“/system script运行triggernotification“在……下面”事件:“场,设置一个时间间隔您希望运行脚本来检查/扫描广告报告(例如,10秒)。

点击应用好吧

结果验证

1)确认标签广播广告报告,标签触发器被检测到;

2)确认您的邮件服务器设置正确,并且您可以从KNOT (RouterOS)发送电子邮件。l雷竞技

3)手动运行脚本或对脚本应用调度程序后,应该通过电子邮件通知,如下所示:

脚本(一)

脚本(b)



  • 没有标签