Emulacion de Vehiculos

David3 years ago

Buenas tardes a todos, es posible algun programa o codigo para emular vehiculos en la plataforma?

Tengo traccar en un VPS y me gustaria emular vehiculos para una presentacion de negocios.

Anton Tananaev3 years ago
David3 years ago

Gracias anton no conozco mucho de programacion, te consulto si es posible hacer la emulacion de varios autos, con ese script y que parametros deberia tener en cuenta.

Lo que se me ocurre que puedes hacer es descargar Traccar Client en varios celulares de personas que conozcas y nombrar a cada cliente como si fuera un vehiculo, incluso al darlo de alta en el manager puedes elegir el icono de vehiculo. Basicamente lo que hace Traccar client es mandar la ubicación del dispositivo ( en este caso el telefono) a la plataforma, y de esa manera lo puedes presentar. De otra manera utiliza el script que comenta Anton este seria la mejor opción.

David3 years ago

Gracias alfredo por tu consejo.

Santiago3 years ago

Lo mas facil es generar varios scripts python (uno por cada vehículo) que manden paquetes al protocolo osmand, luego los auto ejecutas desde crontab en linux.
si usas windows lo mas practico es generar codigo c o c# emulando dispositivos en osmand.

cualquier duda que tengas consultame.

David3 years ago

Buenas tardesm estoy ejecutando el script de python desde afuera de mi servidor traccar,pero no tengo respuesta:

importar  sys
importar  matemáticas
importar  urllib
importar  httplib
 tiempo de importación
importar al  azar

id  =  '123456789012345'
servidor  =  'miplataformatraccar:5055'
período  =  1
paso  =  0.001
device_speed  =  40
driver_id  =  '123456'

waypoints  = [
    ( 48,853780 , 2,344347 ),
    ( 48.855235 , 2.345852 ),
    ( 48.857238 , 2.347153 ),
    ( 48.858509 , 2.342563 ),
    ( 48,856066 , 2,340432 ),
    ( 48.854780 , 2.342230 )
]

puntos  = []

para  i  en  rango ( 0 , len ( waypoints )):
    ( lat1 , lon1 ) =  waypoints [ i ]
    ( lat2 , lon2 ) =  waypoints [( i  +  1 ) %  len ( waypoints )]
    longitud  =  matemáticas . sqrt (( lat2  -  lat1 ) **  2  + ( lon2  -  lon1 ) **  2 )
    count  =  int ( math . ceil ( longitud  /  paso ))
    para  j  en el  rango ( 0 , cuenta ):
        lat  =  lat1  + ( lat2  -  lat1 ) *  j  /  cuenta
        lon  =  lon1  + ( lon2  -  lon1 ) *  j  /  cuenta
        puntos . añadir (( lat , lon ))

def  enviar ( conexión , lat , lon , rumbo , velocidad , alarma , encendido , precisión , rpm , combustible , driverUniqueId ):
    params  = (( 'id' , id ), ( 'marca de tiempo' , int ( tiempo . tiempo ())), ( 'lat' , lat ), ( 'lon' , lon ), ( 'rumbo' , curso ), ( 'velocidad' , velocidad ))
    si  alarma :
        params  =  params  + (( 'alarma' , 'sos' ),)
    si  ignición :
        params  =  params  + (( 'ignición' , 'verdadero' ),)
    si  precisión :
        params  =  params  + (( 'precisión' , precisión ),)
    si  rpm :
        params  =  params  + (( 'rpm' , rpm ),)
    si  combustible :
        params  =  params  + (( 'combustible' , combustible ),)
    si  driverUniqueId :
        params  =  params  + (( 'driverUniqueId' , driverUniqueId ),)
    conn . request ( 'GET' , '?'  +  urllib . urlencode ( params ))
    conn . getresponse (). leer ()

 curso def ( lat1 , lon1 , lat2 , lon2 ):
    lat1  =  lat1  *  matemáticas . pi  /  180
    lon1  =  lon1  *  matemáticas . pi  /  180
    lat2  =  lat2  *  matemáticas . pi  /  180
    lon2  =  lon2  *  matemáticas . pi  /  180
    y  =  matemáticas . sin ( lon2  -  lon1 ) *  matemáticas . cos ( lat2 )
    x  =  matemáticas .cos ( lat1 ) *  matemáticas . sin ( lat2 ) -  matemáticas . sin ( lat1 ) *  matemáticas . cos ( lat2 ) *  matemáticas . cos ( lon2  -  lon1 )
    return ( matemáticas . atan2 ( y , x ) % ( 2  *  matemáticas . pi )) *  180  /  matemáticas . Pi

índice  =  0

