Skip to content

Instantly share code, notes, and snippets.

@Foolson
Last active March 1, 2020 18:43
Show Gist options
  • Save Foolson/df80a01e2a05a73e3f0afe2e31b90239 to your computer and use it in GitHub Desktop.
Save Foolson/df80a01e2a05a73e3f0afe2e31b90239 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
import sms
import re
import sys
import argparse
import codecs
parser = argparse.ArgumentParser()
requiredNamed = parser.add_argument_group('required named arguments')
requiredNamed.add_argument(
"-t", "--text", help="Text content", required=True)
requiredNamed.add_argument(
"-m", "--msisdn", help="MSISDN reciever, 46XXXXXXXXX", required=True)
requiredNamed.add_argument(
"-s", "--serial_interface", help="Serial interface", required=True)
args = parser.parse_args()
text = args.text.encode().replace(b'\\n', b'\n').decode()
msisdn = args.msisdn
serialInterface = args.serial_interface
if re.match(r'^46[1-9]\d{8}$', msisdn):
sms.send(text=text, msisdn=msisdn, serialInterface=serialInterface)
else:
print('ERROR: Not a correct swedish number')
sys.exit(1)
#!/usr/bin/env python3
import serial
import smsutil
class smsInitiateError(LookupError):
pass
class smsMisdnError(LookupError):
pass
class smsSendError(LookupError):
pass
class smsModemConnectionError(LookupError):
pass
def send(text, msisdn, serialInterface):
try:
with serial.Serial(serialInterface, 115200, timeout=4) as modem:
modem.write(b'AT+CMGF=1\r')
response = modem.read(16)
if b'OK' not in response:
raise smsInitiateError('FAILED: AT+CMGF=1')
modem.write(b'AT+CSCS="GSM"\r')
response = modem.read(20)
if b'OK' not in response:
raise smsInitiateError('FAILED: AT+CSCS="GSM"')
msisdn = msisdn.encode()
writeData = b'AT+CMGS="'+msisdn+b'"\r'
modem.write(writeData)
response = modem.read(25)
if b'>' not in response:
raise smsMisdnError('FAILED: '+str(writeData.decode()))
data = smsutil.encode(text)
dataLength = len(data)+4
modem.write(data)
modem.write(bytes([26]))
response = modem.read(dataLength+18)
if b'OK' not in response[dataLength:]:
raise smsSendError('FAILED: To send message "'+text+'"')
except serial.serialutil.SerialException:
raise smsModemConnectionError(
'FAILED: To initiate modem serial connection with "' +
serialInterface + '"')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment