Jump to content
Nokioteca Forum

[python] Antifurto Satellitare A 100 Euro? Si Puo' Fare!


JumpJack_
 Share

Recommended Posts

Come mai se lo metto su Google Earth mi corrisponde ad una zona tra Francia e Spagna invece che Piemonte? b)

Come lo devo scrivere?....perchè credo che dovrei scrivere 2 cifre inziali, il punto e poi tutti i decimali ma facendo così mi corrisponde alla zona tra Francia e Spagna!

perche' non ho formattao correttamente la stringa, bisogna spostare le virgole a sinistra di due posizioni (il ricevitore GPS le formatta cosi', non so perche'...)

Prova con LAT:44.456602N,LON:008.477489E

Modificato da JumpJack_
Link to comment
Condividi su altri siti

  • Risposte 154
  • Created
  • Ultima Risposta

Top Posters In This Topic

Se metto esattamente così 44.456602N 008.477489E in Google Earth ora mi sono avvicinato......ora sono in Liguria........b)................ma sempre lontano da casa mia.........

anche a me succede uguale e non sono riuscito a risolvere il problema. Anche con il discorso di youposition.it non va b)

Link to comment
Condividi su altri siti

Purtroppo ho proprio notato che il tuo script invia una posizione sbagliata....b)

...infatti ho fatto due prove con BlueSky e mi indicava questa posizione:

1) N 44.761035

E 8.795625

2) N 44.761008

E 8.795735

QUESTE DUE POSIZIONI su Google Earth indicano effettivamente il luogo giusto!

...mentre il tuo script mi ha ritornato tramite SMS:

1) LAT: 4445.6602N

LON: 00847.7489E

2) LAT: 4445.6608N

LON: 00847.7417E

PURTROPPO QUESTE DUE POSIZIONI invece indicano un luogo del tutto sbagliato in Liguria!....a circa 100-150km dal punto indicato giustamente da BlueSky!

b)

EDIT: però ho notato che nel log che scrive BlueSky invece compare questa posizione:

4445.6621,N,00847.7375,E

E QUESTA POSIZIONE su Google Earth è molto vicina a quella che ritorna il tuo script!

...mentre nella schermata di BlueSky invece appare l'indirizzo quello giusto!

mah!

Modificato da mazzanokia
Link to comment
Condividi su altri siti

Grazie, queste informazioni sono preziose per capire... cosa cavolo dice il mio programma! ;)

Ho preso il codice per estrarre le coordinate da un sito "specializzato" in programmy python per GPS, quindi davo per scontato che fosse "giusto", ma non ho mai fatto test approfonditi, ancora... ;)

E da questi dati emerge un fatto molto bislacco:

il numero 4445.6602N fornito dal mio programma non significa 44.456602 gradi, ma 44 gradi e 45.6602 primi!!! :(

Quindi in gradi diventa:

44 + 45.6602/60 = 0.761003 = 44.761003 ;)

Roba da pazzi.

Ma guarda te.

b)

Ma che rottura di scatole, ora mi tocca mettere una routine di conversione nel programma...

b)

Bah.

Comunque vediamo se torna:

1) LAT: 4445.6602N ==> 44.761003

LON: 00847.7489E ==> 8 + 47.7489/60 = 8.795815

2) LAT: 4445.6608N ==> 44 + 45.6608/60 = 44.761013

LON: 00847.7417E ==> 8.795695

Link to comment
Condividi su altri siti

Cosi' dovrebbe funzionare (aggiungendo queste righe dopo la riga msg = 'LAT:' + location['lat'] + ',LON:' + location['long'] ) :

temp = str(int(msg[4:6])+float(msg[6:13])/60)
temp2 = str(int(msg[19:22])+float(msg[22:29])/60)
msg = temp +"$" + temp2 # Versione per YouPosition
msg = "LAT:" + temp + ", LON:" + temp2 #Versione generica

