def LeerBufferSMS(self): time.sleep(0.2) todalarespuesta = [] while self.MODEM.inWaiting() >= 1: respuesta = self.MODEM.readline() if respuesta == "\r\n": pass elif re.match("\+CMTI", respuesta): pass elif re.match("\%", respuesta): GuardarTXTObjeto.GuardarErrorLog(self.NumPuerto, respuesta) elif re.match("RING", respuesta): GuardarTXTObjeto.GuardarErrorLog(self.NumPuerto, respuesta) else: respuesta = respuesta.replace("\r", "") respuesta = respuesta.replace("\n", "") todalarespuesta.append(respuesta) time.sleep(0.5) return todalarespuesta
def Validar(self, numero): self.numero = numero #len(self.numero) == int(self.largo) if True: for i in self.formatos: if re.match(i, self.numero): return "Ok" break else: GuardarTXTObjeto.GuardarErrorLog("Movil Len Max..", str(self.numero)) return "Ok" #None
def AddMensajeRecibido(self,telefono,mensaje,smsrecibidos): try: datos = [str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Recibidos.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Recibidos.setItem(fila,columna,texto) columna = columna + 1 #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Recibidos.rowCount() > 100: self.MainWindow.tableWidget_Recibidos.removeRow(101) #Cambiamos el label de Contador self.MainWindow.label_MensajesRecibidos.setText("SMS Incoming ("+str(smsrecibidos)+")") except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc()))
def AddMensajeCola(self,telefono=None,mensaje=None,pk=None): try: #Variables para Insertar if telefono != None: datos = ["1",str(pk),str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Cola.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Cola.setItem(fila,columna,texto) columna = columna + 1 #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Cola.rowCount() > 100: self.MainWindow.tableWidget_Cola.removeRow(101) #Cambiamos el label de Contador filas = self.MainWindow.tableWidget_Cola.rowCount() self.MainWindow.label_TotalCola.setText(str(filas)) except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc()))
def Iniciar(self): #Esta funcion iniciar la creo porque no se puede llamar a run directamente. self.ConectarBD() while True: try: #Solo si es Master busca mensajes en la Base de datos if self.master == True: self.BuscarMensajes() else: pass #Pero igualmente al ser Slave Actualiza sus propios Mensajes en BD self.ActualizarEnviados() self.ActualizarFallidos() self.InsertarRecibidos() time.sleep(1) except Exception as exc: GuardarTXTObjeto.GuardarErrorLog('GETSMS Error...', str(traceback.format_exc())) print 'NO DATA BASE CONECTION...' time.sleep(10) self.Iniciar()
def AddMensajeFallido(self,telefono,mensaje,pk,smsfallidos): try: #Variables para Insertar datos = ["1",str(pk),str(telefono),str(mensaje),str(LaFecha.damefechaJerm())] fila = 0 columna = 0 self.MainWindow.tableWidget_Fallidos.insertRow(0) for item in datos: texto = QtGui.QTableWidgetItem(item) self.MainWindow.tableWidget_Fallidos.setItem(fila,columna,texto) columna = columna + 1 #Eliminamor el primero de la cola self.MainWindow.tableWidget_Cola.removeRow(0) #Contamos la cantidad de columnas en la tabla if self.MainWindow.tableWidget_Fallidos.rowCount() > 100: self.MainWindow.tableWidget_Fallidos.removeRow(101) #Sumo el numero al Label Contador self.MainWindow.label_MensajesFallidos.setText("SMS Fail ("+str(smsfallidos)+")") #Actualizar el Label de la Cola self.AddMensajeCola() except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc()))
def proceso(self): try: #Enviamos CTRLZ por quedo enviando SMS, Manual con un TimeSleep para Esperar una respuesta mas tiempo self.MODEM.write(chr(26) + "\r\n") time.sleep(5) #Si hay algo en el Buffer, lo leemos if self.MODEM.inWaiting() >= 1: self.LeerBuffer() else: pass #Verificamos que quitamos el ECHO if self.QuitarEcho() == "OK": #Colocamos los Errores Completos self.ActivarTextoErrores() #Verificamos el Estado de la SIM en el Equipo if self.DameEstadoSIM() == "OK": #Verificamos si estamos Conectados a la Operadora if self.EstasRegistrado() == "OK": #Verificamos a que Operador estamos registrados self.DameOperadora() #Verificamos el nivel de seƱal del equipo if self.DameSenal() == "OK": #Activamos el Modo Texto if self.ActivarSMSTexto() == "OK": self.DameMarca() self.DameModelo() self.DameVersion() self.DameIMEI() self.DameBateria() #Envio la informacion para la StatusBar self.AddInfoStatusBar(self.Marca, self.Modelo, self.Version, self.OPERADORA, self.IMEI) #Vacio la Memoria de SMS #self.VaciarMemoriaSMS() #Coloco el Modem en Status OK self.Status = "OK" #Colocamos el Status en el Label self.StatusToLabel("OK") self.emit(QtCore.SIGNAL("signalCrearServer")) cont = 0 while True: cont = cont + 1 if self.Status == "OK": if len(globalvars.ColaparaEnviar) >= 1: #Enviamos Mensajes self.EnviarSMS() else: if len(globalvars.ColaGeneral ) >= 1: #if self.Master == True: if len(globalvars.ColaGeneral ) >= 10: for i in range(5): globalvars.ColaparaEnviar.append( globalvars. ColaGeneral.pop(0)) else: globalvars.ColaparaEnviar.append( globalvars.ColaGeneral. pop(0)) self.AddTabMensajeCola() #Para que de tiempo de colocar la cola en la interfaz time.sleep(1) else: self.Imprimir("Read SMS....OK") self.LeerSMS() if cont == 1: self.AddInfoStatusBar( self.Marca, self.Modelo, self.Version, self.OPERADORA, self.IMEI) #Pedimos la senal para comprobar que tengamos while True: senal = self.DameSenal() if senal == "OK": break else: self.Imprimir( "Not signal operator" ) pass time.sleep(1) #time.sleep(4) elif self.Status == "ERROR": #Solo detiene el Cliente si es Tipo Cliente, si es Server sigue corriendo #Asi no pueda enviar mensajes. if self.Master == False: self.emit( QtCore.SIGNAL( "signalDetenerCliente")) self.Imprimir( "Notificate Error Send Email...") break else: #No se pudo activar Modo Texto self.Imprimir("Error 1521") else: #No tiene Senal el Modem self.Imprimir("Error 1522") else: #Problema con la Operadora, No la Consigue self.Imprimir("Error 1523") else: #Problema con la SIMCARD self.Imprimir("Error 1524") else: #No se pudo eliminar el ECHO self.Imprimir("Error 1525") except Exception as exc: excepcion = str(exc) GuardarTXTObjeto.GuardarErrorLog( self.NumPuerto, "Not Comunicate Device... " + str(traceback.format_exc())) self.Imprimir("Not Comunicate Device...")
def EnviarSMS(self): mensajeytelefono = globalvars.ColaparaEnviar.pop(0) self.Imprimir("SENDING SMS: " + str(mensajeytelefono)) mensajeytelefono = mensajeytelefono.split("|") telefono = mensajeytelefono[0] mensaje = mensajeytelefono[1] pk = mensajeytelefono[2] intento = 1 while intento <= 3: self.MODEM.write('AT+CMGS="%s"\r\n' % str(telefono)) time.sleep(1) self.MODEM.readline() completo = "" while True: caracter = self.MODEM.read() completo = completo + caracter if caracter == "\x20": break self.Imprimir(completo) self.MODEM.write(str(mensaje) + chr(26) + "\r\n") while self.MODEM.inWaiting() <= 6: time.sleep(0.1) pass respuesta = self.LeerBuffer() self.Imprimir(str(respuesta)) for i in respuesta: if re.match("\+CMS ERROR", i): enviado = False intento = intento + 1 GuardarTXTObjeto.GuardarErrorLog( self.NumPuerto, str(respuesta) + " IntentoSMS = " + str(intento), mensaje) #Si van 3 intentos fallidos, se suma a fallidosseguidos if intento == 4: self.FallidosSeguidos = self.FallidosSeguidos + 1 #Verificamos si van 10 Fallidos Seguidos para cambiar Status Modem if self.FallidosSeguidos == 10: #Enviamos el Status al Label self.StatusToLabel("ERROR") #Cambiamos el Status para Detener self.Status = "ERROR" break self.Imprimir( "Error Sending SMS...Notificate Email Administrator..." ) self.Imprimir("Waiting...") time.sleep(4) elif re.match("\+CMGS", i): enviado = True intento = 4 #En caso de enviar un SMS, se coloca en 0 fallidosseguidos self.FallidosSeguidos = 0 break else: #En caso de que no responda algo esperado enviado = False intento = intento + 1 #Si van 3 intentos fallidos, se suma a fallidosseguidos if intento == 4: self.FallidosSeguidos = self.FallidosSeguidos + 1 #Verificamos si van 10 Fallidos Seguidos para cambiar Status Modem if self.FallidosSeguidos == 10: #Enviamos el Status al Label self.StatusToLabel("ERROR") #Cambiamos el Status para Detener self.Status = "ERROR" #Si el PK es simulado es un mensaje simulado que no se guarda. Solo se envia if enviado == True and pk != "Simulado": self.AddTabMensajeEnviado(telefono, mensaje, pk) globalvars.ColaEnviados.append(str(mensajeytelefono[2])) elif enviado == False and pk != "Simulado": self.AddTabMensajeFallido(telefono, mensaje, pk) globalvars.ColaFallidos.append(str(mensajeytelefono[2]))
def Iniciar(self): print globalvars.Modo try: if globalvars.Modo == '1': self.puertomodem = 23 #sys.argv[1] Es el parametro que llega de afuerta al correo el sistema self.BasedeDatos = BasedeDatos() self.BasedeDatos.Conectar() self.BasedeDatos.SeleccionarUno("""SELECT id_modem,tipo,config FROM t365_Modem WHERE id_modem = ?""", self.puertomodem) self.configpuerto = str(self.BasedeDatos.resultado.config).split(',') #460800,8,N,1 self.configmodem = ['23',460800,'8','N','1','1'] elif globalvars.Modo == '2': archivoconfiguracion = open('conf/config.txt','r') self.lineaconfig = archivoconfiguracion.readline() self.configmodem = self.lineaconfig.split(",") elif globalvars.Modo == None: self.configmodem = 23 #sys.argv[1] Es el parametro que llega de afuerta al correo el sistema #Pasando los argumentos a los objetos de PySerial self.puerto = 22 #self.configmodem[0] self.baudrate = 921600 #self.configmodem[1] self.bitesize = 8 #globalvars.nombresPySerial['BiteSize'][self.configmodem[2]] self.parity = 'N' #globalvars.nombresPySerial["Parity"][self.configmodem[3]] self.stopbits = 1 #globalvars.nombresPySerial["StopBits"][self.configmodem[4]] self.modem = 1 #self.configmodem[5].rstrip('\n') #Le cambiamos el nombre a la ventana y le colocamos el COM antes del Titulo self.setWindowTitle("("+str(self.puerto)+")"+" .: www.soluciones-sms.com :.") #serial.Serial(int(self.puerto)-1,self.baudrate,eval(self.bitesize),eval(self.parity),eval(self.stopbits)) self.PuertoCOM = serial.Serial(port='COM22', baudrate=921600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None) #23,460800,8,serial.PARITY_NONE,1) print "Modem:" print self.modem self.modem = '2' if self.modem == '1': self.modemseleccionado = Modem_EnforaSerial(self.PuertoCOM,self.puerto) self.modemseleccionado.start() self.accionIniciar.setEnabled(True) self.accionDetener.setEnabled(True) #Creamos el hilo del Server, pero no lo arrancamos si no con una senal desde el mismo Modem cuando compruebe que inicio bien self.server = HiloServer() #Creamos el hilo del Cliente, pero no lo arrancamos al menos que ya halla server. self.cliente = HiloCliente() elif self.modem == '2': self.modemseleccionado = Modem_HuaweiUSB(self.PuertoCOM,self.puerto) self.modemseleccionado.start() self.accionIniciar.setEnabled(True) self.accionDetener.setEnabled(True) #Creamos el hilo del Server, pero no lo arrancamos si no con una senal desde el mismo Modem cuando compruebe que inicio bien self.server = HiloServer() #Creamos el hilo del Cliente, pero no lo arrancamos al menos que ya halla server. self.cliente = HiloCliente() return True except Exception as exc: GuardarTXTObjeto.GuardarErrorLog(0,str(traceback.format_exc())) self.EscribirConsola("Port "+str(self.puerto)+" in use...") self.EscribirConsola(str(traceback.format_exc())) return False