python调用短信猫

python代码

#-*- encoding: gbk -*-
import sys
import locale
import string
import mysql.connector
import traceback
import datetime
from mysql.connector import errorcode
from ctypes import *
import time

reload(sys);
sys.setdefaultencoding('gbk');

def getMailIndex():
    file = open('messageindex.txt',"r");
    lines = file.readlines();
    file.close();
    return time.strptime(lines[0], "%y-%m-%d %H:%M:%S");
#    

def setMailIndex(timestr):
    f = open('messageindex.txt', 'w');
    f.write(timestr);
    f.close();
#    


#是否有新邮件
global hasNewMail;
hasNewMail=True;
#全局已读的邮件数量
global globalMailReaded;
globalMailReaded=getMailIndex();
#全局dll api
global api;
api = WinDLL('sms.dll');
array_type = c_char_p * 1 
strType = array_type();
strCopyRight=array_type();
if (0==api.Sms_Connection("//上海迅赛信息技术有限公司,网址www.xunsai.com//",3,9600,strType,strCopyRight)):
    print('connect to modem fail!');
    exit(0);
#end if
print "connect to %s"%strType[0];
print strCopyRight[0];
#获取新短信
def getNewMessage():
    try:
        global hasNewMail;
        global globalMailReaded;
        global api;
        messagelist=[];
        if(hasNewMail):
            print('read messageindex.txt')
            globalMailReaded=getMailIndex();
        #end if
        #如果来了新短信就接收
        array_type = c_char_p * 1;
        ReceiveSmsStr = array_type();
        result=api.Sms_Receive("4", ReceiveSmsStr);
        strList=ReceiveSmsStr[0].split('|');
        #最新的一个信息
        message=strList[len(strList)-1];
        myfields=message.split('#');
        Sms_TelNum=myfields[2];
        Sms_Text=myfields[3];
        Sms_Time=time.strptime(myfields[4], "%y-%m-%d %H:%M:%S");
        if(Sms_Time<=globalMailReaded):
            hasNewMail=False;
            return None;#没新短信,直接返回
        #end if 
        print('get new message');
        messagelist.append((Sms_TelNum,Sms_Text));
        setMailIndex(myfields[4]);
        hasNewMail=True;
        return messagelist;
    except:
        print(traceback.format_exc());
        print("search modem fail,try again");
        return None;
    finally:
        pass;
    #end try
#end def

#只要收到短信,就把这个事件记录在事件库中
#现在就是循环查询未看短信,如果有新短信就读取,并查询关键词库
while(True):
    messagelist=getNewMessage();
    if(messagelist==None):
        time.sleep(5);
        continue;
    #end if
    for messagetuple in messagelist:
        article=messagetuple[1];
        origin=messagetuple[0];
  
    #end for
#end while


下面是我在开发过程中用到的短信猫的AT指令:

AT+CPMS?返回
+CPMS: "ME",1,25,"SM",1,50,"SM",1,50


AT+CNMI?返回
+CNMI: 1,1,0,2,1(我重新设置了,我这里的设置是把收到的短信存储在短息猫设备中,不存储在SIM中,此前短信猫把短信存在SIM卡里了,上面蓝色内容的就是sim卡中存储了1条短信,sim卡读写次数有限,很脆弱,所以我把短信存在ME中了,如果短信满了,就删除。我想工业级的短信猫ME应该经得起反复折腾。)


AT+CMGL=4返回
+CMGL: 1,1,,28
0891683108200005F0040D91683166607056F700085140011205652308671F8D2700330031


再向短信猫发短信:
AT+CPMS?返回
+CPMS: "ME",2,25,"SM",1,50,"SM",1,50
此时说明ME中有两条短信了,原先是1条


AT+CNMI?返回
+CNMI: 1,1,0,2,1


AT+CMGL=4返回
+CMGL: 1,1,,28
0891683108200005F0040D91683166607056F700085140011205652308671F8D2700330031
+CMGL: 2,1,,24
0891683108200005F0040D91683166607056F7000851400112754323045F3A7A3B

这就说明ME中确实存储了两条短信


我们再删除一条短信试试:
AT+CPMS?返回
+CPMS: "ME",1,25,"SM",1,50,"SM",1,50
这里确实少了一条短信
AT+CNMI?返回
+CNMI: 1,1,0,2,1
AT+CMGL=4返回
+CMGL: 1,1,,28
0891683108200005F0040D91683166607056F700085140011205652308671F8D2700330031

这里少了一条短信,说明这条短信确实是被删除了


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GSM MODEM 动态链接库 (DLL) 二次开发接口 适用范围: 本短信二次开发接口适用于WAVECOM、西门子、诺基亚、摩托罗拉等支持标准AT指令的GSM短信终端 使用方式: 将sms.dll文件拷贝到系统安装目录中的system32文件夹中,然后再根据以下接口函数说明和提供的例程源码开发 接口函数: 1、Sms_Connection(Com_Port As Integer,Com_BaudRate As Integer, Mobile_Type As String) As Integer Sms_Connection函数说明如下: 功能描述:用于初始化终端与串口的连接 Com_Port:串口号(0为红外接口,1,2,3,...为串口) Com_BaudRate:波特率 Mobile_Type:返回终端型号 Sms_Connection:返回值(0:连接终端失败;1:连接终端成功) 2、Sms_Send(Sms_TelNum As String, Sms_Text As String) As Integer Sms_Send函数说明如下: 功能描述:发送短信 Sms_TelNum:发送给的终端号码 Sms_Text:发送的短信内容 Sms_Send:返回值(0:发送短信失败;1:发送短信成功) 3、Sms_Receive(Sms_Type As String, Sms_Text As String) As Integer Sms_Receive函数说明如下: 功能描述:接指定类型的短信 Sms_Type:短信类型(0:未读短信;1:已读短信;2:待发短信;3:已发短信;4:全部短信) Sms_Text:返回指定类型的短信内容字符串(短信内容字符串说明:短信短信之前用"|"符号作为分隔符,每条短信中间的各字段用"#"符号作为分隔符) 4、Sms_Delete(ByVal Sms_Index As String) As Integer Sms_Delete函数说明如下: 功能描述:删除指定的短信 Sms_Index:短信的索引号 5、Sms_AutoFlag()As Integer Sms_AutoFlag函数说明如下: 功能描述:检测连接的终端是否支持自动短信功能 Sms_AutoFlag:返回值(0:不支持;1:支持) 6、Sms_NewFlag() As Integer Sms_NewFlag函数说明如下: 功能描述:查询是否到新的短信息 Sms_AutoFlag:返回值(0:未到;1:到) 7、Sms_Disconnection() As Integer Sms_Disconnection函数说明如下: 功能描述:断开终端与串口的连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值