Modificato da JumpJack_
Link to comment
Condividi su altri siti

Grazie, queste informazioni sono preziose per capire... cosa cavolo dice il mio programma! ;)

Ho preso il codice per estrarre le coordinate da un sito "specializzato" in programmy python per GPS, quindi davo per scontato che fosse "giusto", ma non ho mai fatto test approfonditi, ancora... ;)

E da questi dati emerge un fatto molto bislacco:

il numero 4445.6602N fornito dal mio programma non significa 44.456602 gradi, ma 44 gradi e 45.6602 primi!!! ;)

Quindi in gradi diventa:

44 + 45.6602/60 = 0.761003 = 44.761003 ;)

Roba da pazzi.

Ma guarda te.

b)

Ma che rottura di scatole, ora mi tocca mettere una routine di conversione nel programma...

b)

Bah.

Comunque vediamo se torna:

1) LAT: 4445.6602N ==> 44.761003

LON: 00847.7489E ==> 8 + 47.7489/60 = 8.795815

2) LAT: 4445.6608N ==> 44 + 45.6608/60 = 44.761013

LON: 00847.7417E ==> 8.795695

Wooow !! ..centrasse qualcosa il "Codice Da Vinci" ? :(

Link to comment
Condividi su altri siti

Cosi' dovrebbe funzionare (aggiungendo queste righe dopo la riga msg = 'LAT:' + location['lat'] + ',LON:' + location['long'] ) :

temp = str(int(msg[4:6])+float(msg[6:13])/60)
temp2 = str(int(msg[19:22])+float(msg[22:29])/60)
msg = temp +"$" + temp2 # Versione per YouPosition
msg = "LAT:" + temp + ", LON:" + temp2 #Versione generica

ci sono tre righe uguali, le righe vanno aggiunte in tutti e tre i casi ? E per il discorso di Youposition devo lasciare le righe che mi consigliavi ?

scusate se intralcio il vostro lavoro, ma è tutto cosi affascinante.. b)

Link to comment
Condividi su altri siti

ci sono tre righe uguali, le righe vanno aggiunte in tutti e tre i casi ?

si'.

E per il discorso di Youposition devo lasciare le righe che mi consigliavi ?

No, devi fare la modifica che ho appena detto, MA non devi inserire la quarta riga.

scusate se intralcio il vostro lavoro, ma è tutto cosi affascinante.. b)

guarda che non stai intralciando, mi stai aiutando, perche' io non ho tempo di fare queste prove! b)

Link to comment
Condividi su altri siti

Scusa JumpJack, non è che mi riesci a postare lo script .py già bell'e compilato?.....così lo provo e ti dico se funziona.........se lo modifico io son sicuro di sbagliare qualcosa.........b)

a me funge che è ina meraviglia.. ..con youposition non ho provato, ma mi rimanda un sms praticamente perfetto del tipo:

45.12345567890&18.1234567890 Proprio quello che cercavo b)

Se JumpJack mi da il permesso lo posto.

Link to comment
Condividi su altri siti

a me funge che è ina meraviglia.. ..con youposition non ho provato, ma mi rimanda un sms praticamente perfetto del tipo:

45.12345567890&18.1234567890 Proprio quello che cercavo b)

Se JumpJack mi da il permesso lo posto.

fai pure, il programma è di pubblico dominio.

l'idea era proprio quella di lasciarlo finire a qualcun'altro...

C'e' mica anche qualcuno che ha un n95 e vuole provare ad adattarlo? Ci sono delle librerie aggiuntive per il GPS interno.

LocationRequestor

Il progetto è gia' su GoogleCode, non so se riuscite a mettere li' il nuovo sorgente... b)

http://code.google.com/p/lc-cartrack/

Link to comment
Condividi su altri siti

A me interesserebbe che ritornasse un risultato del tipo "44.342456"....con le due cifre intere e i sei decimali........

....nel modo di Stl arrivano troppi decimali..........

