Δημοσιεύτηκε: 18 Αύγ 2018, 14:53
από George0k00
Έκανα μερικές τροποποιήσεις στον κώδικα, που αφορούν την καλύτερη εμφάνιση και παροχή πληροφοριών DOP:
Κώδικας: Επιλογή όλων
#!/bin/bash
# GPS NMEA parsing tool from file
while read -r line
do
string=$(echo $line | cut -d* -f 1)
old_IFS="$IFS"
IFS=','
read -a field <<<"$string"
IFS="$old_IFS"
if [[ "${field[0]}" =~ "GGA" ]]; then
   UTC=$(echo ${field[1]} | fold -w2 | paste -sd':' -)
   LATITUDE="${field[2]} ${field[3]}"
   LONGTITUDE="${field[4]} ${field[5]}"
   SATNUM=${field[7]}
   HORDIL=${field[8]}
   ALTITUDE=${field[9]}
   SEALVL=${field[11]}
   echo "Global Positioning System Fixed Data"
   echo "Fix taken at: $UTC UTC"
   echo "Number of satellites used: $SATNUM"
   echo "Horizontal dilution of precision: $HORDIL"
   echo "Coordinates: $LATITUDE $LONGTITUDE"
   echo "Altitude: $ALTITUDE meters"
   echo "Sea level: $SEALVL meters"
   echo "_________________________________________________________"
elif [[ "${field[0]}" =~ "RMC" ]]; then
   UTC=$(echo ${field[1]} | fold -w2 | paste -sd':' -)
   LATITUDE="${field[3]} ${field[4]}"
   LONGTITUDE="${field[5]} ${field[6]}"
   SPEED=${field[7]}
   HDG=${field[8]} #heading of track in degrees
   MAGNETVAR="${field[10]} ${field[11]}"
   DATE=$(echo ${field[9]} | fold -w2 | paste -sd'/' -)
   echo "Recommended Minimum Specific GNSS Data"
   echo "Fix taken at: $UTC UTC, $DATE"
   echo "Coordinates: $LATITUDE $LONGTITUDE"
   echo "Ground speed: $SPEED knots, heading $HDG"
   echo "Magnetic declination: $MAGNETVAR"
   echo "_________________________________________________________"
elif [[ "${field[0]}" =~ "GPGSV" ]]; then
   SATVIEW=${field[3]}
   #first satellite
   SATAID=${field[4]}
   SATAELEVATION=${field[5]}
   SATAAZIMUTH=${field[6]}
   SATASNR=${field[7]}
   #second satellite
   SATBID=${field[8]}
   SATBELEVATION=${field[9]}
   SATBAZIMUTH=${field[10]}
   SATBSNR=${field[11]}
   #third satellite
   SATCID=${field[12]}
   SATCELEVATION=${field[13]}
   SATCAZIMUTH=${field[14]}
   SATCSNR=${field[15]}
   #fourth satellite
   SATDID=${field[16]}
   SATDELEVATION=${field[17]}
   SATDAZIMUTH=${field[18]}
   SATDSNR=${field[19]}
   echo "+-------------------------------------------------------+"
   echo "| GPS satellites in view: $SATVIEW            |"
   echo "+-------------------------------------------------------+"
   echo "| Satellite ID      |$SATAID   |$SATBID   |$SATCID   |$SATDID   |"
   echo "| Elevation      |$SATAELEVATION   |$SATBELEVATION   |$SATCELEVATION   |$SATDELEVATION   |"
   echo "| Azimuth      |$SATAAZIMUTH   |$SATBAZIMUTH   |$SATCAZIMUTH   |$SATDAZIMUTH   |"
   echo "| SNR (dBHz)      |$SATASNR   |$SATBSNR   |$SATCSNR   |$SATDSNR   |"
   echo "+-------------------------------------------------------+"
