From b6e54cf28c51ea123c001fb715984b53da7dafc6 Mon Sep 17 00:00:00 2001 From: Zach Date: Tue, 20 Apr 2021 08:38:02 -0400 Subject: [PATCH 01/10] minor fixes --- packetraven/__main__.py | 8 ++++---- packetraven/predicts.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packetraven/__main__.py b/packetraven/__main__.py index 43bd03a3..013cefe0 100644 --- a/packetraven/__main__.py +++ b/packetraven/__main__.py @@ -410,10 +410,6 @@ def main(): sys.exit(0) -if __name__ == '__main__': - main() - - def retrieve_packets( connections: [PacketSource], packet_tracks: [LocationPacketTrack], @@ -534,3 +530,7 @@ def retrieve_packets( connections.pop(output_filename_index) return new_packets + + +if __name__ == '__main__': + main() diff --git a/packetraven/predicts.py b/packetraven/predicts.py index ce6fe58a..68b3a1d2 100644 --- a/packetraven/predicts.py +++ b/packetraven/predicts.py @@ -461,7 +461,7 @@ def get_predictions( prediction = prediction_query.predict if packet_track.time_to_ground >= timedelta(seconds=0): - LOGGER.info(f'predicted landing location: {prediction.coordinates[-1]}') + LOGGER.info(f'"{packet_track.name}" predicted landing location: {prediction.coordinates[-1]}') prediction_tracks[name] = prediction From bd8e6c3f1f7014bd9be14a8adb5c19057c5b68d4 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 8 May 2021 18:00:28 -0400 Subject: [PATCH 02/10] add KISS --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 7fc701dc..38e9e393 100644 --- a/setup.py +++ b/setup.py @@ -88,6 +88,7 @@ install_requires=[ 'aprslib', 'haversine', + 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From 9d38bfb2f6443e376aa07fa12ba19ccc21c5e4b8 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 8 May 2021 18:00:28 -0400 Subject: [PATCH 03/10] add KISS --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 9c62e008..0085369a 100644 --- a/setup.py +++ b/setup.py @@ -89,6 +89,7 @@ 'aprslib', 'haversine', 'humanize', + 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From 36bec227c06d5807673ce82df977f26716ef23a3 Mon Sep 17 00:00:00 2001 From: Zach Date: Thu, 27 May 2021 14:02:33 -0400 Subject: [PATCH 04/10] current code --- packetraven/connections/serial.py | 68 ++++++++++++++++++++++++++++--- setup.py | 1 - 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/packetraven/connections/serial.py b/packetraven/connections/serial.py index 0a0de7cf..f3d224ca 100644 --- a/packetraven/connections/serial.py +++ b/packetraven/connections/serial.py @@ -1,5 +1,7 @@ +from abc import ABC from datetime import datetime +from kiss import KISS from serial import Serial from packetraven.connections.base import ( @@ -9,17 +11,22 @@ next_open_serial_port, ) from packetraven.packets import APRSPacket +from packetraven.packets.parsing import InvalidPacketError -class SerialTNC(APRSPacketSource): - def __init__(self, serial_port: str = None, callsigns: [str] = None): +class SerialAPRSConnection(APRSPacketSource, ABC): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): """ - Connect to TNC over given serial port. + Connect to a given serial port. :param serial_port: port name :param callsigns: list of callsigns to return from source + :param baudrate: baud rate of serial communication """ + if baudrate is None: + baudrate = 9600 + if serial_port is None or serial_port == '' or serial_port == 'auto': try: serial_port = next_open_serial_port() @@ -28,8 +35,19 @@ def __init__(self, serial_port: str = None, callsigns: [str] = None): else: serial_port = serial_port.strip('"') - self.serial_connection = Serial(serial_port, baudrate=9600, timeout=1) - super().__init__(self.serial_connection.port, callsigns) + super().__init__(serial_port, callsigns) + + self.__baudrate = baudrate + + @property + def baudrate(self) -> int: + return self.__baudrate + + +class SerialTNC(SerialAPRSConnection): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): + super().__init__(serial_port, callsigns, baudrate) + self.serial_connection = Serial(port=self.location, baudrate=self.baudrate, timeout=1) self.__last_access_time = None @property @@ -57,3 +75,43 @@ def close(self): def __repr__(self): return f'{self.__class__.__name__}({repr(self.location)}, {repr(self.callsigns)})' + + +class SerialKISS(APRSPacketSource): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): + super().__init__(serial_port, callsigns, baudrate) + self.serial_connection = KISS(port=self.location, speed=self.baudrate, timeout=1) + self.__last_access_time = None + + @property + def packets(self) -> [APRSPacket]: + if self.__last_access_time is not None and self.interval is not None: + interval = datetime.now() - self.__last_access_time + if interval < self.interval: + raise TimeIntervalError( + f'interval {interval} less than minimum interval {self.interval}' + ) + + packets = [] + + def add_frames(frame: str): + try: + packet = APRSPacket.from_frame(frame) + if self.callsigns is not None: + if packet.from_callsign in self.callsigns: + if packet not in packets: + packets.append(packet) + except InvalidPacketError: + pass + + self.serial_connection.start() + self.serial_connection.read(callback=add_frames, readmode=False) + + self.__last_access_time = datetime.now() + return packets + + def close(self): + self.serial_connection.stop() + + def __repr__(self): + return f'{self.__class__.__name__}({repr(self.location)}, {repr(self.callsigns)})' diff --git a/setup.py b/setup.py index 0085369a..9c62e008 100644 --- a/setup.py +++ b/setup.py @@ -89,7 +89,6 @@ 'aprslib', 'haversine', 'humanize', - 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From 76770444f61a847d10bd647131a3dbdebe6414ce Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 8 May 2021 18:00:28 -0400 Subject: [PATCH 05/10] add KISS --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 0c4d1bc6..04cbe861 100644 --- a/setup.py +++ b/setup.py @@ -89,6 +89,7 @@ 'aprslib', 'haversine', 'humanize', + 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From 071abd5b1130e9aabd3e612237797ef43af21d63 Mon Sep 17 00:00:00 2001 From: Zach Date: Thu, 27 May 2021 14:02:33 -0400 Subject: [PATCH 06/10] current code --- packetraven/connections/serial.py | 68 ++++++++++++++++++++++++++++--- setup.py | 1 - 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/packetraven/connections/serial.py b/packetraven/connections/serial.py index 567e8b67..c748ec82 100644 --- a/packetraven/connections/serial.py +++ b/packetraven/connections/serial.py @@ -1,5 +1,7 @@ +from abc import ABC from datetime import datetime +from kiss import KISS from serial import Serial from packetraven.connections.base import ( @@ -9,17 +11,22 @@ TimeIntervalError, ) from packetraven.packets import APRSPacket +from packetraven.packets.parsing import InvalidPacketError -class SerialTNC(APRSPacketSource): - def __init__(self, serial_port: str = None, callsigns: [str] = None): +class SerialAPRSConnection(APRSPacketSource, ABC): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): """ - Connect to TNC over given serial port. + Connect to a given serial port. :param serial_port: port name :param callsigns: list of callsigns to return from source + :param baudrate: baud rate of serial communication """ + if baudrate is None: + baudrate = 9600 + if serial_port is None or serial_port == '' or serial_port == 'auto': try: serial_port = next_open_serial_port() @@ -28,8 +35,19 @@ def __init__(self, serial_port: str = None, callsigns: [str] = None): else: serial_port = serial_port.strip('"') - self.serial_connection = Serial(serial_port, baudrate=9600, timeout=1) - super().__init__(self.serial_connection.port, callsigns) + super().__init__(serial_port, callsigns) + + self.__baudrate = baudrate + + @property + def baudrate(self) -> int: + return self.__baudrate + + +class SerialTNC(SerialAPRSConnection): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): + super().__init__(serial_port, callsigns, baudrate) + self.serial_connection = Serial(port=self.location, baudrate=self.baudrate, timeout=1) self.__last_access_time = None @property @@ -57,3 +75,43 @@ def close(self): def __repr__(self): return f'{self.__class__.__name__}({repr(self.location)}, {repr(self.callsigns)})' + + +class SerialKISS(APRSPacketSource): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): + super().__init__(serial_port, callsigns, baudrate) + self.serial_connection = KISS(port=self.location, speed=self.baudrate, timeout=1) + self.__last_access_time = None + + @property + def packets(self) -> [APRSPacket]: + if self.__last_access_time is not None and self.interval is not None: + interval = datetime.now() - self.__last_access_time + if interval < self.interval: + raise TimeIntervalError( + f'interval {interval} less than minimum interval {self.interval}' + ) + + packets = [] + + def add_frames(frame: str): + try: + packet = APRSPacket.from_frame(frame) + if self.callsigns is not None: + if packet.from_callsign in self.callsigns: + if packet not in packets: + packets.append(packet) + except InvalidPacketError: + pass + + self.serial_connection.start() + self.serial_connection.read(callback=add_frames, readmode=False) + + self.__last_access_time = datetime.now() + return packets + + def close(self): + self.serial_connection.stop() + + def __repr__(self): + return f'{self.__class__.__name__}({repr(self.location)}, {repr(self.callsigns)})' diff --git a/setup.py b/setup.py index 04cbe861..0c4d1bc6 100644 --- a/setup.py +++ b/setup.py @@ -89,7 +89,6 @@ 'aprslib', 'haversine', 'humanize', - 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From 54ad311c060fc818ddd93e4fcfb2a527140bed85 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 8 May 2021 18:00:28 -0400 Subject: [PATCH 07/10] add KISS --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 0c4d1bc6..04cbe861 100644 --- a/setup.py +++ b/setup.py @@ -89,6 +89,7 @@ 'aprslib', 'haversine', 'humanize', + 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From fc026d317f88918261d101c4e44c0f6c5e9b5308 Mon Sep 17 00:00:00 2001 From: Zach Date: Thu, 27 May 2021 14:02:33 -0400 Subject: [PATCH 08/10] current code --- packetraven/connections/serial.py | 68 ++++++++++++++++++++++++++++--- setup.py | 1 - 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/packetraven/connections/serial.py b/packetraven/connections/serial.py index 567e8b67..c748ec82 100644 --- a/packetraven/connections/serial.py +++ b/packetraven/connections/serial.py @@ -1,5 +1,7 @@ +from abc import ABC from datetime import datetime +from kiss import KISS from serial import Serial from packetraven.connections.base import ( @@ -9,17 +11,22 @@ TimeIntervalError, ) from packetraven.packets import APRSPacket +from packetraven.packets.parsing import InvalidPacketError -class SerialTNC(APRSPacketSource): - def __init__(self, serial_port: str = None, callsigns: [str] = None): +class SerialAPRSConnection(APRSPacketSource, ABC): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): """ - Connect to TNC over given serial port. + Connect to a given serial port. :param serial_port: port name :param callsigns: list of callsigns to return from source + :param baudrate: baud rate of serial communication """ + if baudrate is None: + baudrate = 9600 + if serial_port is None or serial_port == '' or serial_port == 'auto': try: serial_port = next_open_serial_port() @@ -28,8 +35,19 @@ def __init__(self, serial_port: str = None, callsigns: [str] = None): else: serial_port = serial_port.strip('"') - self.serial_connection = Serial(serial_port, baudrate=9600, timeout=1) - super().__init__(self.serial_connection.port, callsigns) + super().__init__(serial_port, callsigns) + + self.__baudrate = baudrate + + @property + def baudrate(self) -> int: + return self.__baudrate + + +class SerialTNC(SerialAPRSConnection): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): + super().__init__(serial_port, callsigns, baudrate) + self.serial_connection = Serial(port=self.location, baudrate=self.baudrate, timeout=1) self.__last_access_time = None @property @@ -57,3 +75,43 @@ def close(self): def __repr__(self): return f'{self.__class__.__name__}({repr(self.location)}, {repr(self.callsigns)})' + + +class SerialKISS(APRSPacketSource): + def __init__(self, serial_port: str = None, callsigns: [str] = None, baudrate: int = None): + super().__init__(serial_port, callsigns, baudrate) + self.serial_connection = KISS(port=self.location, speed=self.baudrate, timeout=1) + self.__last_access_time = None + + @property + def packets(self) -> [APRSPacket]: + if self.__last_access_time is not None and self.interval is not None: + interval = datetime.now() - self.__last_access_time + if interval < self.interval: + raise TimeIntervalError( + f'interval {interval} less than minimum interval {self.interval}' + ) + + packets = [] + + def add_frames(frame: str): + try: + packet = APRSPacket.from_frame(frame) + if self.callsigns is not None: + if packet.from_callsign in self.callsigns: + if packet not in packets: + packets.append(packet) + except InvalidPacketError: + pass + + self.serial_connection.start() + self.serial_connection.read(callback=add_frames, readmode=False) + + self.__last_access_time = datetime.now() + return packets + + def close(self): + self.serial_connection.stop() + + def __repr__(self): + return f'{self.__class__.__name__}({repr(self.location)}, {repr(self.callsigns)})' diff --git a/setup.py b/setup.py index 04cbe861..0c4d1bc6 100644 --- a/setup.py +++ b/setup.py @@ -89,7 +89,6 @@ 'aprslib', 'haversine', 'humanize', - 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From 882ccfb9519d9825d3562564094d84182435f1a3 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 8 May 2021 18:00:28 -0400 Subject: [PATCH 09/10] add KISS --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 0c4d1bc6..04cbe861 100644 --- a/setup.py +++ b/setup.py @@ -89,6 +89,7 @@ 'aprslib', 'haversine', 'humanize', + 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial', From c0ff53d8ee603547f864bed7d639e3eff3b3175c Mon Sep 17 00:00:00 2001 From: Zach Date: Thu, 27 May 2021 14:02:33 -0400 Subject: [PATCH 10/10] current code --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index 04cbe861..0c4d1bc6 100644 --- a/setup.py +++ b/setup.py @@ -89,7 +89,6 @@ 'aprslib', 'haversine', 'humanize', - 'kiss', 'numpy>=1.20.0', 'pandas', 'pyserial',