diff --git a/rpi/gps.py b/rpi/gps.py index e3b14d1..c245392 100755 --- a/rpi/gps.py +++ b/rpi/gps.py @@ -1,64 +1,42 @@ -#!/bin/python +#!/usr/bin/env python +# -*- coding: utf-8 -*- + # http://stackoverflow.com/questions/28867795/reading-i2c-data-from-gps/31010266 import time import json import smbus import logging +import pynmea2 BUS = None address = 0x42 -gpsReadInterval = 0.1 +gpsReadInterval = 1 LOG = logging.getLogger() -# GUIDE -# http://ava.upuaut.net/?p=768 - -GPSDAT = { - 'strType': None, - 'fixTime': None, - 'lat': None, - 'latDir': None, - 'lon': None, - 'lonDir': None, - 'fixQual': None, - 'numSat': None, - 'horDil': None, - 'alt': None, - 'altUnit': None, - 'galt': None, - 'galtUnit': None, - 'DPGS_updt': None, - 'DPGS_ID': None -} def connectBus(): global BUS BUS = smbus.SMBus(1) -def parseResponse(gpsLine): +def parseResponse(gpsBytes): global lastLocation - gpsChars = ''.join(chr(c) for c in gpsLine) - if "*" not in gpsChars: + #gpsLine = "".join(map(chr, gpsBytes)) + #gpsLine = "".join([chr(byte) for byte in gpsBytes]) + gpsLine = "".join([chr(byte) for byte in gpsBytes]) + + + if "*" not in gpsLine: return False - gpsStr, chkSum = gpsChars.split('*') - gpsComponents = gpsStr.split(',') - gpsStart = gpsComponents[0] - if (gpsStart == "$GNGGA"): - chkVal = 0 - for ch in gpsStr[1:]: # Remove the $ - chkVal ^= ord(ch) - if (chkVal == int(chkSum, 16)): - for i, k in enumerate( - ['strType', 'fixTime', - 'lat', 'latDir', 'lon', 'lonDir', - 'fixQual', 'numSat', 'horDil', - 'alt', 'altUnit', 'galt', 'galtUnit', - 'DPGS_updt', 'DPGS_ID']): - GPSDAT[k] = gpsComponents[i] - print(gpsChars) - print(json.dumps(GPSDAT, indent=2)) + print(gpsLine) + gpsObject = pynmea2.parse(gpsLine) + print(gpsObject) + + # logs + lt = time.asctime( time.localtime(time.time()) ) + with open('/home/alarm/gps.log', 'a') as f: + f.write(lt+' : '+gpsLine+'\n') def readGPS(): c = None @@ -71,12 +49,17 @@ def readGPS(): elif c == 10: break else: + #print(c) response.append(c) + parseResponse(response) + except IOError: time.sleep(0.5) connectBus() + except (Exception) as e: + print("Exception") print(e) LOG.error(e) @@ -84,3 +67,4 @@ connectBus() while True: readGPS() time.sleep(gpsReadInterval) +#readGPS()