Por contribuir con algo a este hilo, he hecho un pequeño programita en Python (así voy aprendiendo

)
El programa es de lo más simple, crea una
corredera virtual basándose en los datos obtenidos por el GPS.
El programa es útil cuando se requieren datos de corredera para determinadas tareas como el cálculo de la intensidad o dirección del viento real y no tenemos corredera o está llena de caracolillo.
Está pensado para ser utilizado junto con kplex, ya que usa como medio de comunicación conexiones TCP. Necesita una de entrada (para recibir datos del GPS) y otra de salida (para enviar los datos de "corredera")
El código del programa es el siguiente:
Código:
#!/usr/bin/python
import re
import sys
import socket
import argparse
def check_nmea(sentence):
cksum = re.sub("(\n|\r\n)","", sentence[sentence.find("*")+1:])
chksumdata = re.sub("(\n|\r\n)","", sentence[sentence.find("$")+1:sentence.find("*")])
csum = 0
for c in chksumdata:
csum ^= ord(c)
if hex(csum) == hex(int(cksum, 16)):
return True
return False
def get_checksum(sentence):
chksumdata = re.sub("(\n|\r\n)","", sentence[sentence.find("$")+1:])
csum = 0
for c in chksumdata:
csum ^= ord(c)
return csum
def main():
parser = argparse.ArgumentParser(description='Simulador de corredera')
parser.add_argument('--INhost', default='localhost',
help='host origen del GPRMC (localhost por defecto)')
parser.add_argument('--INport', type=int, default=10110,
help='puerto origen (10110 por defecto)')
parser.add_argument('--OUThost', default='localhost',
help='host destino del IIVEW (localhost por defecto)')
parser.add_argument('--OUTport', type=int, default=10111,
help='puerto destino (10111 por defecto)')
args = parser.parse_args()
insocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
insocket.connect((args.INhost, args.INport))
gpsin=insocket.makefile("rb")
outsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
outsocket.connect((args.OUThost, args.OUTport))
correderaout=outsocket.makefile("wb")
while 1:
lineaNMEA=gpsin.readline()
speedN=""
magvar=""
vbw="$IIVBW,"
command = lineaNMEA.split(",")
if command[0] == "$GPRMC":
if check_nmea(lineaNMEA):
speedN = command[7]
vbw+=speedN+",,A,"+speedN+",,A"
vbw+="*"+repr(get_checksum(vbw))+"\r\n"
correderaout.write(vbw)
correderaout.flush()
if __name__ == '__main__':
main()
Solo hay que copiarlo en un fichero con extension .py ("corredera.py" por ejemplo) y ejecutarlo con "python corredera.py"
Código:
usage: corredera.py [-h] [--INhost INHOST] [--INport INPORT]
[--OUThost OUTHOST] [--OUTport OUTPORT]
Simulador de corredera
optional arguments:
-h, --help show this help message and exit
--INhost INHOST host origen del GPRMC (localhost por defecto)
--INport INPORT puerto origen (10110 por defecto)
--OUThost OUTHOST host destino del IIVEW (localhost por defecto)
--OUTport OUTPORT puerto destino (10111 por defecto)
Por defecto toma como origen del GPS localhost:10110 y como destino de la corredera localhost:10111 esto es porque yo tengo el kplex configurado así:
Código:
#Output TCP
[tcp]
mode=server
port=10110
direction=out
#Input TCP
[tcp]
mode=server
port=10111
direction=in
Pero se puede cambiar.
Para probarlo se puede utilizar el AIS de Diavolo por ejemplo


python corredera.py --INhost bme.ole32.com --INport 10111
Introducirá la velocidad del GPS de Diavolo en nuestro sistema como si fuera nuestra corredera.




