Jumping Jack Flash weblog

Trasformare un cellulare in antifurto satellitare per auto

Posted in GPS, Java, Javaphone API, jython by jumpjack on 14 novembre 2007

–> SEE ENGLISH VERSION 

Questo script freeware in Jython trasforma un qualunque telefono che supporti le Javaphone API e il blluetooth in un economico (meno di 200 euro) antifurto satellitare per auto: infatti, una volta installato lo script sul telefono, non appena il telefono riceve una chiamata invia a un numero predefinito un SMS contenente le coordinate in cui il telefono stesso si trova, leggendole da un ricevitore GPS esterno.

Il programma è stato testato solo su Motorola a1000, ma dovrebbe funzionare anche su Nokia 9200/9210/9300/9500 e su qualunque telefono supporti PersonalJava, Bluetooth e Javaphone API (purtroppo solo pochi supportano le Javaphone API). 

Cosa vi serve:

Un PDA/telefono che supporti PersonalJava o Personal Profile, le Javaphone API e, il bluetooth (probabilmente va bene qualunque sistema operativo, trattandosi di java)

Una versione di Jython compatibile col telefono (per esempio questa, testata su UIQ 2.1)

JavaBT: Librerie bluetooth per PersonalJava; (JavaBT homepage)

Lo script “LC GPS car tracker“;

Un file di testo contenente il numero a cui inviare l’SMS; il file deve chiamarsi  cellphone.txt;

Un file di testo contenente l’indirizzo del ricevitore GPS, memorizzato come sequenza di 6 numeri esadecimali (ad esempio  000a3a2310c2; è possibile scoprire l’indirizzo del proprio GPS utilizzando un qualunqe programma di gestione bluetooth installato sul PC). Il file si deve chiamare address.txt;

Una volta che vi siete procurati tutto questo, potete procedere con l’installazione: 

Once you have all of above:

– Installate Jython sul telefono (per esempio in D:\jython);

– Decomprimete JavaBT.zip sul PC, e copiate la cartella “se” nella cartella D:\Jython sul cellulare; copiate javabt.dll in c:\system\libs sul cellulare;

– Copiate lo script Jython in d:\jython sul cellulare;

– Copiate i suddett file di testo nella cartella  c:\documents\Media Files\document\LC_GPS_Tracker sul cellulare;

– Avviate Jython sul telefono, dopodichè usatelo per lanciare lo script, e attendete il prompt “READY”;

– Accendete il ricevitore GPS e tenetelo in prossimità del cellulare;

– Attivate il bluetooth sul cellulare;

– Ora provate a chiamare il telefono: non appena riceverà la chiamata, comincerà a mostrare una serie di messaggi sullo schermo. Se tutto va come previsto, dopo un po’ dovreste ricevere sul numero prefissato il messaggio con le coordinate.

NOTA: se il GPS aveva “fatto il fix”, il messaggio terminera con “1,xx”, con xx=numero di satelliti, altrimenti terminerà con “0,00”.

Problemi noti:

Al momento il programma non può funzionare sui SonyEricsson P800/p900/p910, perche’ nessuno di essi supporta le Javaphone API. Se vi interessa una versione per questi telefoni potrei provare a scriverla, ma solo su esplicita richiesta e compatibilmente con tempi e fattibilità…: non dimenticate che è sempre un programma freeware! 😉

– La coppia telefono-ricevitore dovrà essere installata in auto e mantenuta sempre sotto carica, per ovvi motivi; per motivi altrettanto ovvi, entrambi dovranno trovarsi in un luogo nascosto, ma al tempo stesso essere in grado di ricevere segnali GSM e GPS

Car anti-theft with Javaphone PDA

Posted in GPS, Java, Javaphone API, jython, Motorola a1000, Symbian, Symbian UIQ by jumpjack on 9 novembre 2007

—>VEDI VERSIONE ITALIANA 

