class overmodem: def __init__(self,port,in_verbose = True): self.port=port self.verbose=in_verbose self.debug=logging.debug self.working_modem=self.start_modem() def statusmsg( self, input_string ): if self.verbose: print "[ STATUS ] " + input_string def errormsg( self, input_string ): if self.verbose: print "[ ERROR ] " + input_string def sms(self , phone_number,text): self.modem.wait_for_network() was_sent = self.modem.send_sms( phone_number, text) return was_sent def gsm_log(self, modem, str, level): self.debug("%s: %s" % (level, str)) def start_modem(self): self.statusmsg("Connecting and booting via pyGSM...") result=False try: result=True self.modem = GsmModem(logger=self.gsm_log, port=self.port) self.modem.boot() except Exception as e: result=False self.statusmsg(e.message) return result
def __init__(self, *args, **kwargs): if 'control_port' in kwargs: control_port = kwargs.pop('control_port') self._control = port.ControlPort() self._control.connect(handlers=[(patterns.CALLER_ID, self._caller_id)]) if 'id' in kwargs: self.id = kwargs.pop('id') GsmModem.__init__(self, *args, **kwargs)
def __init__(self, *args, **kwargs): if 'control_port' in kwargs: control_port = kwargs.pop('control_port') self._control = port.ControlPort(port=control_port) self._control.connect(handlers=[(patterns.CALLER_ID, self._caller_id), (patterns.USSD_RESPONSE, self._ussd_response)]) if 'id' in kwargs: self.id = kwargs.pop('id') GsmModem.__init__(self, *args, **kwargs)
def __init__(self, *args, **kwargs): if 'control_port' in kwargs: control_port = kwargs.pop('control_port') self._control = port.ControlPort(port=control_port) self._control.connect(handlers=[( patterns.CALLER_ID, self._caller_id), (patterns.USSD_RESPONSE, self._ussd_response)]) if 'id' in kwargs: self.id = kwargs.pop('id') GsmModem.__init__(self, *args, **kwargs)
def loadModems(config, logger): """ Updates networks """ for m in config['modems'].keys(): modemConfig = config['modems'][m] modem = GsmModem( port=modemConfig['port'], baudrate=modemConfig['baudrate'], logger=GsmModem.debug_logger,) modem.boot() networks.update({m: modemConfig}) networks[m].update({'modem': modem})
def getResrictionCode(number, code): print('inside getResrictionCode') gsm = GsmModem(port=dev) sendSMS(gsm, number, code) print("clear storage before recieve message") clear_storage(gsm) rcode = waiting_response(number, gsm) return rcode
class Command(BaseCommand): help = "This command need to be started whenever the application is running, of course after executing runserver." print conf['gsm'] gsm = GsmModem(port=conf['gsm']['port'], logger=GsmModem.debug_logger).boot() def handle(self, **options): print "Transmitting SMS..." cmd = SmsHandler(self.gsm).transmit_sms()
def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) global gsm #Initializing GSM Modem gsm = GsmModem(port="/dev/ttyUSB1", logger=GsmModem.debug_logger).boot() # Subscribing in on_connect() means that if we lose the connection and # reconnect then subscriptions will be renewed. client.subscribe(("iot-2/cmd/bluepi/fmt/json", 0))
def start_modem(self): self.statusmsg("Connecting and booting via pyGSM...") result=False try: result=True self.modem = GsmModem(logger=self.gsm_log, port=self.port) self.modem.boot() except Exception as e: self.statusmsg(e.message) return result
#!/usr/bin/env python # vim: ai ts=4 sts=4 et sw=4 import time from pygsm import GsmModem gsm = GsmModem(port="/dev/ttyUSB2").boot() csq = gsm.signal_strength() approx_dBm = ((-113) + (2 * csq)) csq_marginal = 9 csq_ok = 14 csq_good = 19 csq_excellent = 30 def csq_name(csq): if csq <= csq_marginal: return 'marginal' elif csq <= csq_ok: return 'ok' elif csq <= csq_good: return 'good' elif csq <= csq_excellent: return 'excellent' else: return 'searching' print 'CSQ: ',csq,'/',csq_excellent,'(',approx_dBm,'dBm) - ',csq_name(csq)
import time from pygsm import GsmModem gsm = GsmModem(port="/dev/ttyUSB0", logger=GsmModem.debug_logger).boot() print("Waiting for network...") s = gsm.wait_for_network() with open("messaggio.txt", "rt") as f: messaggio = f.read() with open("lista.csv", "rt") as f: for i, l in enumerate(f): gsm.send_sms(l.strip(), messaggio) time.sleep(1) gsm.disconnect()
global gpsd # bring it in scope gpsd = gps(mode=WATCH_ENABLE) # starting the stream of info self.current_value = None self.running = True # setting the thread running to true def run(self): global gpsd while gpsp.running: gpsd.next( ) # this will continue to loop and grab EACH set of gpsd info to clear the buffer me = singleton.SingleInstance() if __name__ == '__main__': snapshot_file = '/tmp/bluepisnapshot' gsm = GsmModem(port="/dev/ttyUSB1", logger=GsmModem.debug_logger).boot() gpsp = GpsPoller() # create the thread iccid = gsm.query("AT^ICCID?", "^ICCID:").strip('"') imei = gsm.query("ATI", "IMEI:") url = "<bluemix http post url>" headers = {'Content-type': 'application/json'} msgQ = Queue.Queue() try: gpsp.start() # start it up while True: # It may take a second or two to get good data # print gpsd.fix.latitude,', ',gpsd.fix.longitude,' Time: ',gpsd.utc try:
print 'Position: ' + UTC + ', ' + Latitude + ', ' + Longitude + ', ' + Altitude # Text to mobile Message = ' Position: ' + UTC + ', ' + str(Latitude) + ', ' + str( Longitude) + ', ' + str( Altitude) + ' http://maps.google.com/?q=' + str( Latitude) + ',' + str(Longitude) print "Sending to mobile " + MobileNumber + ": " + Message gsm.send_sms(MobileNumber, Message) # 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
import MySQLdb db = MySQLdb.connect(host="localhost", port=3306, user="******", passwd="ssn", db="smsmail") cursor=db.cursor() import time from pygsm import GsmModem gsm = GsmModem( port="/dev/ttyUSB0", logger=GsmModem.debug_logger).boot() cursor.execute('select * from mails where sent=0') data=cursor.fetchall() msg=[] i=0 for row in data: mess=str(row[2]+'\n'+row[3]) ids=row[0] msg.append((ids,mess)) i+=1 for ids,mess in msg:
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
def __init__(self, port, logger=""): self.logger = logger self.gsm = GsmModem(port=port, logger=logger).boot()
len(msg.text)) def serve_forever(self): while True: # print "Checking for message..." msg = self.modem.next_message() if msg is not None: print "Got Message: %r" % (msg) self.incoming(msg) time.sleep(2) # all arguments to GsmModem.__init__ are optional, and passed straight # along to pySerial. for many devices, this will be enough: gsm = GsmModem( port="/dev/ttyUSB2", logger=GsmModem.debug_logger).boot() print "Waiting for network..." s = gsm.wait_for_network() #gsm.send_sms("0711661919", "Hey, wake up!") while True: print "DEBUG:***********Message = {}".format(gsm.next_message()) time.sleep(2) # start the demo app #app = CountLettersApp(gsm) #app.serve_forever()
GatewayNumber = sys.argv[3] print "Texts will be sent to gateway number " + GatewayNumber else: GatewayNumber = None SendTimeout = 5 # Send position every x minutes regardless of movement HorizontalDelta = 50 # Send position if it moves horizontally by at keast this many metres VerticalDelta = 50 # Send position if it moves vertically by at least this many metres MaxGSMAltitude = 2000 # Don't try to send above this altitude PreviousSeconds = 0 PreviousAltitude = 0 PreviousLatitude = 0 PreviousLongitude = 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:
def incoming(self, msg): msg.respond("Thanks for those %d characters!" %\ len(msg.text)) def serve_forever(self): while True: print "Checking for message..." msg = self.modem.next_message() if msg is not None: print "Got Message: %r" % (msg) self.incoming(msg) time.sleep(2) # all arguments to GsmModem.__init__ are optional, and passed straight # along to pySerial. for many devices, this will be enough: gsm = GsmModem( port="/dev/ttyUSB0", logger=GsmModem.debug_logger).boot() print "Waiting for network..." s = gsm.wait_for_network() # start the demo app app = CountLettersApp(gsm) app.serve_forever()
allRFCommDevicePorts = scanRadioComm() allUSBDevicePorts = scanUSBSerial() print("RFPorts detected with devices on them: " + str(allRFCommDevicePorts)) print("USBPorts detected with devices on them: " + str(allUSBDevicePorts)) usbPortsIdentified = {} iccid = '' # Default values are blank for those that come from GSM modem imei = '' for usbPort in allUSBDevicePorts: try: with time_limit(4): print("Trying to connect as GSM to " + str(usbPort)) gsm = GsmModem(port=usbPort, logger=GsmModem.debug_logger).boot() print("GSM modem detected at " + str(usbPort)) allUSBDevicePorts.remove( usbPort) # We just found it engaged, don't use it again iccid = gsm.query("AT^ICCID?", "^ICCID:").strip('"') imei = gsm.query("ATI", "IMEI:") usbPortsIdentified[str(usbPort)] = "gsm" print(usbPort, usbPortsIdentified[usbPort]) break # We got a port, so break out of loop except TimeoutException: # Maybe this is not the right port for the GSM modem, so skip to the next number print("Timed out!") except IOError: print("IOError - so " + usbPort + " is also not a GSM device") # Open a SQLlite3 connection
# and send the application's response to the client httpd = make_server( '192.168.0.101', # The host name. 8090, # A port number where to wait for the request. application, # Our application object name, in this case a function. server_class=SecureWSGIServer, #up there ;) handler_class=SecureWSGIRequestHandler #up there also ) # Wait for request, serve it . httpd.serve_forever() logging.debug('srver started succefuly',extra=s) except Exception, e: logging.exception('Error ------------- ',extra=s) Daisy13_on_D1="/dev/ttyS1" gsm = GsmModem(port=Daisy13_on_D1,baudrate=115200,logger=GsmModem.debug_logger).boot() z = gsm.wait_for_network() app = gsmmodule(gsm) if __name__ == "__main__": daemon = MyDaemon('/tmp/daemon-example.pid') if len(sys.argv) == 2: if 'start' == sys.argv[1]: #gsm.boot() daemon.start() elif 'stop' == sys.argv[1]: #app.sendsms(s,"0633466667","sms server stoping") #activate this to secure server logging.debug('srver stoping',extra=s) daemon.stop() elif 'restart' == sys.argv[1]: gsm.boot() app = gsmmodule(gsm)
# gsm.send_sms(MobileNumber, Message) # DEFINE GLOBAL VARIABLES #---------------------------------------------------------------------- SendTimeout = 5. # Send position every x minutes regardless of movement HorizontalDelta = 20. # Send position if it moves horizontally by at least this many metres VerticalDelta = 2. # Send position if it moves vertically by at least this many metres # variabile logica per capire quando c'è stata una variazione di posizione changeXYZ = 0 # Set mobile number here MobileNumber = "+39xxxxxxxxx" # Set here mobile number print("Booting modem ...") gsm = GsmModem(port="/dev/ttyAMA0") # try with ttyS0 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
Delete all messages if full ''' out = gsm.query("AT+CPMS=SM") m = re.match(r'\+CPMS: (\d{1,2}),(\d{2})', out) cur_size = m.group(1) max_size = m.group(2) print("current messages: %s, maximum size: %s" % (cur_size, max_size)) if cur_size == max_size: # clear the storage, delete all messages delete_all_sms(gsm) def getResrictionCode(number, code): print('inside getResrictionCode') gsm = GsmModem(port=dev) sendSMS(gsm, number, code) print("clear storage before recieve message") clear_storage(gsm) rcode = waiting_response(number, gsm) return rcode if __name__ == "__main__": # clear_storage() gsm = GsmModem(port=dev) delete_all_sms(gsm) # gsm.query("AT+CMGD=1")
time.sleep(10) logmsg("-----------------") print("SMS-GW started") logmsg("SMS-GW started") print("connecting..") logmsg("connecting..") # 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))
#!env python from pygsm import GsmModem gsm = GsmModem(port="COM22",baudrate=115200,logger=GsmModem.debug_logger).boot() s = gsm.wait_for_network() #gsm.send_sms('+256784726116', 'This is a message') numbers=['+256779127009','+256782481746'] for number in numbers: gsm.send_sms(number, 'This is a message from a modem')
'192.168.0.101', # The host name. 8090, # A port number where to wait for the request. application, # Our application object name, in this case a function. server_class=SecureWSGIServer, #up there ;) handler_class=SecureWSGIRequestHandler #up there also ) # Wait for request, serve it . httpd.serve_forever() logging.debug('srver started succefuly', extra=s) except Exception, e: logging.exception('Error ------------- ', extra=s) Daisy13_on_D1 = "/dev/ttyS1" gsm = GsmModem(port=Daisy13_on_D1, baudrate=115200, logger=GsmModem.debug_logger).boot() z = gsm.wait_for_network() app = gsmmodule(gsm) if __name__ == "__main__": daemon = MyDaemon('/tmp/daemon-example.pid') if len(sys.argv) == 2: if 'start' == sys.argv[1]: #gsm.boot() daemon.start() elif 'stop' == sys.argv[1]: #app.sendsms(s,"0633466667","sms server stoping") #activate this to secure server logging.debug('srver stoping', extra=s) daemon.stop() elif 'restart' == sys.argv[1]: gsm.boot()
class CountLettersApp(object): def __init__(self, modem): self.modem = modem def incoming(self, msg): msg.respond("Thanks for those %d characters!" %\ len(msg.text)) def serve_forever(self): while True: print("Checking for message...") msg = self.modem.next_message() if msg is not None: print("Got Message: %r" % (msg)) self.incoming(msg) time.sleep(2) # all arguments to GsmModem.__init__ are optional, and passed straight # along to pySerial. for many devices, this will be enough: gsm = GsmModem(port="/dev/ttyUSB0", logger=GsmModem.debug_logger).boot() print("Waiting for network...") s = gsm.wait_for_network() # start the demo app app = CountLettersApp(gsm) app.serve_forever()
from pygsm import GsmModem from optparse import OptionParser import socket DETACHED_PROCESS = 0x00000008 parser = OptionParser() parser.add_option("-p", dest="pin", default=1234, help="Pin for the system") parser.add_option("-m", dest="msisdn", action="append", type="string", help="Msidns that require access add -m with the numbers") (options, args) = parser.parse_args() pprint.pprint("Waiting for commands from: %s" % options.msisdn) # all arguments to GsmModem.__init__ are optional, and passed straight # along to pySerial. for many devices, this will be enough: gsm = GsmModem( port="/dev/ttyUSB0").boot(pin = options.pin) class do_something(): def __init__ (self, *args, **kwargs): if "gsm" in kwargs: self.gsm = kwargs.pop("gsm") def Test(self,msisdn): gsm.send_sms(msisdn,"it works AHAHAHAHAH") def Ping(self,msisdn): gsm.send_sms(msisdn,time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())) def Connect(self,msisdn): pid = subprocess.Popen([sys.executable, "/usr/bin/wvdial internet"], creationflags=DETACHED_PROCESS).pid gsm.send_sms(msisdn,"My ip is 1.1.1.1 whats your ip ?") message = gsm.next_message(fetch=True) while message is None: time.sleep(1)
def incoming(self, msg): msg.respond("Thanks for those %d characters!" %\ len(msg.text)) def serve_forever(self): print "Checking for message..." while True: msg = self.modem.next_message() if msg is not None: print "Got Message: %r" % (msg) self.incoming(msg) time.sleep(2) # all arguments to GsmModem.__init__ are optional, and passed straight # along to pySerial. for many devices, this will be enough: gsm = GsmModem( port="/dev/ttyUSB0").boot() print "Waiting for network..." s = gsm.wait_for_network() # start the demo app app = CountLettersApp(gsm) app.serve_forever()