Today I am going to write a small post with a new Java example for Siemens modems, it follows on from the post with examples that I wrote a few days ago. I will be posting more examples from time to time that you can use. If you ever want to share any examples or ideas with me they will be gladly received. ;)

Programación java Siemens


FTP_EXAMPLE
 (Download)

Description: it’s a basic FTP application with Java for Siemens modems. It creates a FTP connection and it creates a file called “file.txt” in the remote server and it contains “123”. All you have to do it modify the code line where the login, password and FTP server are that you want to use.

Valid for modems: TC65, XT65, TC65T, MTX65 y MTX65+G

I want to comment on one detail from the examples that I posted the other day. I posted all of the examples in the format EXAMPLE_xxx. Well all of the examples work perfectly with the command AT^SJRA but if you put that name in the AT^SCFG command’s “Userware/Autostart/AppName” so that the application starts automatically, it will not work. Don’t write the underscore (_) in your .jar file’s name for autostarting.

Right that’s it for today, it’s my daughter’s birthday today and I want to set up the Wii that I bought her before she gets home. And no it’s not a boomerang gift, I’m more of a Playstation guy. :) I will automatically get myself a PS3 as a gift before the end of the year. See you next time.


Post relacionados:

  1. Java Application Autostart in Siemens Modems Today I am writing a small post to do with...
  2. Adding Data to Files from Java with Siemens-Cinterion Modems On several occasions I have been asked how to add...
  3. (Español) Ejemplos Java para módems de Siemens Over the last few months I have been getting a...
  4. Java Email Example for Siemens/Cinterion Modems This morning I spent a while testing sending emails through...
  5. How to get the time with MTX terminals and Siemens/Cinterion modems I haven’t written on blogElectronica for nearly a month. For...








Tags: , , , , , , ,
33 Responses to “FTP Java Example for Siemens Modems”
  1. Jose says:

    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 :P

    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.

  2. Pua says:

    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());
    }

    }

  3. Pua says:

    //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

  4. blogElectronica says:

    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.

  5. Jose says:

    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.

  6. blogElectronica says:

    Ok, gracias Pua por enviarmelo,

    ya he actualizado tu respuesta anterior añadiendo el código completo, no hace falta link.

    Salu2.

  7. Vorian says:

    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.

  8. blogElectronica says:

    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.

  9. Vorian says:

    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.

    • Abraham says:

      Amigo pudiste solucionar tu problema??? Yo tengo algo parecido crees que puedas compartir tu codigo com oquedo al final

      Gracias de antemano

  10. Gustavo says:

    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

  11. blogElectronica says:

    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.

  12. Gustavo says:

    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

  13. blogElectronica says:

    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.

  14. Gustavo says:

    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

  15. Gustavo says:

    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

  16. blogElectronica says:

    Hola Gustavo,

    muchas gracias por compartir tus resultados con la comunicad, te agradezco mucho el tiempo empleado para ello.

    Salu2.

  17. Wilson says:

    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

  18. blogElectronica says:

    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

  19. Jose Morais says:

    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

    • blogElectronica says:

      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

  20. Basculero says:

    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.

    • blogElectronica says:

      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.

      • Basculero says:

        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.

      • blogElectronica says:

        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.

  21. 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

  22. Sergio says:

    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

    • Abraham says:

      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

  23. Jaime says:

    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.

    • blogElectronica says:

      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.

  24. Jaime says:

    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.

  25.  
Leave a Reply

Puedes publicar un comentario aquí si quieres, pero te recomiendo que uses el nuevo foroElectronica.com para introducir comentarios. Te contestaré más rápido. Recuerda que debes registrarte si no lo estás para publicar un comentario.