Как читать информацию из GPSD и отправлять как JSON, используя python / Flask - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь добавить функцию GPS на уже доступный веб-сайт, который я не создал. Этот веб-сайт отображает карту, и я хотел бы, чтобы карта следовала GPS-координатам, предоставленным GPSD на Raspberry Pi. У меня GPSD работает на Raspberry Pi и веб-сайт обслуживается пи, который я могу получить доступ через локальную сеть. Так что мне просто нужно получить данные GPS от GPSD на Javascript веб-сайта. Я попытался написать python программу, которая читает GPSD, а затем, с Flask, выводит JSON. По отдельности я могу получить python, чтобы выкладывать информацию из GPSD, и я могу получить доступ к stati c JSON, используя Flask через локальную сеть, но когда я собираю все вместе, ничего не работает. Я не уверен в этом методе, если есть лучший способ сделать это, кроме python с Flask. Мой код ниже, спасибо:

#! /usr/bin/python
from flask import Flask, jsonify
from gps import *
from threading import Thread
from time import *
import time
import threading

mode = 0

gpsd = None #seting the global variable

app = Flask(__name__)

class GpsPoller(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
    global gpsd #bring it in scope
    gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
    self.current_value = None
    self.running = True #setting the thread running to true

  def run(self):
    global gpsd
    while gpsp.running:
      gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer

def update_GPSD():
     gpsp = GpsPoller() # create the thread
     gpsp.start() # start it up
     while 1:
         lat = gpsd.fix.latitude
         lon = gpsd.fix.longitude
         mode = gpsd.fix.mode
         sat = len(gpsd.satellites)
         utc = gpsd.fix.time

         print 'latitude    ' , lat
         print 'longitude   ' , lon
         time.sleep(1)     

@app.route('/')
def index():
    if mode == 0:
        message = {"mode" : mode}
        return jsonify(message)

    else:
        message = {'mode': mode, 'lat': lat, 'lon': lon, 'sat': sat, }
        return jsonify(message)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)
    Thread(target = update_GPSD).start()
    try:
        while 1:

    except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
            print "\nKilling Thread..."
            gpsp.running = False
            gpsp.join() # wait for the thread to finish what it's doing
    print "Done.\nExiting."    
...