This Jython script turns any Javaphone API supporting PDA into a car-antitheft: once you install this script on the phone, as soon as you call the phone it will send to a predefined number an SMS containing latitude and longitude read from an external GPS bluetooth receiver.

Successfully tested on Motorola a1000; should work on Nokia 9200/9210/9300/9500 (please leave a comment to confirm if you successfully use this program on other phones than a1000) 

What you need:

A PDA/phone with support for PersonalJava/Personal Profile and Javaphone API  (regardless of O.S.);

A Jython version compatible with the phone (try this port for PersonalJava, tested on Motorola A1000);

JavaBT: PersonalJava bluetooth libraries; (JavaBT homepage)

The LC GPS car tracker jython script;

A text file containing the number to send the SMS to; it must be named cellphone.txt;

A text file containing the bluetooth address of your GPS receiver, stored as a sequence of 6 hexadecimal numbers
(for example 000a3a2310c2; you can get your GPS’ address from any bluetooth program installed on your PC). File must be named address.txt;

Once you have all of above:

– Install Jython on your phone (let’s suppose you install it into D:\jython);

– Unpack JavaBT zip package on your PC; copy whole “se” folder into d:\jython folder onto the phone;  copy javabt.dll into
c:\system\libs folder on your phone;

– Copy the jython script into d:\jython folder on the phone

– Copy the above described text files in c:\documents\Media Files\document\LC_GPS_Tracker onto the phone;

– Launch Jython on the phone, and once it’s started use the menu to start the jython script. Wait for “READY.” prompt to appear;

– Turn on your GPS receiver, and keep it within phone bluetooth range;

– Now call your phone: as soon as it receives the call, it will start displaying some debug data on the screen. If all works properly, in a few seconds you should receive the SMS on the predefined number. NOTE: if the GPS got the fix, you’ll see in the message “1,xx” at the end of SMS, with xx=number of satellites; else you’ll see “0,00”.

KNOWN ISSUES:

This program CAN’T work on SonyEricsson P800/p900/p910, as they do not support Javaphone API. If you are interested on a version for these phones, I could try writing a Javaphone-indipendent version, but it would be quite tricky, so I’ll (try to) do it only upon request: don’t forget this program is FREEware!

Leggere coordinate GPS da ricevitore bluettoth esterno con PersonalJAVA e JavaBT su UIQ

Posted in GPS, Java, jython, Programmazione by jumpjack on 28 ottobre 2007

import se.sics.bt.symbian
import java.lang.Short
import jarray

lib = se.sics.bt.symbian # Connessione a libreria JavaBT
address = jarray.array([0,10,58,35,16,194],’h’) # Array di “short” per indirizzo GPS
commander = lib.BTCommander()
device = lib.BTDevice(“LC_GPS”, address, commander) # Prepara connessione a GPS
port = 1
abyte0 = jarray.zeros(3,’b’) # Crea array di 3 byte
currentSocket = device.connect(port, commander.RFCOMM, 20) # Apre connessione

i = 1;
print “\nReading data…”
MAX=200 # Numero di bytes da leggere al ricevitore
n=0
dati = “Dati ricevuti: ”
while i > -1 and n<MAX:
n=n+3
i = currentSocket.read(abyte0, 3, 1000)
j = 0
while j < i:
dati = dati + chr(abyte0[j]) # Accoda a stringa i dati letti
j = j+1
print “\ndone”
print “LAT: “, dati[dati.find(“$GPGGA”)+18:dati.find(“$GPGGA”)+18+9]
print “LON: “, dati[dati.find(“$GPGGA”)+30:dati.find(“$GPGGA”)+30+10]
currentSocket.close()

Download file con indentatura corretta:

http://www.planetmobile.it/jumpjack/BT_test.py 

Accedere al Bluetooth tramite PersonalJava su telefoni UIQ (A1000, p800, p900)

Posted in GPS, Java, jython, Programmazione by jumpjack on 27 ottobre 2007

