получить информацию из двух экземпляров в одной и той же записи в python3 - PullRequest
0 голосов
/ 30 августа 2018

Я написал скрипт, который получает информацию от модуля GPS и отправляет ее на InfluxDB. Я использую предложения GPGGA и GPRMC NMEA, чтобы получить следующие значения:

  1. Широта
  2. Долгота
  3. Высота
  4. Скорость над землей

Я использую pynmea2 для разбора предложений NMEA. Поскольку я читаю с последовательного порта, я использую NMEAStreamReader()

код

while True:
        if com is None:
            try:
               # set the serial port 
        try:
              # read the information (NMEA sentence)
        except Exception as e:
            logger.error(e)
            pass

        try:
            # for sentence obtained from reader    
            for msg in reader.next(data):
                measurements = {} # create a measurement dict

                dat = pynmea2.parse(str(msg).strip('\r\n')) # parse the sentence
                if not (dat.latitude == 0.0 and dat.longitude == 0.0):
                    # If Latitude and Longitude are not 0.0
                    if isinstance(dat, pynmea2.GGA): # if GPGGA
                        # Store Latitude Longitude Altitude in `measurements`
                        measurements['lat'] = dat.latitude
                        # measurements['lat_dir'] = dat.lat_dir
                        measurements['lon'] = dat.longitude
                        # measurements['lon_dir'] = dat.lon_dir
                        measurements['alt'] = dat.altitude

                    if isinstance(dat, pynmea2.RMC):
                       # if sentence is RMC store latitude, longitude, speed over ground
                        measurements['lat'] = dat.latitude
                        # measurements['lat_dir'] = dat.lat_dir
                        measurements['lon'] = dat.longitude
                        # measurements['lon_dir'] = dat.lon_dir
                        measurements['spd_over_grnd'] = dat.spd_over_grnd
                    # print(measurements)
                    client.write_points([{
                            'measurement': 'gps',
                            'tags': {
                                'type': 'gps-adafruit',
                            },
                            'time': datetime.datetime.utcnow().isoformat('T') + 'Z',
                            'fields': measurements
                        }])
                else:
                    print('Location Values not available yet. Not writing to DB')
        except Exception as e:
            logger.error(e)
pass

проблема

Если доступно предложение GGA, запись в БД будет lat, long, alt. Если предложение RMC доступно, запись в БД будет lat, long, spd_over_ground (высота не доступна в этом предложении)

Я хочу, чтобы measurements диктовал следующее:

{
  'lat': 23.034, <- from GGA
  'lon': 4.3455, <- from GGA
  'alt': '2.45', <- from GGA
  'spd_over_grnd': 2.2 <- from RMC
}

Проблема в том, что предложения NMEA прекращаются на \r\n Мне нужно дождаться следующего анализа, и до этого мой measurements уже сохранен в БД.

Репозиторий

gpsinflux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...