def __init__(self, tty_device_file, pin): try: self.MODEM = humod.Modem(tty_device_file, tty_device_file) signal.signal(signal.SIGALRM, self._handler_timeout_signal) signal.alarm(10) self.MODEM.show_model() signal.alarm(0) except: self.handle_error(self.ERR_MSG_INIT_MODEM) try: self.CMD_CPIN = Command(self.MODEM, self.CMD_STR_CPIN) pin_status = self.CMD_CPIN.get()[0] except: self.handle_error(self.ERR_MSG_PIN_QUERY) if 'IM PUK' in pin_status: self.handle_error(self.ERR_MSG_PUK) if 'IM PIN' in pin_status: if pin == '': self.handle_error(self.ERR_MSG_PIN_EMPTY) try: self.CMD_CPIN.set(pin) except: self.handle_error(self.ERR_MSG_PIN_APPLY) try: pin_status = self.CMD_CPIN.get()[0] except: self.handle_error(self.ERR_MSG_PIN_QUERY) if 'EADY' not in pin_status: self.handle_error(self.ERR_MSG_PIN_WRONG) return if 'EADY' not in pin_status: self.handle_error(self.ERR_MSG_PIN_UNDEFINED) try: self.CMD_CPOS = Command(self.MODEM, self.CMD_STR_COPS) self.CMD_CPOS.set(0) except: self.handle_error(self.ERR_MSG_CMD_CPOS_FAILED) time.sleep(10) try: self.CMD_CSCS = Command(self.MODEM, self.CMD_STR_CSCS) self.CMD_CSCS.set('"GSM"') except: self.handle_error(self.ERR_MSG_SET_CHARACTER_SET_FAILED) try: self.MODEM.enable_textmode(True) except: self.handle_error(self.ERR_MSG_SET_TEXTMODE_FAILED)
def syncModemTime(): #xtraGps = Command(modem, '+CGPSXE') #xtraSetup = Command(modem, '+CGPSXD') setServerCmd = Command(modem, '+CHTPSERV') setServerCmd.set('\"ADD\", "www.google.com", 80, 1') timeSync = Command(modem, '+CHTPUPDATE') timeSync.run()
class ModemManager(): MODEM = None CMD_CPIN = None CMD_CPOS = None CMD_CSCS = None CMD_STR_CPIN = '+CPIN' # PIN management CMD_STR_COPS = '+COPS' # Operator management CMD_STR_CSCS = '+CSCS' # Character set management ERR_MSG_INIT_MODEM = 'ERROR: Failed to initialze modem' ERR_MSG_PUK = 'ERROR: SIM requires PUK code' ERR_MSG_PIN_EMPTY = 'ERROR: SIM requires PIN but no PIN provided' ERR_MSG_PIN_QUERY = 'ERROR: SIM query for PIN failed' ERR_MSG_PIN_APPLY = 'ERROR: Failed to apply PIN' ERR_MSG_PIN_WRONG = 'ERROR: Wrong PIN supplied' ERR_MSG_PIN_UNDEFINED = 'ERROR: Undefined PIN status' ERR_MSG_CMD_CPOS_FAILED = 'ERROR: Setting auto search mode failed' ERR_MSG_SET_TEXTMODE_FAILED = 'ERROR: Setting text mode failed' ERR_MSG_SET_CHARACTER_SET_FAILED = 'ERROR: Failed to setup character set of the modem' ERR_MSG_NEW_SMS_CB_FAILED = 'ERROR: Failed register callback for new SMS' def __init__(self, tty_device_file, pin): try: self.MODEM = humod.Modem(tty_device_file, tty_device_file) signal.signal(signal.SIGALRM, self._handler_timeout_signal) signal.alarm(10) self.MODEM.show_model() signal.alarm(0) except: self.handle_error(self.ERR_MSG_INIT_MODEM) try: self.CMD_CPIN = Command(self.MODEM, self.CMD_STR_CPIN) pin_status = self.CMD_CPIN.get()[0] except: self.handle_error(self.ERR_MSG_PIN_QUERY) if 'IM PUK' in pin_status: self.handle_error(self.ERR_MSG_PUK) if 'IM PIN' in pin_status: if pin == '': self.handle_error(self.ERR_MSG_PIN_EMPTY) try: self.CMD_CPIN.set(pin) except: self.handle_error(self.ERR_MSG_PIN_APPLY) try: pin_status = self.CMD_CPIN.get()[0] except: self.handle_error(self.ERR_MSG_PIN_QUERY) if 'EADY' not in pin_status: self.handle_error(self.ERR_MSG_PIN_WRONG) return if 'EADY' not in pin_status: self.handle_error(self.ERR_MSG_PIN_UNDEFINED) try: self.CMD_CPOS = Command(self.MODEM, self.CMD_STR_COPS) self.CMD_CPOS.set(0) except: self.handle_error(self.ERR_MSG_CMD_CPOS_FAILED) time.sleep(10) try: self.CMD_CSCS = Command(self.MODEM, self.CMD_STR_CSCS) self.CMD_CSCS.set('"GSM"') except: self.handle_error(self.ERR_MSG_SET_CHARACTER_SET_FAILED) try: self.MODEM.enable_textmode(True) except: self.handle_error(self.ERR_MSG_SET_TEXTMODE_FAILED) def _handler_timeout_signal(self, signal_number, frame): raise Exception def handle_error(self, message): print message exit(1) def send_sms(self, number, message): try: self.CMD_CSCS.set('"GSM"') self.MODEM.sms_send(number, message) except: print 'ERROR: Failed to send SMS' def register_new_sms_callback(self, callback): try: self.MODEM.enable_nmi(True) self.MODEM.prober.start([(humod.actions.PATTERN['new sms'], callback)]) except: self.handle_error(self.ERR_MSG_NEW_SMS_CB_FAILED) def stop_prober(self): self.MODEM.prober.stop()
def getTime(): timeCmd = Command(modem, '+CCLK') return timeCmd.get()
def checkApn(): apnCmd = Command(modem, '+CGSOCKCONT') return apnCmd.get()[0]
def enableAutoReporting(): autoCmd = Command(modem, '+AUTOCSQ') autoCmd.set("1,0") print('GPS auto reporting enabled')
def disableGps(): gpsConf = Command(modem, '+CGPS') gpsConf.set("0,2") time.sleep(0.2) print('GPS disabled')
def enableGps(): gpsConf = Command(modem, '+CGPS') gpsNmeaCmd = Command(modem, '+CGPSINFOCFG') settingStr = "%s,1" % str(gpsUpdateRate) if getGpsConf()[0]: print('GPS is already running') gpsConf.set("0,2") time.sleep(1) gpsNmeaCmd.set(settingStr) time.sleep(1) gpsConf.set("1,2") else: gpsNmeaCmd.set(settingStr) time.sleep(0.2) gpsConf.set("1,2") print('GPS enabled')
def getGpsConf(): gpsConf = Command(modem, '+CGPS') return gpsConf.get()[0].encode('UTF8').split(',', 1)