Utilizzando PersonalJava, normalmente non è possibile accedere al bluetooth, perchè le librerie JSR82 sono
per J2ME, non per PesonalJava.

Ho però finalmente scoperto, dopo lunghe ricerche, che qualcuno, qualche anno fa, ha scritto una libreria bluetooth
apposta per Symbian UIQ 2.1: è nata per funzionare sul SonyEricsson p900, e pensavo che, come tante applicazioni
“evolute” che girano sui SonyEricsson (vedasi Python, mShell, mobinfo.dll,…) non funzionasse sull’a1000…

E invece FUNZIONA! Non solo: sembra che questa libreria sia anche migliore della JSR82!

Tramite le librerie JavaBT è possibile accedere al bluetooth, ad esempio per leggere le coordinate inviate da un’antenna
GPS.

E’ sufficiente scaricare il programmino java di prova per vedere comparire direttamente sullo schermo i dati
“crudi” trasmessi da un’antenna GPS esterna.

La libreria è fornita anche coi codici sorgenti, per chi volesse ricompilarla per altri sistemi.

La documentazione purtroppo lascia un po’ il tempo che trova…:
http://www.sics.se/humle/projects/mobitip/javabt/tutorial.php 

A parte il fatto di poter leggere i dati di un GPS, la disponibilità di una libreria Bluetooth dovrebbe rendere possibile
anche comunicare direttamente col PC, quindi usare il cellulare come telecomando per il PC, o il PC per inviare
messaggi SMS dal cellulare. Non è purtroppo possibile controllare le applicazione del cellulare tramite PC, perche’
PersonalJava non permette di “cliccare” virtualmente sullo schermo del telefono o di inviare “pressioni di tasti” alle
applicazioni.

HikeTracker è un altro progetto per p900 che ho trovato, che si basa sull’uso di bluetooth tramite librerie JavaBT, ma sembra che sull’a1000 non funzioni (il programma crasha).

Ad HikeTracker è ispirato un altro progetto, InhouseTracker, che dovrebbe permettere la localizzazione precisa
all’interno di ambienti chiusi.

Purtroppo entrambi i progetti hanno solo documentazione in tedesco…

Mobitip è un altra applicazione che si basa su JavaBT, ma pare non funzionare sull’a1000.

Comfuture è un’altra applicazione che si basa su JavaBT, volta a rendere l’intera casa telecontrollabile tramite
telefono bluetooth!

Avviare applicazione Symbian da Jython

Posted in Java, jython, Motorola a1000, Symbian, Symbian UIQ by jumpjack on 26 ottobre 2007

import java.lang.Runtime

r=java.lang.Runtime.getRuntime()

p=r.exec(“z:\\system\\programs\\apprun.exe c:\\system\\apps\\nome\\nome.app”)

Questo metodo non consente pero’ di avviare applicazioni OPL.

Rilevare versione della JVM

Posted in jython, Programmazione, Sviluppo by jumpjack on 26 ottobre 2007

import java.lang.System

s = java.lang.System

p=s.getProperties()

l=p.propertyNames()

print l.nextElement()   (ripetere per vedere tutti i nomi delle proprietà disponibili)

print p.getProperty(“[xxx]”) (xxx=uno dei nomi ottenuti con l’istruzione sopra)

print p.getProperty(“java.version”)

print java.lang.System.getProperties().getProperty(“java.version”)

Scaricare file tramite HTTP

Posted in Java, jython, Motorola a1000, Symbian, Symbian UIQ by jumpjack on 25 febbraio 2007

Scaricare file tramite HTTP

(INCOMPLETO)

import os
import java.lang
import java.lang.String
import java.net.URL
import java.net.HttpURLConnection
import jarray
import java.io.BufferedOutputStream
import java.io.FileOutputStream

