Ejemplo FTP Java para módems Siemens
Escrito por blogElectronica en 2.DISPOSITIVOS (práctico), 3.GENERAL, Comunic. GSM/GPRSHoy pongo un brevísimo post con un nuevo ejemplo Java para los Módems Siemens, continuación del post con ejemplos que puse hace algunos días. Iré poniendo de tanto en tanto más ejemplos que puedan seros de utilidad a los que empecéis. Si algún día tenéis alguno que queráis compartir que sepáis que será bien recibido
EJEMPLO_FTP (Download)
Descripción: Muestra una aplicación básica de FTP con java para módems Siemens. Crea una conexión FTP y crea un archivo de nombre “fichero.txt” en el servidor remoto con el contenido “123″. Tan sólo tenéis que modificar la línea del código donde se indica, por orden, el login, el password y el servidor FTP que queráis utilizar.
Válido para los módems: TC65, XT65, TC65T, MTX65 y MTX65+G
Un detalle que os quiero comentar de los ejemplos que puse el otro día. He puesto todos los ejemplos con el formato EJEMPLO_xxx. Pues bien, pueden ejecutarse perfectamente todos los ejemplos con el comando AT^SJRA, pero si ponéis ese nombre en “Userware/Autostart/AppName” del comando AT^SCFG para que la aplicación arranque automáticamente, no os arrancará. No pongáis el guión bajo (_) en el nombre de vuestros ficheros .jar para autoarranque.
Bueno, os dejo, que hoy es el cumple de mi chica y quiero montarle la Wii que le voy a regalar antes de que llegue a casa. Y no, no es un regalo boomerang, que yo soy más de PlayStation . La PS3 me la autoregalaré antes de final de año. Otro día más.
Post relacionados:
- Ejemplos Java para módems de Siemens A lo largo de los últimos meses he ido poniendo...
- Añadir datos a ficheros con módems Siemens-Cinterion desde java En bastantes ocasiones me ha llegado la pregunta de cómo...
- Ejemplo envío Email Java para módems Siemens / Cinterion Esta mañana he estado un buen rato realizando pruebas de envío...
- Autoarranque de aplicaciones Java en módems Siemens Muy buenas. Hoy voy a poner un pequeño post relacionado con...
- Ejemplo de FTP Java para módems gprs Cinterion TC65 y XT65 Posiblemente en alguna ocasión tengas que hacer un programita en...
Etiquetas: cinterion, ejemplo java, j2me, mtx65, mtx65+g, Siemens, tc65, xt65
Muy bueno tu post, como siempre.
Soy gran seguidor de tu foro, trabajando con el mtx-65+g como para no serlo jeje. Queria preguntarte una cosa que me tiene bastante inquietado, espero que veas que hay esfuerzo detras de la pregunta
El problema: Tomo la hora del satelite con una aplicacion java, tomo URC del gps hasta que tengo satelite (2 o 3 el fix) y escribo con AT+CCLK= la hora, la aplicación java no acaba ahi sino que eso solo lo hace para empezar. El problema es que la hora de java no esta actualizada, System.currenttimeMillis me devuelve una fecha sobre el 2002, concretamente: 1009843276585.
Separandolo en 2 aplicaciones, una que coja la hora y actualice el reloj y otra que hace todo lo demas(gestion de flotas), funciona pero tengo que lanzar una primero, esperar que acabe y lanzar la otra, parece que al reiniciar la jvm si coge la hora del reloj. Pero claro asi no se automatiza nada, la cosa seria lanzar un jar y dejarlo corriendo.
No se si me he explicado muy bien, el problema es que no puedo actualizar el reloj de java en caliente vamos.
Si tienes una solucion te lo agradeceria muchiiiiiisimo.
Dentro del TC65/XT65/XT75 hay dos relojes diferentes.
EL RTC que puedes fijar/leer/modificar con AT+CCLK . Recuerda que este reloj se resetea si dejas de alimentar el módulo
El Reloj interno de la JVM(Classes Calendar y Date)
LAs Classes Calendar y Date solo pueden ser usadas para leer la hora desde Java.
LA fecha/hora solo se actualiza en Java cuando la JVM se ejecuta.
Esto es, si arrancas un programa Java el TC65 sincroniza el reloj de Java con la fecha y la hora del RTC,
pero no hay posibilidad de volver a ajustar el reloj de Java,
a no ser que reinicies tu Imlet(Así resincronizaras el reloj de Java con el RTC)
Tienes dos opciones para reiniciar Java:
-Fija la fecha/hora sin Java con AT+CCLK y leela con AT+CCLK desde JAva
-Convierte la fecha/hora actual recalculado desde la fecha en que se reinicia el RTC del módulo.
Por ejemplo January 1, 1970, 00:00:00 GMT(Deveras calcular el valor del delta dependiendo de la fecha/Hora de reseteo de tu módulo)
y Calcula la diferencia(delta) entre tu fecha/hora actual y la fecha/hora de Java (System.currentTimeMillis())
y usa después la fecha/hora de java correguida por el Delta calculado.
Una posible implementación de este caso es:
/*
* realTimeInMillisSince01Jan1970 e.g. 21.Juli.2006 11:10:21.231 AM
* – calculate days: 36 years * 365 +
* (9days of leap years + JAN + FEB + MAR + APR + MAY + JUN + 20)
* Hint: 20days (not 21days) cause point of calculation is 1st JAN and not 0 JAN!!!
* – convert to millis: days * 24 * 60 * 60 * 1000 -
* – calculate daytime to millis: h*60*60*1000 + min*60*1000 + sec*1000 +
* miillis
* – var realTimeInMillisSince01Jan1970 = daytimeInMillis + daysInMillis
*
* Hint: it is important to make sure that the calc result
* is a long value! Even if the var is declarated as long, the
* calculation is done with int values and later an the result will be
* casted. The Integer.MaxValue migth be critical!
*/
//here the calculation
long realTimeInMillisSince01Jan1970 = (((36L * 365) + 9 + 31 + 28 + 31
+ 30 + 31 + 30 + 20) * 24 * 60 * 60 * 1000)
+ (11 * 60 * 60 * 1000) + (10 * 60 * 1000) + (21 * 1000) + 231;
//get java system time
long systemTime = System.currentTimeMillis();
//calculate offset
long timeOffset = realTimeInMillisSince01Jan1970-systemTime;
//now create a Date object and print out the result, in this example ten time each second
Date date = null;
for (int i = 0; i <10; i++) {
date = new Date(System.currentTimeMillis() + timeOffset);
System.out.println(date.toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
//now create a Date object and print out the result, in this example ten time each second
Date date = null;
for (int i = 0; i
Hola Pua,
muy buena respuesta, como siempre.
El ejemplo de implementación parece que se ha cortado a medias, tal vez sea muy largo. Si quieres envíamelo a jose @ blogelectronica.com, lo subo y pongo un link desde tu respuesta.
Salu2.
Muchisimas gracias Pua, me has aclarado lo de los 2 relojes que lo estaba intuyendo. Probablemente la solución por la que opte sea tu solución, calcular el epoch de la fecha real tomada por el satélite y calcular la diferencia con el epoch que me devuelve java de su reloj y sumar la diferencia. Habia visto una forma de sacar el epoch de una fecha sin tener que liarse con muchas cuentas long epoch = new java.text.SimpleDateFormat (“dd/MM/yyyy HH:mm:ss”).parse(“01/01/1970 01:00:00″); pero aun no lo habia probado.
Un saludo. Y repito muchisimas gracias, tanto a Pua por su respuesta como a Jose por su genial Blog.
Ok, gracias Pua por enviarmelo,
ya he actualizado tu respuesta anterior añadiendo el código completo, no hace falta link.
Salu2.
Hola, he estado haciendo un soft para subir ficheros por ftp a un servidor en una máquina. Siempre me ha funcionado bien, incluso los ejemplos que he visto por aqui, pero resulta que he intentado hacer el programa un poco más amplio para poder usarlo en alguna aplicación que tengo pensada y nada más empezar ya tengo un problema. Me he encontrado que tras subir un fichero por ftp de forma correcta cuando intento enviar cualquier comando AT para hacer cualquier cosa, el módulo deja de responder, se queda atascado, no me saca ninguna excepción ni nada, se queda congelado en ese punto. Lo que trataba de hacer es subir varios ficheros, cuando termino de subir el primer fichero de forma correcta lo que hago es enviar AT^SISC=1 para cerrar la conexión, luego modifico la línea de dirección y el nombre del siguiente fichero que voy a subir con AT^SISS=1,address,”ftpput…….”. Al enviar el primer comando para cerrar la conexión, el programa ya no continúa y además me ocurre también con cualquier comando AT que intente enviar, como por ejemplo AT+CPIN?, que simplemente indica si se ha introducido pin en la tarjeta, alguien tiene alguna idea de lo que pasa?.
Muchas gracias.
Hola Vorian,
pues no se que puede ocurrirte para que después de enviar un fichero te de error el AT^SISC=1. Tiene pinta de ser un problema de tu aplicación. ¿Te ocurre lo mismo con el ejemplo que yo he puesto aquí o sólo con tu programa?
De todas formas dentro de un tiempo pondré un ejemplo FTP mucho más elaborado que me han pasado.
Un saludo.
Hola, gracias por tu respuesta.
He usado tu ejemplo y me ocurre lo mismo, en el hyperterminal obtengo esto (sólo pego la parte final):
….
….
AT^SISO=0
OK
Enviando datos …
Evento:
^SISW: 0, 1
Enviado: 123
Datos enviados
Y ahí se queda, falta que envíe el comando que cierra la conexión y el mensaje “Fin del programa”. Por otro lado en el ordenador se ha generado el fichero llamado “fichero.txt” con el texto “123″. Alguna idea??.
Muchas gracias.
Amigo pudiste solucionar tu problema??? Yo tengo algo parecido crees que puedas compartir tu codigo com oquedo al final
Gracias de antemano
Hola a todos, vaya por delante un agradecimiento por los artículos y comentarios que en este blog se hacen, me resultan muy interesantes y útiles.
Les cuento un problema que estoy teniendo y que seguramente alguno de vosotros ya ha sufrido y puede ayudarme a resolver:
Hace un tiempo estoy desarrollando una aplicación para MTX65+G, todo lo tenía instalado en un portátil con Windows XP, todo funcionaba a la perfección (Java, Eclipse, MES, HyperTerminal, …).
He tenido que cambiar el portátil por otro que tiene instalado Windows Vista, y es aquí cuando comienzan mis problemas.
La instalación de Java SDK, Eclipse y plugin ME OK.
Los problemas empiezan a partir de aquí, ya que los driver del MTX65 que valían en XP no valen en Vista, la gente de Matrix (tienen un Servicio Técnico con una atención exquisita) me indican que aún no está disponible la release para Vista pero que pueden valer los del TC65 para Vista. Los instalo y efectivamente ya me reconoce “Siemens AG WM USB Modem” en el puerto COM8 y funcionando OK.
El próximo paso es instalar el SMTK del TX65, al llegar a la parte que muestra los puertos COM para elegir donde esta el terminal, me muestra todos excepto el del terminal (en mi caso COM8), digo: “Como esto es para el debuger y a mi nunca me funcionó, elijo cualquier puerto y sigo adelante”. El instalador ha estado un tiempo instalando supondo el SMTK y el MES y al final se bloqueó, creo al intentar generar la conexión de red para el terminal que evidentemente no estaba en el COM que indiqué. Por tanto aquí he tenido que “matar” el proceso de instalación. Como no sabía si había instalado correctamente el MES, lo volví a instalar separadamente y comprobé que estuviera OK.
Aún no he comprobado si el entorno de desarrollo (Eclipse con todas las librerías) quedó OK, pero lo que sí puedo asegurar es que no puedo acceder al terminal a través del explorador (Module), cuando pincho el icono “Module” me da el mensaje de error “The port could not be opened. Check whether the COM port is available and select an available COM port from Data Exchange Software properties”. Entonces selecciono la opción “Propiedades” de “Module” y al intentar seleccionar el COM donde sé que está el terminal, el sistema responde con el mensaje “Acceso denegado”.
¿Tenéis alguna idea para solucionar este problema? O alguna otra forma de enviar y descargar ficheros a y desde el Módem.
Otra sorpresa que tiene Vista es que ya no incluye “HyperTerminal”, vendieron la licencia a Hilgraeve y ahora es de pago. De todas formas copiando los ficheros hypertrm.dll y hypertrm.exe desde un XP, funciona en Vista. Puedo comunicarme perfectamente con el terminal y responde correctamente tanto con Hyperterminal como con el Entrenador Siemens.
Muchas gracias por vuestra ayuda.
Un saludo.
Gustavo
Hola Gustavo,
en primer lugar agradecerte que te guste mi blog. Me sabe mal no poderte darte una solución clara, después de toda tu exposición, pero la realidad es que todavía no está disponible la release para Vista del XT65.
Sí lo está para el TC65 v3. He de decirte que yo no utilizo Vista por los problemas que acarrea no sólo para estos módems, sino para infinidad de dispositivos con los que yo tengo que pelear cada día. A día de hoy lo mejor sería hacer un downgrade de Vista a XP o utilizar un VMWare para emular un XP.
Lo que te voy a decir no se si es correcto, porque NO lo he probado al no utilizar Vista, pero podrías probar el MES del TC65v3 y comprobar si puedes, al menos, descargar los archivos en el módem.
Salu2.
Hola, gracias por tu respuesta, he probado instalar todo el software que viene para el TC65 release 3 partiendo de cero, desde la instalación de Eclipse en adelante y aparentemente no ha dado ningún problema.
Ahora tengo instalada la versión recomendada de Eclipse (v3.2.2) con ME (1.6.8), JDK 1.5 y el SMTK_TC65_R3 (instala automáticamente el MES) tal como se indica el manual para usuarios Java.
He comprobado que puedo comunicarme con el terminal vía HyperTerminal y vía MES. Funciona OK, puedo grabar ficheros, descargarlos y eliminarlos del terminal.
Para comprobar el funcionamiento del entorno de desarrollo, me planteo hacer una prueba tipo “Holamundo”, para esto voy a Eclipse, elijo un nuevo proyecto de tipo “J2ME Midlet Suite”, le asigno un nombre y cuando voy a seleccionar el dispositivo a utilizar el sistema muestra una pantalla que dice: There are no devices defined. Please use device management to create some devices.
Veo un botón “Manage Devices”, pero cuando lo pulso tampoco aparecen dispositivos para seleccionar. Existe una tecla para importar, pero no tengo idea como funciona. El manual no comenta nada de esta versión. ¿Has usado esta versión de Eclipse? ¿Sabes que hay que hacer adicionalmente para que reconozca los dispositivos?
Muchas gracias por tu ayuda.
Un saludo.
Gustavo
Hola Gustavo,
cuando realizas la instalación del eclipse (siguiendo la guía del java userguide) te aparecen durante la instalación toda una serie de directorios, como por ejemplo, la ruta del directorio workspace por defecto. No cambien ningún directorio de los que sugiere la instalación por defecto. Verás como después aparecerá la plataforma.
Recuerda que no estás instalando el software adecuado, pues estás utilizando el soft del TC65v3, no el del XT65. Yo sólo te sugerí que instalaras el MES.
Salu2.
Gracias por tu ayuda, tienes razón solo me comentaste lo de instalar el MES, resumiendo, entiendo entonces que lo que podría funcionar sería: driver USB del TC65v3 (para Vista), el soft del XT65 (para XP) en lo referente a desarrollo (Eclipse 3.1.2, ME plugin 1.5.5, JDK 1.4.2) sin cambiar directorios propuestos, luego el MES del TC65v3 (para Vista) y por último el SDK del XT65 (para XP).
Lo intento y os cuento.
Un saludo.
Gustavo
Hola a todos, creo que ya he conseguido migrar desde XP a Vista con la vieja estrategia del “copy & paste”, la solución:
1) Instalar los driver del modem para Vista TC65 Rel 3.
2) Instalar el JDK 1.4.2_09.
3) Instalar solo el MES del TC65 Rel 3.
4) Restaurar una copia de seguridad del Eclipse que tenía instalado en XP (copy & paste).
5) Restaurar una copia de seguridad del SMTK del XT65 en XP (copy & paste).
6) Restaurar una copia de seguridad del workspace de Eclipse instalado en XP (copy & paste).
7) Si las rutas no coinciden con las de las copias de seguridad hay que cambiar algunos ficheros con el Notepad para indicar los paths correctos:
En el workspace los ficheros:
.\.metadata\.plugins\eclipseme.core\platcomp.xml
.\.metadata\.plugins\eclipseme.core\ueicache\cache.properties
.\.metadata\.plugins\eclipseme.core\ueicache\emulator_XT75.properties
En eclipse el fichero:
.\ configuration\.settings\org.eclipse.ui.ide.prefs
8) Si usas Hyperterminal, restaurar una copia de seguridad de los ficheros del Hyperterminal en XP (copy & paste). Los ficheros son hypertrm.dll y hypertrm.exe
Si bien aún no probé todo lo que tenía desarrollado creo que esto tiene “buena pinta”.
Moraleja: Mantener copias de seguridad incluso de los programas instalados al menos de Eclipse, SMTK XT75 e HyperTerminal, y por supuesto del Workspace.
Muchas gracias por vuestra ayuda.
Un saludo.
Gustavo
Hola Gustavo,
muchas gracias por compartir tus resultados con la comunicad, te agradezco mucho el tiempo empleado para ello.
Salu2.
hola, instale todo el software, puedo probar el modem que instalo y funciona, pero cuando trato de abrir el modulo por el explorador de windows me dice que el puerto no esta disponible a pesar de haber seleccionado el puerto adecuado en propiedades, alguien tiene alguna idea.
gracias.
Wilson
Hola Wilson,
puedes encontrar la respuesta en muchos comentarios por aquí. Seguramente lo que te ocurre es que tienes configurado el módem en autobauding (at+ipr? te devolverá 0). Configúralo con at+ipr=115200.
Salu2
Hola a todos!
Me desculpem lo portugues…
Com objDataOutputStream.write(dadosEscritos.getBytes())
se graba el texto no fichero. Neste exemplo solamente la palavra “Halo”.
Como fazer para gravar varias linhas utilizando un comando ‘Return’ ?
Exemplo:
Halo1
Halo2
Halo3
(Non Halo1 Halo2 Halo3)
Muchas gracias
Jose
Hola Jose,
no se si te entiendo muy bien …
¿Te refieres a cómo introducir un retorno de carro (0×13 0×10) a la hora de grabar un fichero?
Si es eso pues en dadosEscritos tendrías que poner “Halo1\r\nHalo2\r\nHalo3\r\n”
Pero ya te digo que no sé si te he entendido bien …
Salu2
Correcto!
Solamente tinha “\r” e no “\r\n”.
Muchas Gracias!!!
Jose
Hola a todos,
tengo un pequeño problema. He aplicado el ejemplo del FTP y me funciona correctamente.
El problema, viene, porque yo tengo un fichero en la memoria de MTX65 y quiero enviarlo via FTP, en lugar de escribirlo en el socket, como puedo hacerlo???
Gracias.
Hola Basculero,
¿y por qué no lees el fichero de la memoria flash del MTX65 (mira el ejemplo del fichero y lo escribes por el socket?
Salu2.
Hola,
Ya lo hago, con el ejemplo del fichero creo el fichero y lo guardo en la memoria, el tema es que ya que lo he creado y esta en la flash, puedo cogerlo y enviarlo sin tener que escribirlo en el socket, simplemente haciendo uso del FTP puro y duro??
Gracias.
Hola Basculero,
se puede hacer, a ver si en breve pongo un ejemplo de java para utilizar las clases java de FTP. No es fácil de decir en unas pocas líneas …
Salu2.
Saludos.
Ante todo muchas gracias por dar tan buena info en este foro.
Quisiera preguntar algo, de donde puedo descargar el sdk del siemens tx65, es que el mtx65g que compre hace unas 2 semanas me llego hasta aqui en Bogota-Colombia la caja con el modem pero este me llego si CD, el modem lo compre a matrix electronica
Gracias por la ayuda que me puedan brindar
Hatapronto
Hola Antony,
llama o escribe un email a Matrix, si lo has adquirido en Matrix se te dará sin ningún tipo de problema, te lo garantizo. Escribe a gsmsupport@matrix.es
Salu2.
Buenas tardes,
Antes de nada gracias por toda la ayuda que me estais ofreciendo..
Llevo unos cuantos dias dandole vuelta a un tema y ya que aqui hablais un poco de envio de archivos mediante FTP, pues os comento.
No se si alguien tiene un ejemplo a mano o ha llegado a conseguirlo, pero mi problema es que quiero descargarme un archivo que tengo en un servidor FTP y meterlo dentro de mi mtx65.
Reviso el log del FTP y es como si me lo descargase pero nunca lo recibo por el socket…
la verdad es que necesito ayuda..
gracias por adelantado
Estimado amigo, pudiste solicionar tu problema???
Mira yo actualmente estoy sufriendo con lo mismo del FTP y no puedo solucionarlo por lo que podrias compartir tu codigo que usaste???
Gracias
Todo lo que he leido en este sitio me parece muy bueno, pero no he podido hacer ni un solo programa en Java porque no encuentro en ninguna parte el famoso Siemens Mobility Kits, ya que Siemens lo quitó de todos sus servidores. Estaré infinitamente agradecido y alquien me puede dar un link.
Hola Jaime,
me gustaría poder ayudarte, pero me metería en un lío, pues el SDK de Cinterion aunque gratuito no es algo público en el que pueda colgarlo en mi web. Si algún día Cinterion me lo permite lo haré gustoso.
Te lo debe proporcionar tu distribuidor, donde compraste el módem, de forma gratuita.
Salu2.
Sólo tu tienes mi correo, en caso que quieras ser generoso conmigo.
De todas maneras, te cuendo que compré 2 modem en RS Componentes de Chile y ni siquiera traían antena.
He tratado de comunicarme con Cinterion, pero nadie me contesta.
Así que todos los días miro los modems y me pregunto qué día debo tomar la decisión que corresponde.
Te agradezco de todas formas, he usado los java que haz puesto de ejemplo, aunque sólo tipeando los comandos AT y funcionan bien.