....se possibile eh! ....GRAZIE!!!!!!!!!

Ho uppato una nuova versione, che supporta 3+2 formati:

Youposition

Lat/Lon decimali

Lat/lon in gradi

+2 formati configurabili a piacere (per i programmatori...)

http://code.google.com/p/lc-cartrack/sourc...k/LcCarTrack.py

Link to comment
Condividi su altri siti

Scusami ancora!...non è che potresti postarlo qui sul forum o darmi un link per il download diretto?.....perchè su Google Code non capisco come si scarica.........

....cmq come ti ho detto mi interessere la versione che ritorna la posizione nel formato "44.342456"......decimali quindi vero?

GRAZIE INFINITE!!!....b)

Link to comment
Condividi su altri siti

Veramente quello sopra E' un link diretto!

Comunque...

##########################################
### LcCarTrack - satellite car antitheft 
###     Written by Luca Cassioli 2008
##########################################
## Version 1.1.0


# 1.1.0 - Started SVN/GoogleCode configuration management
#         Customizable message formatting added. 


### This program is FREEWARE.
### Commercial use is forbidden without author's permission.




### Keep the phone and a GPS receiver hidden into your car,
### continuously charging and running this python script.
### If your car gets stolen (or if you don't remember where
### you parked it...), just send an SMS to it containing:
### SEND - to receive a single SMS with latitude and longitude;
### TRACK ON - to start receiving one SMS every INTERVAL second;
### TRACK OFF - to stop tracking.


### ****** WARNNG:Using this program to track others than yourself, or things
### ****** you don't own, is forbidden in most countries and legally 
### ****** persecuted (privacy law).


import inbox
import e32
import socket
import appuifw
import messaging
import os


Recipient_number="000000"
FOLDER='e:/LcCarTrack'
FILEPATH='e:/LcCarTrack/settings.txt'


# Available message formats:
FMT_YOUPOSITION = 1 # Lat$Lon  , for site [url="http://www.youposition.it"]http://www.youposition.it[/url] 
FMT_DECIMAL = 2 # LAT=dd.dddddd, LON=dd.dddddd
FMT_60 = 3 # LAT = dd mm ss.ssss , LON = dd mm ss.ssss
FMT_CUSTOM1 = 4 # Free slot: add your conversion algorithm in FomratMessage(lat,lon,type) function
FMT_CUSTOM2 = 5 # Free slot: add your conversion algorithm in FomratMessage(lat,lon,type) function


##################################
####  Selected message format ####
MSG_FORMAT = FMT_YOUPOSITION  ####
##################################


TRACKING = 0 # Disabled by default.
INTERVAL = 20 # seconds between tracking messages




def FormatMessage(lat,lon,fmt):
 print "converto lat:",lat, " , lon:", lon, " in formato ", fmt
 LatComma=lat.find(".")
 LonComma = lon.find(".")
 la = float(lat)
 lo = float(lon)
 print lat ,la
 print lon, lo
 msg = "[conversion error]"
 if fmt == FMT_YOUPOSITION: # dd.dddddd$ddd.dddddd
   msg = lat +"$" + lon 
   print "Prestringa FMT_YOUPOSITION:",msg    
 if fmt == FMT_DECIMAL: # LAT:dd.dddddd,LON:ddd.dddddd
   msg = "LAT:" + lat + ", LON:" + lon
   print "Prestringa FMT_DECIMAL:",msg    
 if fmt == FMT_60:
   la_deg = la
   la_min = (la-int(la))*60
   la_sec = (la_min-int(la_min))*60
   print int(la_deg), int(la_min), int(la_sec)
   lo_deg = lo
   lo_min = (lo-int(lo))*60
   lo_sec = (lo_min-int(lo_min))*60
   print int(lo_deg), int(lo_min), int(lo_sec)
   msg = "LAT:" + str(int(la_deg))+ " " + str(int(la_min)) + " " + str((la_sec)) + \
         ", LON:" + str(int(lo_deg))+ " " + str(int(lo_min)) + " " + str((lo_sec))
 if fmt == FMT_CUSTOM1:
   pass
 if fmt == FMT_CUSTOM2:
   pass
 return msg