class test(java.awt.Frame):
def __init__(self):
self.size=(208,276)
self.myOutput=java.awt.TextArea(“Test \n\n”)
self.add(“Center”,self.myOutput)
self.myMenuBar=java.awt.MenuBar()
self.myMenu=java.awt.Menu(“Menu”)
self.myReadFile=java.awt.MenuItem(“Verifica”,actionPerformed=self.doRead)
self.myMenuExit=java.awt.MenuItem(“Exit”,actionPerformed=self.doExit)
self.myMenuBar.add(self.myMenu)
self.myMenu.add(self.myReadFile)
self.myMenu.add(self.myMenuExit)
self.setMenuBar(self.myMenuBar)
self.setVisible(1)
def doRead(self,event):
h = java.net.HttpURLConnection
u = java.net.URL
bos = java.io.BufferedOutputStream
fos = java.io.FileOutputStream
url = u(“http://jumpjack.altervista.org/index.html&#8221;)
self.myOutput.appendText(“opening conncetion…\n”)
conn = url.openConnection()
self.myOutput.appendText(“getting stream…\n”)
i = conn.getInputStream()
self.myOutput.appendText(“opening output file…\n”)
o = bos(fos(“d:\\jython\\google.txt”))
self.myOutput.appendText(“start reading…\n”)
buffer = jarray.zeros(1024,’b’)
numWritten = 0
numRead = i.read(buffer)
while numRead != -1:
o.write(buffer)
numWritten += numRead
self.myOutput.appendText(“1024 bytes read…\n”)
numRead = i.read(buffer)
self.myOutput.appendText(“Completed.\n”)
o.write(buffer)
i.close()
o.close()

def doExit(self,event):
java.lang.System.exit(0)
if __name__==”__main__”:
myApp=test()

Compiling .py scripts to .jar files

Posted in Java, jython, Symbian by jumpjack on 25 febbraio 2007

I successfully compiled .py scripts into jar files!

Set classpath:
set classpath = C:\Symbian\UIQ_21\erj\Ext\qawt.jar;C:\Symbian\UIQ_21\erj\Ext\util.jar;C:\Symbian\UIQ_21\epoc32\Java\ext\javaphone.jar;C:\Symbian\UIQ_21\epoc32\Java\lib\classes.zip

Generate the .class files:
jythonc -J “-classpath C:\Symbian\UIQ_21\erj\Ext\qawt.jar;C:\Symbian\UIQ_21\erj\Ext\util.jar;C:\Symbian\UIQ_21\epoc32\Java\ext\javaphone.jar;C:\Symbian\UIQ_21\epoc32\Java\lib\classes.zip” -CC:\Programmi\internet\Java\j2sdk1.4.2_10\bin\javac jython_script.py

Go to jpywork folder in Jython folder and generate .jar file:
jar -cf jython_script.jar jython_script*.class

Use aifbuilder to generate proper aif/app/txt file

Move aif/app/txt/jar file to c:\system\app\jython_script folder

Well, now comes the bad part: application does NOT start properly, due to well known NoClassDefFoundError , but maybe here somebody else can help me?

Possible solutions:

http://www.ssec.wisc.edu/~tomw/visadtutor/compile.html (cambiare command line di compilazione)

http://osdir.com/ml/lang.jython.user/2006-03/msg00077.html (mettere in .jar tutte le librerie jython)

http://www.jython.org/docs/jythonc.html

Leggere il contenuto della clibpoard DI SISTEMA

Posted in Java, jython, Motorola a1000, Symbian, Symbian UIQ by jumpjack on 22 febbraio 2007

import java.awt.Toolkit

import java.awt.datatransfer

tk = java.awt.Toolkit

dt=tk.getDefaultToolkit()

cl=dt.getSystemClipboard()

a= java.lang.Object

cont = cl.getContents(a)

dfs=cont.getTransferDataFlavors()

val=cont.getTransferData(dfs[0])

Elenco font disponibili in Jython/PersonalJava

Posted in Java, jython, Motorola a1000, Symbian, Symbian UIQ by jumpjack on 19 febbraio 2007

import java.awt.Toolkit

t = java.awt.Toolkit

t.getDefaultToolkit().getFontList()