新闻资讯

公司新闻

在linux系统下开发短信设备(HT-S3100)详细过程

来源:未知添加时间:2019/06/24 点击:
有很多客户需要在linux系统下对短信设备进行二次开发,linux系统下目前我们公司可以提供java的二次开发包,下面金格短信设备就给大家介绍下linux下短信设备开发的详细过程。
开发前需要准备下面几个开发包:
短信设备linux开发包
smslib-3.5.3.jar 短信设备二次开发包(可前往http://smslib.org官网下载最新版本)
 
log4j-1.2.14.jar 打印日志使用(版本不限)
 
RXTXcomm.jar 串口通讯Java类库(可前往http://rxtx.qbang.org官网下载适用版本)
 
librxtxSerial.so 动态链接库文件
 
注:这里使用的RXTXcomm.jar和librxtxSerial.so两个文件版本需一致(本人2009/2/5 64位)
 
 
 
** 开整 **
 
1、先配置环境(本人使用jdk-8u144-linux-x64.tar.gz)
 
将RXTXcomm.jar 文件放至 /jdk1.8.0_144/jre/lib/ext目录下
 
将librxtxSerial.so 文件放至 /jdk1.8.0_144/jre/lib/amd64 目录下
 
 
 
2、项目导入依赖jar包
 
将smslib-3.5.3.jar和log4j-1.2.14.jar 两个开发依赖包导入项目(这个都会的哈)
 
 
 
3、短信猫设备连接虚拟机/服务器
 
将短信设备通过USB/串口 连接到本机/服务器
 
查看是否连接(虚拟机CentOS 7):
 
a:虚拟机右下角USB设备图标为蓝色连接状态
 
b:查询设备串口号:ls /dev 查看有没有ttyUSB0的串口
 
注:若没有ttyUSB0可先拔掉设备查询再插上查询-先后查询对比(一般为ttyUSB0)
 
 
 
1、配置串口
 
下载串口通讯工具(minicom)
 
minicom需要ncurses库的支持,否则安装会有问题。
 
 
 
a:下载ncurses  (本人ncurses-6.0.tar.gz)
 
下载链接:http://ftp.gnu.org/pub/gnu/ncurses/
 
上传至虚拟机
 
解压 --> 执行# tar -zxvf ncurses-6.0.tar.gz -C 可选择存放目录/ncurses/
 
配置 --> 在ncurses/ncurses-6.0目录下执行# ./configure
 
编码 --> 执行# make
 
安装 --> 执行# make install
 
 
 
b:下载minicom (本人 minicom-2.7.1.tar.gz)
 
下载链接:https://fossies.org/linux/misc/minicom-2.7.tar.gz
 
上传至虚拟机
 
解压 --> 执行# tar -zxvf minicom-2.7.1.tar.gz -C 可选择存放目录/minicom /
 
配置 --> 在minicom/minicom-2.7.1目录下执行# ./configure
 
编码 --> 执行# make
 
安装 --> 执行# make install
 
 
 
c:配置minicom串口
 
执行# minicom -s 进入窗口选择Serial port setup
 
 
依次修改A、E、F为下图:
 
保存:
 
退出:
 
5、编写测试程序
 
package com.ultrapower.sms;
 
import org.smslib.helper.CommPortIdentifier;
import org.smslib.helper.SerialPort;
import java.io.*;
import java.util.Enumeration;
 
public class CommTest {
 
    static CommPortIdentifier portId;
    static Enumeration portList;
    static int bauds[] = { 9600, 19200, 57600, 115200 };
 
    public static void main(String[] args) {
        portList = CommPortIdentifier.getPortIdentifiers();
        System.out.println("金笛短信设备端口连接测试...");
        while (portList.hasMoreElements()) {
            portId = (CommPortIdentifier) portList.nextElement();
            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
                System.out.println("找到串口: " + portId.getName());
                for (int i = 0; i < bauds.length; i++) {
                    System.out.print("    Trying at " + bauds[i] + "...");
                    try {
                        SerialPort serialPort;
                        InputStream inStream;
                        OutputStream outStream;
                        int c;
                        String response;
                        serialPort = (SerialPort) portId.open("SMSLibCommTester", 1971);
                        serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
                        serialPort.setSerialPortParams(bauds[i], SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                        inStream = serialPort.getInputStream();
                        outStream = serialPort.getOutputStream();
                        serialPort.enableReceiveTimeout(1000);
                        c = inStream.read();
                        while (c != -1) {
                            c = inStream.read();
                        }
                        outStream.write('A');
                        outStream.write('T');
                        outStream.write('\r');
                        try {
                            Thread.sleep(1000);
                        } catch (Exception e) {
                        }
                        response = "";
                        c = inStream.read();
                        while (c != -1) {
                            response += (char) c;
                            c = inStream.read();
                        }
                        if (response.indexOf("OK") >= 0) {
                            try {
                                System.out.print("  获取设备信息...");
                                outStream.write('A');
                                outStream.write('T');
                                outStream.write('+');
                                outStream.write('C');
                                outStream.write('G');
                                outStream.write('M');
                                outStream.write('M');
                                outStream.write('\r');
                                response = "";
                                c = inStream.read();
                                while (c != -1) {
                                    response += (char) c;
                                    c = inStream.read();
                                }
                                System.out.println("  发现设备: " + response.replaceAll("\\s+OK\\s+", "").replaceAll("\n", "").replaceAll("\r", ""));
                            } catch (Exception e) {
                                System.out.println("  没有发现设备!");
                            }
                        } else {
                            System.out.println("  没有发现设备!");
                        };
                        serialPort.close();
                    } catch (Exception e) {
                        System.out.println("  没有发现设备!");
                    }
                }
            }
        }
    }
}
 
 
打成jar包上传虚拟机执行--》结果为:--》
 
 
 
 
 
6、编写发送短信程序
 
package com.ultrapower.sms;
 
import org.smslib.Message;
import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway;
 
import java.time.LocalDateTime;
 
public class SendGsm {
 
    public static boolean SMSReminds(String phone, String content) throws Exception{
 
        // 1、连接网关的id  
        // 2、com口名称,如COM1或/dev/ttyS1(根据实际情况修改
        // 3、串口波特率,如9600(根据实际情况修改)
        // 4、开发商
        // 5、型号 
        SerialModemGateway gateway  = new SerialModemGateway("model.com3", "/dev/ttyUSB0", 9600, "SIEMENS","HT-S3100");
 
        // 设置true,表示该网关可以接收短信
        gateway.setInbound(true);
        // 设置true,表示该网关可以发送短信
        gateway.setOutbound(true);
 
        // -----------------创建发送短信的服务(它是单例的)----------------
        Service service = Service.getInstance();
        Service.getInstance().S.SERIAL_POLLING = true;
 
        boolean result;
        try {
            // ---------------------- 将设备加到服务中----------------------
            service.addGateway(gateway);
            // ------------------------- 启动服务 -------------------------
            service.startService();
            // ------------------------- 发送短信 -------------------------  
            OutboundMessage msg = new OutboundMessage(phone , content);
            msg.setEncoding(Message.MessageEncodings. ENCUCS2);
            System.out.println("startDate====="+ LocalDateTime.now().toString());
            result = service.sendMessage(msg);
            System.out.println("endDate====="+ LocalDateTime.now().toString());
            // ------------------------- 关闭服务 -------------------------  
            service.stopService();
            service .removeGateway(gateway);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            service.stopService();
            service .removeGateway(gateway);
            return false;
        }
        return result;
    }
 
    public static void main(String[] args) {
        try {
            boolean sendResult = SMSReminds("17631357071", "Java发送短信--测试短信猫-验证码 123456");
            System.out.println("sendResult = [" + sendResult + "]");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
打成jar包上传虚拟机执行--》结果为:--》
 
 
完成!