You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.2 KiB
77 lines
2.2 KiB
import RYLR896Py
|
|
from _thread import *
|
|
import threading
|
|
import json
|
|
import requests
|
|
import pynmea2
|
|
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
|
|
import os
|
|
|
|
# 1. Setup serial connection
|
|
lora = RYLR896Py.RYLR896("/dev/ttyS0", 115200)
|
|
lora.SetRFParamsLessThan3KM()
|
|
lora.SetAESPassword("FABC0002EEDCAA90FABC0002EEDCAA90")
|
|
|
|
def dataHandler(data):
|
|
# Split data on '|' separator character
|
|
dataSplit = data["message"].split("|")
|
|
dataToSend = {}
|
|
|
|
dataToSend["drone_id"] = dataSplit[0]
|
|
dataToSend["GPRMC"] = dataSplit[1]
|
|
|
|
dataToSend["gps_data"] = {}
|
|
|
|
try:
|
|
gprmc_nmea2 = pynmea2.parse(dataToSend["GPRMC"])
|
|
dataToSend["gps_data"]["status"] = gprmc_nmea2.status
|
|
dataToSend["gps_data"]["timestamp"] = str(gprmc_nmea2.timestamp)
|
|
dataToSend["gps_data"]["datestamp"] = str(gprmc_nmea2.datestamp)
|
|
dataToSend["gps_data"]["longitude"] = str(gprmc_nmea2.longitude)
|
|
dataToSend["gps_data"]["longitude_minutes"] = str(gprmc_nmea2.longitude_minutes)
|
|
dataToSend["gps_data"]["longitude_seconds"] = str(gprmc_nmea2.longitude_seconds)
|
|
dataToSend["gps_data"]["latitude"] = str(gprmc_nmea2.latitude)
|
|
dataToSend["gps_data"]["latitude_minutes"] = str(gprmc_nmea2.latitude_minutes)
|
|
dataToSend["gps_data"]["latitude_seconds"] = str(gprmc_nmea2.latitude_seconds)
|
|
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
print(dataToSend["gps_data"])
|
|
|
|
dataToSend["sensorReadings"] = {}
|
|
|
|
for sensorReading in dataSplit[2:]:
|
|
name = sensorReading.split("=")[0]
|
|
reading = sensorReading.split("=")[1]
|
|
dataToSend["sensorReadings"][name] = reading
|
|
|
|
|
|
jsonData = json.dumps(dataToSend)
|
|
|
|
print(jsonData)
|
|
|
|
url = os.getenv("BACKEND_LOG_ENDPOINT")
|
|
|
|
try:
|
|
req = requests.post(url, json = dataToSend)
|
|
print(req.text)
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
# 2. Listen for data
|
|
while True:
|
|
data = lora.Receive()
|
|
if data is not None:
|
|
# On data:
|
|
# a. Check if valid
|
|
# b. Parse into object
|
|
# c. Prepare server request
|
|
# d. Send request to REST API
|
|
start_new_thread(dataHandler, (data,))
|
|
|
|
# Split packet and structure into a JSON object
|
|
# Send Post request to REST API with JSON object in request body
|
|
|