远程接收短信---USB转GSM模块 四频GSM/GPRS SIM80OC

 移动的号码开了八元保号,丢家里半年没用了,有很多场景下需要接收短信,甚至发送短信验证码。保号状态下,估计是不能开通国际漫游的,而且我也只想把它丢在国内。


首先我肯定是考虑成熟的商品了,但是淘宝上的商品价格还是很贵的,那个价格都可以买猫池了。而且是我看了评价,他们的软件已经一年多没更新了,iOS15上经常闪退。问了几家店,账号注册还需要+86手机号,而且大多数不能异地登陆。我最怕他们突然跑路了,这让我怎么弄。


最后还是选择短信模块了。这个是本来要暑假做的,但是我还是提前做了,为了看看稳定性,还是需要提前的。


历次更新都在GitHub上了,点这 =》GitHub Link

演示:


放在机柜里 稳定性还是能保证的
USB转GSM模块 四频GSM/GPRS SIM80OC
控制台输出

Telegram,消息完全没延迟

LOG

HTML






----------------------------------------------------------------------------------------------------
以下最初版本,就不删了:

他们有给软件,但是我需要自己弄懂,所以我就学了一下,串口之类的。主要是他们的软件只能在windows下用,不能转发,也没接口,还没源码(我指那个exe的)。

幸好python是啥都能做,我晚上就写了写,目前是支持接收中英文短信 和 拒绝来电,我还写了另个转发到telegram上的,那个之前有发过,差不多,这里就放本地的那个版本了。

# -*- coding: utf-8 -*-
#pip3 install pyserial
import serial
from idna import unicode 
import re
import ascii   

def decodeunicode(str):
    i=0
    res=""
    
    if len(str)%4==0:
         while i<len(str)/4:
             res=res+"\\u"+str[4*i:4*i+4].lower()
             i+=1
         res=res.encode('utf-8').decode('unicode_escape')
         return(res)
    else:
        return(str)
   

print("Program Starts")
 
#打开串口
 
serialPort="COM7"   #串口号
 
baudRate=115200       #波特率

msgreceived=1
ser=serial.Serial(serialPort,baudRate,timeout=0.5) 
 
print("参数设置:串口=%s ,波特率=%d"%(serialPort,baudRate))#输出串口号和波特率
 

 
#收发数据
 
while 1:
    try:
        #str = input("请输入要发送的数据(非中文)并同时接收数据: ")
        #ser.write((str+'\n').encode())
        res=ser.readline()
       
        #读取并解析短消息
        if res!=b'' and res!=b'\r\n' and res!=b'OK\r\n':
             print("【Terminal】"+str(res))#可以接收中文
             if b'+CMTI:' in res:
                 print("【INFO】有短信来了")
                 ser.write('AT+CMGL'.encode('utf-8') + b'\r\n')  #读取内存中所有短消息
             
                 #ser.write('AT+GMGD=1,4'.encode('utf-8') + b'\r\n')  #删除内存中所有短消息
             
             if b'+CMGL:' in res: #短消息第一部分-电话号码和时间
                 #print("【INFO】开始读取短信")
                 re_phonenum=re.compile(r'\d{5,}')
                 re_time=re.compile(r'\d{1,2}/\d{1,2}/\d{1,2},\d{1,2}:\d{1,2}:\d{1,2}')
                 msg_phonenum=re_phonenum.search(str(res))[0]
                 msg_time=re_time.search(str(res))[0]
                 msgreceived=0
                 continue
             if msgreceived==0: #短消息第二部分-文本内容
                 msg_content=decodeunicode(str(res)[2:-5])
                 msgreceived=1
                 #print("【INFO】读取短信完成")
                 print("【GUI】收到消息  "+"来自电话:"+msg_phonenum+" 时间:"+msg_time+" 内容:"+msg_content)
                 msg=""
         
             # 拒绝所有电话
             if b'RING\r\n' in res:
                ser.write('AT+CLCC'.encode('utf-8') + b'\r\n') #获取来电号码
                ser.write('AT+CHUP'.encode('utf-8') + b'\r\n') #拒绝电话
                
             '''
             #向11位的手机号来电发送短信
             
             #不会发送CRTL+Z啊啊啊
         
         
             if b'CLCC' in res:
                re_phonenum=re.compile(r'\d{5,}')
                send_msg_phonenum=re_phonenum.search(str(res))[0]
                if len(send_msg_phonenum)==11:
                     print("【Log】向11位的手机号来电发送短信")
                     ser.write(b'AT+CMGF=1\r\n')
                     ser.write(b'AT+CMGS="'+bytes(send_msg_phonenum,'utf-8')+b'"\r\n')
                     ser.write(b'msg\r\n')
                     ser.write(ascii.ctrl('z'))
  '''         
    except KeyboardInterrupt:
         break
         
    #except Exception as ex:    
    #     print(ex)
    #     pass
         
    except:
          print("【Log】Something else went wrong")
    
ser.close() 


我本想今天弄成flask网页 还 带API,时间主要耗在中文编码上了,这个短信的unicode编码 和平时python 的 unicode 编码是不一样的。telegram效果我已经满意了,后期会做网页的。




Comments

Popular posts from this blog

海外回国代理分流

openwrt设置定时任务-远程唤醒计算机

从Blogger转移