def Connect():
 #return "debug"
 sock=socket.socket(socket.AF_BT,socket.SOCK_STREAM)
 address,service=socket.bt_discover()    # cerca ricevitore.
 target=(address,service.values()[0]) # si collega
 sock.connect(target)# al ricevitore.
 return sock

def ReadPos():
     global MSG_FORMAT
     valid = 0 
     while (valid==0): # If unknown line is read from GPS, device output must be read again.
         rawdata = readline(sock) 
         if rawdata:
             msg= '(stringa non prevista)'
             data = rawdata.strip()
             talker = data[1:3]
             sentence_id = data[3:6]
             sentence_data = data[7:]             
             #Extract location data:
             location = {}
             if sentence_id == 'GGA':
               location = get_gga_location(sentence_data) 
               valid = 1
             if sentence_id == 'GLL':
               location = get_gll_location(sentence_data)
               valid = 1
             if sentence_id == 'RMC':
               location = get_rmc_location(sentence_data)
               valid = 1     
             if valid == 1:                
               temp = 'LAT:' + location['lat'] + ',LON:' + location['long']
               la = str(int(temp[4:6])+float(temp[6:13])/60)
               lo = str(int(temp[19:22])+float(temp[22:29])/60)
               msg = FormatMessage(la,lo,MSG_FORMAT) 
             else:
               msg = "Invalid data, can't format"
         else:
             print "****** invalid data *****"
             msg= 'ERROR:couldnt receive GPS data'        
     return msg


def SendMess(n,m):
 #print "Invio messaggio " + m + " a " + n
 messaging.sms_send(n,m) # DEBUG


def read_sms(id): #DEBUG
#def read_sms():
   global Recipient_number
   global TRACKING
   ##############################à
   #sms_text="TRACK ON" # DEBUG*********
   ##############################à
   e32.ao_sleep(0.1)
   i=inbox.Inbox() #DEBUG
   sms_text=i.content(id) #DEBUG
   appuifw.note(u"Messaggio da elaborare: " + sms_text, "info")


   # Execute different actions depending on SMS contents:
   if sms_text[0:8] == 'TRACK ON':
     i.delete(id) # Delete just received message
     SendMess(Recipient_number,'TRACKING ACTIVATED!')
     TRACKING = 1
     while (TRACKING == 1):
       e32.ao_sleep(INTERVAL)
       msg=ReadPos()
       SendMess(Recipient_number,'TRACKING: '+msg)  
       print 'Tracker message sent.'
   if sms_text[0:9] == 'TRACK OFF':
     i.delete(id) # Delete just received message
     TRACKING = 0
     SendMess(Recipient_number, "tracking DEactivated!")
   if sms_text[0:4] == 'SEND':
     i.delete(id) # Delete just received message
     print 'Reading position....'      
     msg=ReadPos()
     print 'Sending position ' + msg + ' to ' + Recipient_number 
     SendMess(Recipient_number, msg) # Send SMS.
     print 'Position sent.'




def ReadSettings():
   global Recipient_number
   global FILEPATH
   try:
       f=open(FILEPATH,'rt')  # Open for reading
       print "file aperto"
       try:
           content = f.read()
           print "contenuto letto"
           parameters=eval(content) # Store values
           print "valori presi"
           f.close()
           Recipient_number = parameters.get('recipient','')  # read values
           #print Recipient_number
       except:
           print 'Couldnt read file - err 001'
   except:
       print 'Couldnt open file - err 002'

