MEIO-CONCLUIDO - SmsLIB, Protocol Data Unit (PDU), Modem GSM, Comandos AT
11 respostas
R
ricoldi
Boa tarde,
Estou procurando sobre como mandar comandos AT para modems GSM, mais especificamente sobre enviar e receber mensagens SMS. e somente encontrei algumas coisas, o modem que estou usando trabalha com o modo PDUe não tenho idéia de como montar uma string destas.
publicvoidrun(){try{Servicesrv=newService();SerialModemGatewaygateway=newSerialModemGateway("modem.com8","COM8",115200,"Giant","D301");gateway.setOutboundNotification(this);gateway.setInbound(true);gateway.setOutbound(true);gateway.setSimPin("3636");srv.addGateway(gateway);System.out.println("Status:"+gateway.isStarted());srv.startService();//Daqui não passa!System.out.println("Status:"+gateway.isStarted());// Send a message synchronously.OutboundMessagemsg=newOutboundMessage("99999999","Teste");System.out.println("msg: "+msg);}catch(Exceptione){System.out.println("-------------------------- printStackTrace ()");e.printStackTrace();System.out.println("-------------------------- getCause()");e.getCause().printStackTrace();}System.out.println("FIM!");}publicvoidprocess(StringgatewayId,OutboundMessagemsg){System.out.println("Outbound handler called from Gateway: "+gatewayId);System.out.println(msg);}
Erro:
Status:false//Ele dá o primeiro print mas não passa para o segundo!--------------------------printStackTrace()org.smslib.GatewayException:Commlibraryexception:java.lang.reflect.InvocationTargetExceptionatorg.smslib.modem.SerialModemDriver.connectPort(SerialModemDriver.java:93)atorg.smslib.modem.AModemDriver.connect(AModemDriver.java:106)atorg.smslib.modem.ModemGateway.startGateway(ModemGateway.java:111)atorg.smslib.Service$1Starter.run(Service.java:227)--------------------------getCause()Exceptioninthread"Thread-0"java.lang.NullPointerExceptionatSendMessage.run(SendMessage.java:45)atSendMessage$1.run(SendMessage.java:16)
Solução:
Bom galera,
achei a resposta e vou postar aqui para quem passar pela mesma bobeira que eu! (pois foi eu que marquei bobeira)
o SmsLib utiliza o pacote JavaComm portanto é necessario jogar os arquivos (No caso do windows):
javax.comm.properties
comm.jar
win32com.dll
Em uma pasta e apontar o comm.jar no classpath
Att
Ricoldi
R
ricoldi
Abaixo um exemplinho de como usar a SMSLIB para receber e enviar sms usando um modem sms:
importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.util.ArrayList;importjava.util.List;importorg.smslib.Library;importorg.smslib.OutboundMessage;importorg.smslib.Service;importorg.smslib.modem.SerialModemGateway;importorg.smslib.IInboundMessageNotification;importorg.smslib.Message.MessageTypes;importorg.smslib.InboundMessage;importorg.smslib.InboundMessage.MessageClasses;publicclassMainimplementsIInboundMessageNotification{privateServiceservice;privateSerialModemGatewaygateway;publicstaticvoidmain(String[]args){args=newString[4];args[0]="COM8";args[1]="115200";args[2]="GIANT";args[3]="D301";if(args.length!=4){System.out.println("Argumentos devem ser [porta] [velocidade] [fabricante] [modelo]");System.exit(0);}Mainmain=newMain();try{main.iniciar(args[0],Integer.parseInt(args[1]),args[2],args[3]);BufferedReaderbuf=newBufferedReader(newInputStreamReader(System.in));String[]comando=newString[2];do{System.out.println("Entre com o comando:");comando[0]=buf.readLine();if((!comando[0].equalsIgnoreCase("FECHAR"))&&(comando[0].length()>0)){try{comando=comando[0].split(" ");System.out.println("Telefone: "+comando[0]);for(intcont=2;cont<comando.length;cont++){comando[1]+=" "+comando[cont];}System.out.println("Msg: "+comando[1]);main.enviaSms(comando[0],comando[1]);}catch(Exceptione){System.out.println("Comando invalido!");}}}while(!comando[0].equalsIgnoreCase("FECHAR"));}catch(Exceptione){e.printStackTrace();}main.parar();}publicvoidprocess(StringgatewayId,MessageTypesmsgType,InboundMessagemsg){System.out.println("--------------------------------------");System.out.println("GatewayId: "+gatewayId);if(msgType==MessageTypes.INBOUND){System.out.println("Tipo: Mensagem recebida");}elseif(msgType==MessageTypes.STATUSREPORT)System.out.println("Tipo: Status Report");System.out.println(msg);try{// Uncomment following line if you wish to delete the message upon arrival.service.deleteMessage(msg);}catch(Exceptione){System.out.println("ERRO AO APAGAR SMS");e.printStackTrace();}}publicMain(){service=newService();}publicvoidiniciar(String_porta,int_velocidade,String_fabricante,String_modelo){try{Stringnomeconexao="modem."+_porta.toLowerCase();System.out.println("Nome da conexão: "+nomeconexao);System.out.println("Porta: "+_porta);System.out.println("Velocidade: "+_velocidade);System.out.println("Fabricante: "+_fabricante);System.out.println("Modelo: "+_modelo);gateway=newSerialModemGateway(nomeconexao,_porta,_velocidade,_fabricante,_modelo);gateway.setInbound(true);gateway.setOutbound(true);gateway.setInboundNotification(this);service.addGateway(gateway);try{service.startService();}catch(Exceptione){e.printStackTrace();}System.out.println("Sinal: "+gateway.getSignalLevel());System.out.println("Apagando caixa de entrada!");deletarTodas();System.out.println("Caixa de entrada apagada!");}catch(Exceptione2){e2.printStackTrace();}}publicvoiddeletarTodas(){try{List<InboundMessage>msgList;msgList=newArrayList<InboundMessage>();service.readMessages(msgList,MessageClasses.ALL);for(InboundMessagemsg:msgList){try{System.out.println("["+msg.getDate()+"] Remetente: "+msg.getOriginator());service.deleteMessage(msg);}catch(Exceptione2){e2.printStackTrace();}}}catch(Exceptione){System.out.println("ERRO AO DELETAR TODOS OS SMS!");e.printStackTrace();}}publicvoidparar(){try{service.stopService();System.out.println("Serviço terminado!");}catch(Exceptione){System.out.println("ERRO AO PARAR SERVIÇO!");e.printStackTrace();}}publicvoidenviaSms(String_telefone,String_msg){try{System.out.println("Enviando SMS para ["+_telefone+"]");OutboundMessagemsg=newOutboundMessage(_telefone,_msg);msg.setStatusReport(true);service.sendMessage(msg);System.out.println("SMS Enviado!");}catch(Exceptione){System.out.println("ERRO AO ENVIAR SMS!");e.printStackTrace();}}}
Att
Ricoldi
R
ronildobraga
ricoldi:
Boa tarde,
Estou procurando sobre como mandar comandos AT para modems GSM, mais especificamente sobre enviar e receber mensagens SMS. e somente encontrei algumas coisas, o modem que estou usando trabalha com o modo PDUe não tenho idéia de como montar uma string destas.
Enviei as devidas mps mas ninguém respondeu, será que alguém pode me dar um help?
Agradeço a atenção e o tempo.
Att
Ricoldi
Eu fiz um programa que envia e recebe sms usando comandos AT.
Eu usei o smslib mas ele possui uma série de problemas, por isso aconselho que você aprenda a usar os comandos AT e enviar os seus próprios comandos para o modem.
Se ainda tiver interesse, estou a disposição.
R
ricoldi
Bom dia ronildobraga tudo bem?
Seguinte, este modem que você usou para enviar sms aceitava o modo “Text” ou o “Pdu” porque o meu problema não são os comandos Ats e sim criar esse tal de Pdu para funcionar porque se fosse em modo texto era só fazer:
AT+CMGF=1//Verifica se funciona no modo textoOK//Ok funciona!AT+CMGW="+meunumero">meutexto+CMGW:1
Aceita ambos, mas eu só trabalhei em modo texto.
O modem que eu uso é o MC35i, comumente usado no mercado e tenho alguns tutoriais dos comandos AT
Com relação ao modo pdu, eu nunca usei.
R
ricoldi
ronildobraga , blz?
é no modo texto é mais facil… só que esse porr* que eu uso aqui é só no PDU F*CK MODE.
Mas mudando um poco o problema… eu estou com outros 2 modems GSM aqui
HUAWEI E226 E MOTOROLA G24.
E em ambos os casos eles ficam procurando a operadora para sempre… sem conseguir estabilizar, eu acho que pode ser a frequencia, vc manja algo deste problema? algum comando AT que eu possa usar para esse problema?
Aguado.
Att
Ricoldi
R
ronildobraga
ricoldi:
ronildobraga , blz?
é no modo texto é mais facil… só que esse porr* que eu uso aqui é só no PDU F*CK MODE.
Mas mudando um poco o problema… eu estou com outros 2 modems GSM aqui
HUAWEI E226 E MOTOROLA G24.
E em ambos os casos eles ficam procurando a operadora para sempre… sem conseguir estabilizar, eu acho que pode ser a frequencia, vc manja algo deste problema? algum comando AT que eu possa usar para esse problema?
Aguado.
Att
Ricoldi
Oi, desculpa a demora novamente.
O proprio hardware deve conseguir estabilizar a conexão com a operadora, se não está conseguindo é mais provavel que seja um problema no hardware do que configuração do aparelho.
Eu nunca trabalhei com os aparelhos da motorola, portanto aconselho usar os da siemens, inclusive o modulo TC65 já vem com java embutido
R
ricoldi
ronildobraga,
Desisti em termos do Modem que não lê PDU, estou usando um com modo texto usando comandos AT’s mas estou empacando um pouco na logica.
Já consigo enviar mensagens ativar as coisas e tudo. usando a JavaComm.
Mas não consigo fazer algo maior que isso, devido a minha falta de lógica neste tipo de serviço.
meu código é:
publicStringenviaComando(String_comando,boolean_resposta)throwsException{inttimeout=0;getOutputStream().write(_comando.getBytes());getOutputStream().flush();if(_resposta){InputStreamentrada=porta.getInputStream();StringBufferresposta=newStringBuffer();while(entrada.available()==0){timeout++;Thread.sleep(1);if(timeout>=TIMEOUT)thrownewException("TIMEOUT");}while(entrada.available()>0){resposta.append((char)entrada.read());}returnresposta.toString();}returnnewString();}...//Comando que verifica sinalStringmsg=porta.enviaComando("AT+CSQ\r",true);...
Como você faz para ler e enviar sms? será que pode me mostrar? ficaria muito agradecido.
R
ronildobraga
Puts… desculpa pela demora novamente, mas nao tenho acessado nestes ultimos meses.
Se ainda tiver duvida, segue abaixo o código: