Ver mensaje
  #281  
Antiguo 16-11-2014, 14:49
Avatar de sailoog.com
sailoog.com sailoog.com esta desconectado
Expulsado
 
Registrado: 24-05-2011
Mensajes: 1,237
Agradecimientos que ha otorgado: 413
Recibió 1,358 Agradecimientos en 485 Mensajes
Sexo:
Predeterminado Re: SailPi Navegando con Raspberry Pi

Cita:
Originalmente publicado por gilinas Ver mensaje
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.

Hey que buena idea!! es cierto que si renuncias a corredera renuncias también a datos de viento y que con la velocidad real siempre tendras datos de viento real mas reales.

Te copio la idea y adapto tu codigo a opemplotter si te parece. Yo uso un parser nmea en python que va muy bien y es el que uso para extrarer la hora del GPS, se llama "pynmea2". Creo que modificaré tu codigo para usar ese parser y añadirle depuración para cuando no reciba señal o no encuentre velocidad desde el GPS.

Aunque si te animas a hacerlo tu mismo con un fork de openplotter en github genial

Citar y responder