La Taberna del Puerto Greatblue360
"Se navega por los astros, por la mar, por la tierra, por las gentes, por los sentimientos...Se navega." Altair
VHF: Canal 77   
Regresar   La Taberna del Puerto > Foro > Foros Náuticos > Foro Náutico Deportivo

Avisos

 
 
Herramientas Estilo
  #11  
Antiguo 15-11-2014, 09:21
Avatar de gilinas
gilinas gilinas esta desconectado
Corsario
 
Registrado: 11-12-2006
Localización: Indignao por los Golfos de Valencia
Edad: 64
Mensajes: 1,759
Agradecimientos que ha otorgado: 849
Recibió 754 Agradecimientos en 335 Mensajes
Sexo:
Predeterminado Re: SailPi Navegando con Raspberry Pi

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.

__________________
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
El mar es de TODOS.
Lo que es de TODOS, NO ES MÍO.


"No hay nada como el MAR"
Tinico N'Hielo
Citar y responder
Los siguientes cofrades agradecieron este mensaje a gilinas
 

Greatblue360

Herramientas
Estilo

Reglas del foro
No puedes crear discusiones
No puedes responder a mensajes
No puedes editar tus adjuntos
No puedes editar tus mensajes

BB code está activado
Emoticonos está activado
El código [IMG] está activado
El código HTML está desactivado
Ir a


Todas las horas son GMT +1. La hora es 05:57.


Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
© La Taberna del Puerto