conn  =  httplib . HTTPConnection ( servidor )

mientras es  cierto :
    ( lat1 , lon1 ) =  puntos [ índice  %  len ( puntos )]
    ( lat2 , lon2 ) =  puntos [( índice  +  1 ) %  len ( puntos )]
    speed  =  device_speed  if ( index  %  len ( points )) ! =  0  else  0
    alarma  = ( índice  %  10 ) ==  0
    ignición  = ( índice  %  len ( puntos )) ! =  0
    precisión  =  100  si ( índice  %  10 ) ==  0  más  0
    rpm  =  aleatorio . randint ( 500 , 4000 )
    combustible  =  aleatorio . randint ( 0 , 80 )
    driverUniqueId  =  driver_id  if ( index  %  len ( puntos )) ==  0  else  False
    enviar ( conn , lat1 , lon1 , curso ( lat1 , lon1 , lat2 , lon2 ), velocidad , alarma , encendido , precisión , rpm , combustible , driverUniqueId )
    tiempo . dormir ( punto )
    índice  + =  1
Santiago3 years ago

Revisa los logs de tu plataforma y asegurate de que tu script realmente este sacando los paquetes.

David3 years ago

Hola santiago mi logs dice esto:

2020-12-12 13:50:29  INFO: [c4aea7a1] connected
2020-12-12 13:50:30  INFO: [c4aea7a1: gps103 < 10.194.18.137] HEX: 160303009d0100009903035fd4f4d29f9029bb3680e6fb88b2e56fb97a5d60d1fef78393210b7ffaaf7b3800002ac02cc02bc030c02f009f009ec024c023c028c027c00ac009c014c013009d009c003d003c0035002f000a01000046000a00080006001d00170018000b00020100000d00140012040105010201040305030203020206010603002300000010000b000908687474702f312e3100170000ff01000100
2020-12-12 13:50:30  WARN: [c4aea7a1] error - begin 21, end 24, length 22 - StringIndexOutOfBoundsException (... < Gps103ProtocolDecoder:413 < ExtendedObjectDecoder:52 < ... < WrapperContext:102 < ...)
2020-12-12 13:50:30  WARN: [c4aea7a1] error - begin 21, end 24, length 20 - StringIndexOutOfBoundsException (... < Gps103ProtocolDecoder:413 < ExtendedObjectDecoder:52 < ... < WrapperContext:102 < ...)
2020-12-12 13:50:30  WARN: [c4aea7a1] error - begin 21, end 24, length 6 - StringIndexOutOfBoundsException (... < Gps103ProtocolDecoder:413 < ExtendedObjectDecoder:52 < ... < WrapperContext:102 < ...)
2020-12-12 13:50:30  INFO: [c4aea7a1] disconnected
Santiago3 years ago

Tu log no indica que recibas algún paquete desde el script, sin embargo indica que los paquetes que recibiste de un equipo presentan errores.

Tu script no esta funcionando y tus equipos están enviando una cadena que produce una excepción en la plataforma.

Anton Tananaev3 years ago

How come your script is configured to use port 5055, but you are providing log with port 5001?

David3 years ago

Hola a todos, comenze a ser pruebas y la salida de error python me da lo siguiente:

Traceback (última llamada más reciente):

   Línea 77 , en <módulo>
    enviar (conn, lat1, lon1, curso (lat1, lon1, lat2, lon2), velocidad, alarma, encendido, precisión, rpm, combustible, driverUniqueId)
  Línea 51 , en envío
    conn.request ('OBTENER', '?' + urllib.urlencode (params))
  Archivo "/usr/lib/python2.5/httplib.py", línea 862, en solicitud
    self._send_request (método, url, cuerpo, encabezados)
  Archivo "/usr/lib/python2.5/httplib.py", línea 885, en _send_request
    self.endheaders ()
  Archivo "/usr/lib/python2.5/httplib.py", línea 856, en encabezados finales
    self._send_output ()
  Archivo "/usr/lib/python2.5/httplib.py", línea 728, en _send_output
    self.send (msg)
  Archivo "/usr/lib/python2.5/httplib.py", línea 695, en envío
    self.connect ()
  Archivo "/usr/lib/python2.5/httplib.py", línea 663, en connect
    socket.SOCK_STREAM):
socket.gaierror: (-2, 'Nombre o servicio desconocido')
Santiago3 years ago

David, te recomiendo googlear cada uno de los errores que tenes y depures. aparentemente no tenes acceso a una bilioteca.

David3 years ago

gracias santiago estoy usando visual estudio,

Santiago3 years ago

Podrías hacerlo con el block de notas es irrelevante. googlea los errores en ingles y vas a dar con tu problema.