Fixed some location and iperf issues, moved normalize function to helper_functions
This commit is contained in:
parent
ff16bd3a20
commit
d4a33c6fcd
|
@ -1,5 +1,4 @@
|
||||||
import os
|
import os
|
||||||
import pprint
|
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import threading
|
import threading
|
||||||
|
@ -20,7 +19,7 @@ from at_commands import (
|
||||||
get_modem_sinr,
|
get_modem_sinr,
|
||||||
set_configs,
|
set_configs,
|
||||||
)
|
)
|
||||||
from helper_functions import calculate_distance, parse_lat_lon, save_data_to_json
|
from helper_functions import calculate_distance, normalize, parse_lat_lon, save_data_to_json
|
||||||
from sierra_commands import get_modem_nr_info, get_modem_status
|
from sierra_commands import get_modem_nr_info, get_modem_status
|
||||||
|
|
||||||
# Globals
|
# Globals
|
||||||
|
@ -73,7 +72,8 @@ def read_gps_data(
|
||||||
gps_data = {}
|
gps_data = {}
|
||||||
break
|
break
|
||||||
except serial.SerialException as e:
|
except serial.SerialException as e:
|
||||||
print(f"Serial communication error: {e}")
|
# print(f"Serial communication error: {e}")
|
||||||
|
pass
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error: {e}")
|
print(f"Error: {e}")
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ def get_current_location(dictionary={}):
|
||||||
if gps_data.get("altitude"):
|
if gps_data.get("altitude"):
|
||||||
dictionary["altitude"] = gps_data["altitude"]
|
dictionary["altitude"] = gps_data["altitude"]
|
||||||
|
|
||||||
if type(base_location) == dict and 'latitude' in base_location:
|
if base_location and "latitude" in base_location:
|
||||||
dictionary["baseLatitude"] = base_location["latitude"]
|
dictionary["baseLatitude"] = base_location["latitude"]
|
||||||
dictionary["baseLongitude"] = base_location["longitude"]
|
dictionary["baseLongitude"] = base_location["longitude"]
|
||||||
if base_location.get("altitude"):
|
if base_location.get("altitude"):
|
||||||
|
@ -168,8 +168,11 @@ def collect_iperf(
|
||||||
for command in commands:
|
for command in commands:
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
gps_data = read_gps_data()
|
location = read_gps_data()
|
||||||
start_distance = calculate_distance(base_location, gps_data)
|
if base_location:
|
||||||
|
start_distance = calculate_distance(base_location, location)
|
||||||
|
else:
|
||||||
|
start_distance = None
|
||||||
except:
|
except:
|
||||||
print("Could not collect location")
|
print("Could not collect location")
|
||||||
start_distance = None
|
start_distance = None
|
||||||
|
@ -185,23 +188,11 @@ def collect_iperf(
|
||||||
print(f"Error running iperf3: {result.stderr}")
|
print(f"Error running iperf3: {result.stderr}")
|
||||||
return result.stderr
|
return result.stderr
|
||||||
|
|
||||||
try:
|
|
||||||
gps_data = read_gps_data()
|
|
||||||
end_distance = calculate_distance(base_location, gps_data)
|
|
||||||
except:
|
|
||||||
end_distance = None
|
|
||||||
|
|
||||||
matches = re.findall(
|
matches = re.findall(
|
||||||
r"\[\s*\d+\]\s+\d+\.\d+\-\d+\.\d+\s+sec\s+[\d.]+\s+\w+Bytes\s+([\d.]+)\s+(Kbits/sec|Mbits/sec)",
|
r"\[\s*\d+\]\s+\d+\.\d+\-\d+\.\d+\s+sec\s+[\d.]+\s+\w+Bytes\s+([\d.]+)\s+(Kbits/sec|Mbits/sec)",
|
||||||
output,
|
output,
|
||||||
)
|
)
|
||||||
|
|
||||||
def normalize(value: float, unit: str) -> float:
|
|
||||||
"""Convert all rates to Mbits/sec."""
|
|
||||||
if unit.lower().startswith("kbit"):
|
|
||||||
return value / 1000.0
|
|
||||||
return value
|
|
||||||
|
|
||||||
if len(matches) >= 1:
|
if len(matches) >= 1:
|
||||||
# Normalize the last entries
|
# Normalize the last entries
|
||||||
last_value, last_unit = matches[-1]
|
last_value, last_unit = matches[-1]
|
||||||
|
@ -223,7 +214,7 @@ def collect_iperf(
|
||||||
bitrates = re.findall(r"(\d+\.\d+) Mbits/sec", output)
|
bitrates = re.findall(r"(\d+\.\d+) Mbits/sec", output)
|
||||||
sender_bitrate = float(bitrates[-2])
|
sender_bitrate = float(bitrates[-2])
|
||||||
receiver_bitrate = float(bitrates[-1])
|
receiver_bitrate = float(bitrates[-1])
|
||||||
|
|
||||||
if "-R" in command:
|
if "-R" in command:
|
||||||
test_type = "downlink"
|
test_type = "downlink"
|
||||||
else:
|
else:
|
||||||
|
@ -234,16 +225,15 @@ def collect_iperf(
|
||||||
"sender_bitrate": sender_bitrate,
|
"sender_bitrate": sender_bitrate,
|
||||||
"receiver_bitrate": receiver_bitrate,
|
"receiver_bitrate": receiver_bitrate,
|
||||||
"start_distance": start_distance,
|
"start_distance": start_distance,
|
||||||
"end_distance": end_distance,
|
"location": location,
|
||||||
"type": test_type,
|
"type": test_type,
|
||||||
}
|
}
|
||||||
|
|
||||||
print(f"\n{test_type} IPERF complete")
|
print(f"\n{server_ip} {test_type} IPERF complete")
|
||||||
print(f"IPERF sender bitrate: {sender_bitrate}")
|
print(f"IPERF sender bitrate: {sender_bitrate}")
|
||||||
print(f"IPERF receiver bitrate: {receiver_bitrate}")
|
print(f"IPERF receiver bitrate: {receiver_bitrate}")
|
||||||
|
|
||||||
save_data_to_json(data=data, filename=filename)
|
save_data_to_json(data=data, filename=filename)
|
||||||
time.sleep(0.5)
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"iPerf Error: {e}")
|
print(f"iPerf Error: {e}")
|
||||||
|
@ -309,7 +299,7 @@ def collect_sierra_data(filename):
|
||||||
# Main function
|
# Main function
|
||||||
def main():
|
def main():
|
||||||
global running
|
global running
|
||||||
address = '10.46.0.1'
|
address = "10.46.0.1"
|
||||||
foldername = "data/boat_relay_sept_18"
|
foldername = "data/boat_relay_sept_18"
|
||||||
os.makedirs(foldername, exist_ok=True)
|
os.makedirs(foldername, exist_ok=True)
|
||||||
filename = foldername + "/test_" + str(int(time.time())) + ".json"
|
filename = foldername + "/test_" + str(int(time.time())) + ".json"
|
||||||
|
@ -338,20 +328,6 @@ def main():
|
||||||
elif command == "x":
|
elif command == "x":
|
||||||
running = False
|
running = False
|
||||||
break
|
break
|
||||||
elif command == "m":
|
|
||||||
base_location_data = set_base_location()
|
|
||||||
|
|
||||||
start_time = time.time()
|
|
||||||
data = get_current_location()
|
|
||||||
data["timestamp"] = time.time()
|
|
||||||
end_time = time.time()
|
|
||||||
|
|
||||||
print("Collected Data:")
|
|
||||||
pprint.pprint(data)
|
|
||||||
print(" ")
|
|
||||||
save_data_to_json(data=data, filename=filename)
|
|
||||||
print(f"Run time: {end_time - start_time}")
|
|
||||||
|
|
||||||
elif command not in ["l", "b", "s", "i", "x"]:
|
elif command not in ["l", "b", "s", "i", "x"]:
|
||||||
print("Invalid command. Type 'l', 'b', 's', 'i', or 'x'.")
|
print("Invalid command. Type 'l', 'b', 's', 'i', or 'x'.")
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,13 @@ def rssi_to_dbm(rssi):
|
||||||
return -113 + 2 * rssi
|
return -113 + 2 * rssi
|
||||||
|
|
||||||
|
|
||||||
|
def normalize(value: float, unit: str) -> float:
|
||||||
|
"""Convert all rates to Mbits/sec."""
|
||||||
|
if unit.lower().startswith("kbit"):
|
||||||
|
return value / 1000.0
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
# Save data to JSON file
|
# Save data to JSON file
|
||||||
def save_data_to_json(data, filename):
|
def save_data_to_json(data, filename):
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user