Ejemplo n.º 1
0
Archivo: sms-gw.py Proyecto: x-f/sms-gw
# all arguments to GsmModem.__init__ are optional, and passed straight
# along to pySerial. for many devices, this will be enough:
gsm = GsmModem(
    port=config.modem_port,
    baudrate=config.modem_baudrate
    # ,logger=GsmModem.logger
  )#.boot()

# Esc
gsm._write("\x1B")
time.sleep(2)
#ping = gsm.command("\x1B", write_term="", raise_errors=False)
#print "Esc=" + str(ping)
#logmsg("Esc=" + str(ping))

ping = gsm.command("ATZ")
print "ATZ=" + str(ping)
logmsg("ATZ=" + str(ping))

  
gsm.boot()

print("port opened")
logmsg("port opened")

# fix notifications on SIM900
# gsm.command("AT+CNMI=2,1,0,1,0", raise_errors=False)


print "Waiting for network..."
logmsg("Waiting for network...")
Ejemplo n.º 2
0
gsm = GsmModem(port="/dev/ttyAMA0")
gsm.boot()

print "GPS/GSM UKHAS Tracker"
print "====================="
print

print "Modem details ..."
reply = gsm.hardware()
print "Manufacturer = " + reply['manufacturer']
print "Model = " + reply['model']
print

# Try and get phone number
reply = gsm.command('AT+CNUM')
if len(reply) > 1:
    list = reply[0].split(",")
    phone = list[1].strip('\"')
    print "Phone number = " + phone
    print

# Switch GPS on
print "Switching GPS on ..."
reply = gsm.command('AT+CGNSPWR=1')
print reply

while True:
    # Get position
    reply = gsm.command('AT+CGNSINF')
    list = reply[0].split(",")
Ejemplo n.º 3
0
# Set mobile number here
MobileNumber = "017412312312"
lastmessage = 'Stop'

print "Booting modem ..."
gsm = GsmModem(port="/dev/serial0")
gsm.boot()

print "Modem details:"
reply = gsm.hardware()
print "Manufacturer = " + reply['manufacturer']
print "Model = " + reply['model']

# Try and get phone number
reply = gsm.command('AT+CNUM')
if len(reply) > 1:
    list = reply[0].split(",")
    phone = list[1].strip('\"')
    print "Phone number = " + phone
print

print "Deleting old messages ..."
gsm.query("AT+CMGD=70,4")
print

SwitchGPSon()

print "Boot successful, waiting for messages ..."

while True:
Ejemplo n.º 4
0
class Sms:
    gsm = None
    logger = ""

    def __init__(self, port, logger=""):
        self.logger = logger
        self.gsm = GsmModem(port=port, logger=logger).boot()

    def _decode(self, text):
        try:
            return text.replace("\"", "").decode("hex").replace("\x00", "")
        except Exception:
            return text

    def _compose(self, msg, properties=["id", "status", "phone", "x"]):
        date_pattern = re.compile(
            r'\d\d/\d\d/\d\d,\d\d:\d\d:\d\d\+\d\d').search(msg)
        date = ""

        if date_pattern:
            date = date_pattern.group()

        message = msg.split(",")
        if self.logger == GsmModem.debug_logger:
            print("")
            print("messages")
            print("===============================")
            print(message)
            print("===============================")
        if (gsm.gsm.query("AT+CMGF?")[-1] == 0):
            obj = {
                properties[i]: self._decode(message[i])
                for i in range(0, len(properties))
            }
        else:
            obj = {
                properties[i]: message[i]
                for i in range(0, len(properties))
            }
        obj["date"] = date
        obj["status"] = re.compile(r'"\w+\s?\w+"').search(
            obj["status"]).group().replace("\"", "")

        return obj

    def storedSms(self, filter="ALL", _from="SM"):
        self.gsm.command("AT+CPMS=\"" + _from + "\",\"" + _from + "\",\"" +
                         _from + "\"")
        self.gsm.command("AT+CMGF=1")

        messages = self.gsm.query_list("AT+CMGL=\"" + filter + "\"")
        message_objs = []
        if self.logger == GsmModem.debug_logger:
            print("*************************")
            for msg in messages:
                print(msg)
            print("*************************")
        for msg in messages:
            message = msg.split(",")
            if (len(message) != 1):
                obj = self._compose(msg)
            else:
                message_objs[-1]["message"] = self._decode(message[0])

            message_objs.append(obj)

        return message_objs

    def getMessage(self, id, _from="SM"):
        self.gsm.command("AT+CPMS=\"" + _from + "\",\"" + _from + "\",\"" +
                         _from + "\"")
        self.gsm.command("AT+CMGF=1")

        message = self.gsm.query_list("AT+CMGR=" + str(id))
        obj = self._compose(message[0], properties=["status", "phone"])
        obj["message"] = self._decode(message[1])

        return obj

    def inbox(self, _from="SM"):
        unseen = self.storedSms("REC UNREAD", _from=_from)
        seen = self.storedSms("REC READ", _from=_from)
        return unseen + seen

    def outbox(self, _from="SM"):
        unsent = self.storedSms("STO UNSENT", _from=_from)
        sent = self.storedSms("STO SENT", _from=_from)
        return unsent + sent

    def sent(self, _from="SM"):
        sent = self.storedSms("STO SENT", _from=_from)
        return sent

    def newMessages(self, _from="SM"):
        unseen = self.storedSms("REC UNREAD", _from=_from)
        return unseen

    def faildMessages(self, _from="SM"):
        unsent = self.storedSms("STO UNSENT", _from=_from)
        return unsent

    def sendSms(self, message):
        print(">>>>", message)
        phone_pattern = re.compile(r'^\+\d{12}$')

        if (message["phone"][0] == "0"):
            message["phone"] = "+251" + message["phone"][1:len(message["phone"]
                                                               )]

        if (len(message["message"]) > 160):
            raise Exception(
                "Message is too long" + str(len(message["message"])) +
                ", the messasage should not be graterthan 160 characters")
        elif (not phone_pattern.search(message["phone"])):
            raise Exception("The phone number is invalid")
        else:
            return self.gsm.send_sms(message["phone"], message["message"])

    def sendSmses(self, messages):
        print("+++", message)
        phone_pattern = re.compile(r'^\+\d{12}$')
        self.gsm.command("AT+CMGF=1")
        faild_sms = []

        for msg in messages:
            try:
                if self.sendSms(msg) == None:
                    faild_sms.append(msg)
            except Exception as e:
                print(">>", e)
                faild_sms.append(msg)

        return faild_sms