佰馬BMD100 5G/4G DTU是為無人值守場景設(shè)計的無線數(shù)傳終端,常用于工業(yè)物聯(lián)網(wǎng)、智慧水利、智慧環(huán)保等領(lǐng)域,實現(xiàn)數(shù)據(jù)無線傳輸。告警短信群發(fā),也是其中一項常用的功能,經(jīng)常被應(yīng)用于遠(yuǎn)程監(jiān)測告警信息發(fā)布、報警短信發(fā)送等,可以同時發(fā)送到20個手機(jī),可以在后臺預(yù)設(shè)告警信息發(fā)布的內(nèi)容、告警信息接收的手機(jī)號碼等。
案例:DTU短信群發(fā)在某空調(diào)生產(chǎn)公司的典型應(yīng)用:
空調(diào)測試臺位自動化的項目,軟件由Labview編寫。 有一項功能為:當(dāng)某傳感器值超過閾值后,要立即發(fā)送報警短信給每個測試員。即使測試員不在公司也要能即時收到此報警短信。 因此需要一臺可以通過上位機(jī)編程控制的DTU設(shè)備實現(xiàn)這個發(fā)送短信的功能,要求成本低,信號穩(wěn)定。
佰馬BMD100 5G/4G DTU實現(xiàn)短信群發(fā)的配置步驟:
1.使用佰馬配套的DTU管理軟件,直接出廠設(shè)置即可
比如要把 “設(shè)備使用異?!边@種告警短信發(fā)送給13912345678和18812345678,現(xiàn)在直接可以向串口發(fā)送: #13812345678,13912345678#設(shè)備使用異常#,接受號碼每隔5個一組,組與組之間要用英文分號隔開,一次最多4組。
2. DTU開啟短信備份功能
DTU里面配置好接收短信的號碼,最多20個,然后往串口發(fā)數(shù)據(jù),則DTU會把數(shù)據(jù)發(fā)給接收號碼
3. AT指令發(fā)送
DTU配置成modem模式
然后通過發(fā)AT指令發(fā)短信,具體實現(xiàn)過程如下:
用AT命令發(fā)送中文短信(PDU模式中英文混發(fā))
實例:
接收號碼:13812345678
內(nèi)容:你好PDU模式
發(fā)送的AT指令
發(fā)送: AT+CMGF=0 (回車換行)
接收:OK
發(fā)送: AT+CSCS="UCS2" (回車換行)
接收:OK
發(fā)送:AT+CMGS=29 (回車換行)
接收:>
發(fā)送:
0011000D91683118325476F80008AA0e4f60597d0050004400556a215f0f(用ASCII類型發(fā)送)
發(fā)送:1A (Ctrl~z) (用16進(jìn)制類型發(fā)送)
接收:+CMGS: 168(168:發(fā)送了多少條短信數(shù)量)
(不回車換行)
00 //為SCA預(yù)留
11 // FO 設(shè)置PDU 類型
00 // MR 發(fā)送參考號
0D //DA 目的號碼長度
91 //DA 目的號碼類型
68 //DA 中國的區(qū)號
3118325476F8 //接收號碼編碼 奇偶位互換,接收號碼為奇數(shù)個末尾用F補(bǔ)充
00 // PID 發(fā)送方式
08 //DCS 編碼模式
AA //VP 有效期
PDU 中用戶數(shù)據(jù)前的PDU 頭的長度是15 字節(jié)
0e //UDL 數(shù)據(jù)長度(16進(jìn)制)
4f60597d0050004400556a215f0f //短信 數(shù)據(jù)內(nèi)容Unicode 譯碼
發(fā)送拼接方式:
根據(jù)規(guī)律有些數(shù)據(jù)可以不變
0011000D9168+接收號碼編碼+0008AA+內(nèi)容長度+數(shù)據(jù)內(nèi)容Ucde 譯碼
接收號碼編碼:
列如:13812345678
1. 因為位數(shù)是奇數(shù)11位所以在末尾加F變?yōu)椋?3812345678F
2. 進(jìn)行奇偶位置互換變?yōu)椋?118325476F8
以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){ //是偶數(shù)
st += string.charAt(i+1);
}
else {
st += string.charAt(i-1);
}
}
}
return st;
}
短信內(nèi)容轉(zhuǎn)換成Unicode 譯碼
下面是任何內(nèi)容轉(zhuǎn)換成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]); //轉(zhuǎn)換為16進(jìn)制整型字符串
if (hexB.length() <= 2) {
hexB = "00" + hexB;
}
unicodeBytes = unicodeBytes + hexB;
}
return unicodeBytes;
}
發(fā)送內(nèi)容長度計算
如:真實內(nèi)容長度/2=發(fā)送內(nèi)容長度(要轉(zhuǎn)換成16進(jìn)制)
如果轉(zhuǎn)換成16進(jìn)制長度少于2位在前面加個0
列:28/2 = 14 轉(zhuǎn)換成16進(jìn)制得到“e” 少于兩位要在前面+0 得到“0e”。
佰馬Baimatech,集M2M產(chǎn)品研發(fā)、IoT平臺服務(wù)、國際化運(yùn)營于一體,讓我們聯(lián)接,共創(chuàng)未來