DTU的告警短信发布(短信猫)配置教程

  • 时间 :2020-03-10
  • 作者 :
  • 浏览数 :4047

佰马BMD100 5G/4G DTU是为无人值守场景设计的无线数传终端,常用于工业物联网、智慧水利、智慧环保等领域,实现数据无线传输。告警短信群发,也是其中一项常用的功能,经常被应用于远程监测告警信息发布、报警短信发送等,可以同时发送到20个手机,可以在后台预设告警信息发布的内容、告警信息接收的手机号码等。


佰马DTU短信群发.jpg

案例:DTU短信群发在某空调生产公司的典型应用:

空调测试台位自动化的项目,软件由Labview编写。 有一项功能为:当某传感器值超过阈值后,要立即发送报警短信给每个测试员。即使测试员不在公司也要能即时收到此报警短信。 因此需要一台可以通过上位机编程控制的DTU设备实现这个发送短信的功能,要求成本低,信号稳定。

佰马BMD100DTU.jpg

佰马BMD100 5G/4G DTU实现短信群发的配置步骤:

1.使用佰马配套的DTU管理软件,直接出厂设置即可

比如要把 “设备使用异常”这种告警短信发送给13912345678和18812345678,现在直接可以向串口发送: #13812345678,13912345678#设备使用异常#,接受号码每隔5个一组,组与组之间要用英文分号隔开,一次最多4组。


佰马BMD100 DTU短信群发配置步骤.jpg


2. DTU开启短信备份功能

DTU里面配置好接收短信的号码,最多20个,然后往串口发数据,则DTU会把数据发给接收号码


佰马BMD100 DTU短信群发配置步骤2.jpg


佰马BMD100 DTU短信群发配置步骤3.jpg


佰马BMD100 DTU短信群发配置步骤4.jpg

3. AT指令发送

DTU配置成modem模式


佰马BMD100 DTU短信群发配置步骤5.jpg


佰马BMD100 DTU短信群发配置步骤7.jpg


佰马BMD100 DTU短信群发配置步骤8.jpg


然后通过发AT指令发短信,具体实现过程如下:

用AT命令发送中文短信(PDU模式中英文混发)

实例:

接收号码:13812345678

内容:你好PDU模式

发送的AT指令

发送: AT+CMGF=0 (回车换行)

接收:OK

发送: AT+CSCS="UCS2" (回车换行)

接收:OK

发送:AT+CMGS=29 (回车换行)

接收:>

发送:

0011000D91683118325476F80008AA0e4f60597d0050004400556a215f0f(用ASCII类型发送)

发送:1A (Ctrl~z) (用16进制类型发送)

接收:+CMGS: 168(168:发送了多少条短信数量)

(不回车换行)

00 //为SCA预留

11 // FO 设置PDU 类型

00 // MR 发送参考号

0D //DA 目的号码长度

91 //DA 目的号码类型

68 //DA 中国的区号

3118325476F8 //接收号码编码 奇偶位互换,接收号码为奇数个末尾用F补充

00 // PID 发送方式

08 //DCS 编码模式

AA //VP 有效期

PDU 中用户数据前的PDU 头的长度是15 字节

0e //UDL 数据长度(16进制)

4f60597d0050004400556a215f0f //短信 数据内容Unicode 译码

发送拼接方式:

根据规律有些数据可以不变

0011000D9168+接收号码编码+0008AA+内容长度+数据内容Ucde 译码

接收号码编码:

列如:13812345678

1. 因为位数是奇数11位所以在末尾加F变为:13812345678F

2. 进行奇偶位置互换变为:3118325476F8

以Java代码为列下面是奇偶互换代码

public static String Odevity(String string) {

String st ="";

if((string.length()&1) !=1) {

for (int i = 0; i < string.length(); i++) {

if((i&1) != 1){ //是偶数

st += string.charAt(i+1);

}

else {

st += string.charAt(i-1);

}

}

}

return st;

}

短信内容转换成Unicode 译码

  1. 下面是任何内容转换成Unicode 译码Java代码


public static String GBK2Unicode(String gbString) {

char[] utfBytes = gbString.toCharArray(); //utfBytes = [测, 试]

String unicodeBytes = "";

for (int byteIndex = 0; byteIndex < utfBytes.length; byteIndex++) {

String hexB = Integer.toHexString(utfBytes[byteIndex]); //转换为16进制整型字符串

if (hexB.length() <= 2) {

hexB = "00" + hexB;

}

unicodeBytes = unicodeBytes + hexB;

}

return unicodeBytes;

}

发送内容长度计算

如:真实内容长度/2=发送内容长度(要转换成16进制)

如果转换成16进制长度少于2位在前面加个0

列:28/2 = 14 转换成16进制得到“e” 少于两位要在前面+0 得到“0e”。


联系我们
联系我们

佰马Baimatech,集M2M产品研发、IoT平台服务、国际化运营于一体,让我们联接,共创未来

Baidu
map