/
check_inbox.py
138 lines (116 loc) · 3.62 KB
/
check_inbox.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#coding:UTF-8
# modified : scateu @ 2012-8-10 16:00
import serial
import sys
import time
from pdu import send2str
from messaging.sms import SmsDeliver
from mymail import mymail
reload(sys)
sys.setdefaultencoding('UTF-8')
output_coding = 'gbk'
InboxIsEmpty = False
SMSCenter = "13800531500"
SerialPort = "COM1"
output_buffer = ""
def execute(command,timeout=0.5,raw=False):
ser = serial.Serial(SerialPort,baudrate=115200,timeout=timeout)
if raw :
ser.write(command)
else:
ser.write(command+"\r\n")
return ser.readlines()
def WriteLog(string):
global output_buffer
print string
output_buffer += string
output_buffer += '\n'
def DeleteSMS(number):
if execute("AT+CMGD=" + str(number) + ";")[1].startswith("OK"):
WriteLog("SMS #%d"%number + "Deleted")
def ShowLatestSMS(AutoDelete = False):
"""
Fetch Latest SMS
ShowLatestSMS(AutoDelete = False)
return False when empty
"""
#WriteLog("Latest SMS as following: ")
# Firstly, Get all sms, and their ID
global InboxIsEmpty
results = execute("AT+CMGL=4")
smsids = []
cmgl = [r for r in results if r.startswith("+CMGL")]
for a in cmgl:
smsids.append( int(a.split(",")[0].replace("+CMGL:","")) )
if len(cmgl) == 0:
ShowTime()
WriteLog("Empty. No SMS")
InboxIsEmpty = True
return False
currentid = str(smsids.pop())
results = execute("AT+CMGR="+ currentid + ";")
if results[2].startswith("08") != True :
WriteLog("ERROR")
ShowTime()
WriteLog(":::::: SMS # " + currentid + " ::::::")
pducode = results[2].replace('\r\n','')
pduresult = SmsDeliver(pducode)
WriteLog("Sender: " + str(pduresult.number))
#WriteLog(pduresult.text.decode('utf8','ignore').encode('utf8')
WriteLog(pduresult.text.decode('utf8','ignore').encode(output_coding))
if AutoDelete:
DeleteSMS(int(currentid))
return False if len(smsids) == 0 else True
def Call(number):
ShowTime()
WriteLog("Calling " + str(number) )
if execute("ATD"+' '+str(number)+";")[-1].startswith("OK") :
ShowTime()
WriteLog("Call Success.")
else:
ShowTime()
WriteLog("Call Maybe Failed." )
def ShowTime():
WriteLog(time.strftime('%Y-%m-%d %H:%M:%S'))
def ReadAll():
global output_buffer
output_buffer = ''
while ShowLatestSMS(AutoDelete=True):
ShowLatestSMS(AutoDelete=True)
# return something
def SendSMS(Number,TEXT):
pdu = send2str(Number,unicode(TEXT))
ShowTime()
WriteLog("Sending Message")
WriteLog("Number : " + str(Number))
WriteLog("TEXT: " + unicode(TEXT))
AT_CMGS_LEN = pdu[0]
PduCode = pdu[1]
execute("AT")
execute("AT+CMGF=0")
execute('AT+CSCA="' + SMSCenter + '"') # SMS Center
execute("AT+CMGS="+str(AT_CMGS_LEN))
execute(PduCode,raw=True)
execute(b'\32',raw=True) # Ctrl + Z
return ''
def check(receiver):
WriteLog("...:::::: %s ::::::..."%time.ctime())
ReadAll()
global output_buffer
#print output_buffer.find('Empty')
if output_buffer.find('Sender') != -1: # not empty
f = open('log.txt','a')
f.write(output_buffer)
f.close()
m = mymail()
m.sendmail(to=receiver,subject='Your SMS - %s '%time.ctime(),message=output_buffer.decode('gbk').encode('utf8'))
if __name__=="__main__":
while True:
check(receiver='blah@gmail.com')
sleeptime = 30
print 'Next check in: %d'%sleeptime,
while sleeptime >0:
time.sleep(1)
sleeptime -= 1
print sleeptime,
print ''