elif [[ "${field[0]}" =~ "GLGSV" ]]; then
   SATVIEW=${field[3]}
   #first satellite
   SATAID=${field[4]}
   SATAELEVATION=${field[5]}
   SATAAZIMUTH=${field[6]}
   SATASNR=${field[7]}
   #second satellite
   SATBID=${field[8]}
   SATBELEVATION=${field[9]}
   SATBAZIMUTH=${field[10]}
   SATBSNR=${field[11]}
   #third satellite
   SATCID=${field[12]}
   SATCELEVATION=${field[13]}
   SATCAZIMUTH=${field[14]}
   SATCSNR=${field[15]}
   #fourth satellite
   SATDID=${field[16]}
   SATDELEVATION=${field[17]}
   SATDAZIMUTH=${field[18]}
   SATDSNR=${field[19]}
   echo "+-------------------------------------------------------+"
   echo "| GLONASS satellites in view: $SATVIEW         |"
   echo "+-------------------------------------------------------+"
   echo "| Satellite ID      |$SATAID   |$SATBID   |$SATCID   |$SATDID   |"
   echo "| Elevation      |$SATAELEVATION   |$SATBELEVATION   |$SATCELEVATION   |$SATDELEVATION   |"
   echo "| Azimuth      |$SATAAZIMUTH   |$SATBAZIMUTH   |$SATCAZIMUTH   |$SATDAZIMUTH   |"
   echo "| SNR (dBHz)      |$SATASNR   |$SATBSNR   |$SATCSNR   |$SATDSNR   |"
   echo "+-------------------------------------------------------+"
fi
#sleep 0
done <"$1"


Αυτό που θα ήθελα να σε ρωτήσω όμως πρώτα από όλα είναι, με ποιον τρόπο στέλνει τα δεδομένα το κινητό στον υπολογιστή σου ;
Από την επίσημη σελίδα του Share GPS, βλέπω πως υποστηρίζει διάφορους τρόπους, εσύ ποιον τρόπο προϋποθέτεις για την αποστολή των δεδομένων ;


Το script δεν θα παραπονεθεί εφόσον το παρέχουμε δεδομένα NMEA. Εγώ χρησιμοποιώ bluetooth, αλλά και οι επιλογές για USB & TCP πρέπει να δουλεύουν, καθώς πρώτα αποθηκεύω να δεδομένα NMEA σε αρχείο και μετά διαβάζω το αρχείο με το script.

Δοκίμασα και την επιλογή για USB, χρησιμοποιώντας το netcat https://www.jillybunch.com/sharegps/netcat.html για αποθήκευση NMEA:
Κώδικας: Επιλογή όλων
nc localhost 20175 > nmea.txt

Αλλά για κάποιο λόγο τα αρχεία που δημιουργούνται από το netcat, δεν δίνουν έξοδο όταν τα διαβάζει το script, σαν να μη βρίσκει σειρές NMEA. Μόνο αν τα κάνω copy-paste σε άλλο αρχείο λειτουργεί, άρα έχει να κάνει με τον τρόπο που δουλεύει το netcat. Εδώ θα χρειαστώ βοήθεια, γιατί δεν ξέρω τι ακριβώς φταίει.

Αντίθετα όταν έχω το bluetooth, χρησιμοποιώ το cat, που είναι άψογο.
Κώδικας: Επιλογή όλων
sudo cat /dev/rfcomm1 > nmea.txt


Το γεγονός ότι πρέπει να αποθηκεύω πρώτα σε αρχείο δημιουργεί πρόβλημα όταν θέλουμε άμεση πληροφόρηση από το GPS. Αυτό είναι το δεύτερο κομμάτι που κολλάω, καθώς όπως προανέφερα χρησιμοποιώντας το script απευθείας στη θύρα του sharegps δίνει μπαρούφες (το πρόγραμμα διαβάζει μια σειρά κάθε φορά, ίσως επειδή μέχρι να διαβάσει τη μία έχει δημιουργηθεί η επόμενη από το gps, δημιουργώντας πρόβλημα στην αντιστοίχηση των μεταβλητών).

Η αποστολή γίνεται μονάχα εφόσον το επιλέξεις εσύ ρητά μέσω της εφαρμογής «Share GPS» ;

Ναι, πρέπει να ρυθμίσεις από το gps τη σύνδεση και να γράφει "Listening" για να στέλνει δεδομένα στον υπολογιστή.

Επίσης δεν μου αρέσει ότι το share gps διαθέτει premium έκδοση για πρόσθετα χαρακτηριστικά, αλλά ο δημιουργός του φρόντισε για αρκετά κατατοπιστικό οδηγό ακόμη και για linux.