def write():
   global Recipient_number
   global FOLDER
   # Setup configuration file:
   FILEPATH=os.path.join(FOLDER,'settings.txt')
   # Create if does not exist:
   if not os.path.isdir(FOLDER):
       os.makedirs(FOLDER)
       FOLDER=os.path.join(FOLDER,'settings.txt')        
   # Store values into a dictionary:
   parameters={}
   parameters['recipient']= Recipient_number
   # Save:
   f=open(FILEPATH,'wt')
   f.write(repr(parameters))
   f.close()

# Format a NMEA timestamp into something friendly
def format_time(time):
       hh = time[0:2]
       mm = time[2:4]
       ss = time[4:]
       return "%s:%s:%s UTC" % (hh,mm,ss)

# Format a NMEA date into something friendly
def format_date(date):
       months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')
       dd = date[0:2]
       mm = date[2:4]
       yy = date[4:6]
       yyyy = int(yy) + 2000
       return "%s %s %d" % (dd, months[(int(mm)-1)], yyyy)

# Get the location from a GGA sentence
def get_gga_location(data):
       d = data.split(',')
       ret = {}
       ret['type'] = 'GGA'
       ret['lat'] = "%s%s" % (d[1],d[2])
       ret['long'] = "%s%s" % (d[3],d[4])
       ret['time'] = format_time(d[0])
       return ret

# Get the location from a GLL sentence
def get_gll_location(data):
       d = data.split(',')
       ret = {}
       ret['type'] = 'GLL'
       ret['lat'] = "%s%s" % (d[0],d[1])
       ret['long'] = "%s%s" % (d[2],d[3])
       ret['time'] = format_time(d[4])
       return ret

# Get the location from a RMC sentence
def get_rmc_location(data):
       d = data.split(',')
       ret = {}
       ret['type'] = 'RMC'
       ret['lat'] = "%s%s" % (d[2],d[3])
       ret['long'] = "%s%s" % (d[4],d[5])
       ret['time'] = format_time(d[0])
       return ret

def readline(sock):
       """Read one single line from the socket"""
       line = ""
       while 1:
               char = sock.recv(1)
               if not char: break
               line += char
               if char == "\n": break
       return line

ReadSettings()
sock=Connect()




############# Usage example:
MSG_FORMAT = FMT_YOUPOSITION
print ReadPos() # DEBUG


e32.ao_sleep(3)
MSG_FORMAT = FMT_DECIMAL
print ReadPos() # DEBUG


e32.ao_sleep(3)
MSG_FORMAT = FMT_60
print ReadPos() # DEBUG


############################




print 'connecting to inbox...'
i=inbox.Inbox()  #DEBUG
# Connect messages receiving to program:   
i.bind(read_sms) #DEBUG
print 'Connected. Waiting for incoming messages...'


#print "DEBUG MODE"
#read_sms()

Sostituisci MSG_FORMAT = FMT_YOUPOSITION con MSG_FORMAT = FMT_DECIMAL

Modificato da JumpJack_
Link to comment
Condividi su altri siti

Quel link lì mi fa vedere tutto il codice ma poi dove lo devo copiare?....in blocco note viene un casino perchè mischia tutte le righe.......su Google Code non mi permette di scaricare il file .py da mettere nel cell...............pensavo potessi postare lo script qui come avevi fatto tempo fa in questo topic...........

....va bè ci rinuncerò allora...........scusa se non ci capisco!

Link to comment
Condividi su altri siti

Quel link lì mi fa vedere tutto il codice ma poi dove lo devo copiare?....in blocco note viene un casino perchè mischia tutte le righe.......su Google Code non mi permette di scaricare il file .py da mettere nel cell...............pensavo potessi postare lo script qui come avevi fatto tempo fa in questo topic...........

....va bè ci rinuncerò allora...........scusa se non ci capisco!

boh, non ti capisco...

I file .py non si possono uppare nel forum, ho dovuto rinominarlo in .txt ... ma non mi pareva di averlo fatto in precedenza.

Semmai avevo messo il sorgente in un "box".... come nel precedente messaggio... o no?!? b)

mah.

LcCarTrack.txt

Link to comment
Condividi su altri siti

Basta che metti il file .py in un archivio RAR o ZIP e te lo fa postare il forum...........comunque grazie, ora l'ho scaricato...........mi manca solo di inserire il numero di telefono da cui riceve e poi a cui deve inviare SMS......nella versione vecchia mi avevi detto di aggiungere la riga

Recipient_number = "+39349XXXXXXX"

dopo la riga "global Recipient_number"...quindi nella riga 171 nel nuovo script.....

......è giusto?....o devo creare per forza il file "e:/LcCarTrack/settings.txt"?

Link to comment
Condividi su altri siti

Per il numero di telefono ho risolto.....andava bene come mi avevi detto l'altra volta..............però a me lo script mi indica sempre la posizione del vecchio

,,,,stavolta mi ha ritornato (usando MSG_FORMAT = FMT_DECIMAL)

LAT 44 45 39.539999999...........

LON: 8 47 45.396000000........

La posizione è la stessa che mi indicava lo script vecchio e poi non arriva in formato "44.453953" (per esempio) ma in quel formato che vedi e con tantissimi decimali invece di solo sei dopo la virgola............

Link to comment
Condividi su altri siti

Per il numero di telefono ho risolto.....andava bene come mi avevi detto l'altra volta..............però a me lo script mi indica sempre la posizione del vecchio

,,,,stavolta mi ha ritornato (usando MSG_FORMAT = FMT_DECIMAL)

LAT 44 45 39.539999999...........

LON: 8 47 45.396000000........

La posizione è la stessa che mi indicava lo script vecchio e poi non arriva in formato "44.453953" (per esempio) ma in quel formato che vedi e con tantissimi decimali invece di solo sei dopo la virgola............

La cosa piu' pallosa per uno sviluppatore e' PROVARE i propri programmi dopo averli scritti... b) Meno male che ci sono i beta-testers (come te) b)

C'era un problema alla fine del programma: le righe di esempio sovrascrivevano il valore di MSG_FORMAT! Quindi veniva sempre il formato FMT_60!!

In piu' ora ho aggiunto una variabile per impostare il numero di decimali desiderato.

Pero' non farmi riuppare il programma sul forum... L'ho messo su GoogleCode proprio per evitarlo!!

Se vai a questo link ti appare il sorgente, e devi solo selezionarlo e incollarlo in notepad!

Link to comment
Condividi su altri siti

Se ti stresso è perchè mi piace questo script!....e il beta-tester lo faccio molto volentieri! :(

....non voglio diventare la tua persecuzione ma se seleziono tutto il codice e lo copio su Notepad non mi vengono le 300 righe del codice una dietro l'altra....praticamente non va a capo e tutto il codice rimane paciugato in poche righe e ovviamente non funzionerebbe...

...prova anche tu.........sicuramente sbaglierò io ma ci ho provato un po' di volte.....anche poche righe alla volta ma niente!......se sbaglio insultami pure! b)

...guarda, ti allego il risultato del copia-incolla (non l'ho ancora rinominato .py)!

(fai salva oggetto con nome e poi aprilo)

...dai che poi così lo provo e non ti stresso più.........per questo script! b)

LcCarTrack.txt

Modificato da mazzanokia
Link to comment
Condividi su altri siti

Al ink che ha postato JumpJack_ fai cosi':

quiit6.jpg

giusto, l'ho appena scoperto anch'io. Quella pagine serve solo per VEDERE il codice, per scaricarlo devi cliccare su quel link... cioe' questo:

http://lc-cartrack.googlecode.com/svn/trun...k/LcCarTrack.py

Che è completamente diverso da quello per vedere il codice:

( h ttp://code.google.com/p/lc-cartrack/source/browse/trunk/lc-cartrack/LcCarTrack.py )

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share


×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy