Project Description
I am building a tracking & telemetry system for a stratospheric balloon that broadcasts an APRS message via a 433MHz LoRa transmitter (SX-1278 chip). To test the components and architecture, I wrote some code to send an APRS message from a Raspberry Pi via LoRa to an APRS LoRa I-Gate at my house. I hear the device transmitting, but I do not see the message appear on APRS.fi.
Some Background
Automatic position reporting system (APRS) is a packet communications protocol for disseminating live data to everyone on a network in real time. At the link level, APRS uses the AX.25 protocol utilizing Unnumbered Information (UI) frames exclusively.

The field specifications are (as directed by the APRS protocol):

This information was sourced from the APRS protocol guide, page 12, accessible at: http://www.aprs.org/doc/APRS101.PDF
The APRS network broadcasts on 144.39 MHz in the US. However, there is a growing community of operators using the LoRa frequency of 433.775 MHz (consistent across the globe) to send and receive APRS signals. The APRS network relies on a series of ground stations (digipeaters and I-Gates) that will receive and transmit these messages. The I-Gates will receive an APRS message and upload it to the APRS-IS service. A map of these stations can be found on aprs.fi and a list of raw messages uploaded are shown at: https://aprs.fi/?c=raw&call=
To ensure I had the required physical layer to receive the APRS messages, I setup a LoRa I-Gate using a LILYGO TTGO operating at 433.775 MHz following the instructions listed here https://www.lora-aprs.info/docs/LoRa_APRS_iGate/quick-start-guide/ with my tracker visible here https://lora.ham-radio-op.net/views/search.php?imperialUnits=1&q=KW5AUS-1&seconds=0¢er=30.3939,-86.5929&zoom=12
Question
Since the physical layer seems to be setup correctly, the core challenge is structuring the data appropriately and then transmitting it in the proper format to be recognized and decoded by the iGate.
This takes us back to the start of our discussion: how do we use the sx1278 to broadcast a properly-formatted APRS message so that it is received? Is this code properly formatting the message? If not, what is missing? Is the SX1278 somehow interfering with the code?
This is the code that I built: https://github.com/strobesactual/SABER_/blob/main/LoRa_APRS_3.py
Finally, I am new to Python and coding in general so thank you for your patience!
Update
Thank you Hobbs for the recommendation to add the headers and then the text. I made the changes, but still am not seeing the message pop up on the I-Gate. Could this be an issue with the SX1278 library I am using (LoRaRF https://pypi.org/project/LoRaRF/) where it is adding Headers and sync words? Here is the code (please keep in mind that a transmission is happening but something is happening where the signal is somehow not formatted properly): lora_frame = ( f"{SOURCE_ADDRESS}-{SOURCE_SSID}>{DEST_ADDRESS},{PATH_ADDRESS}-{PATH_SSID}!{'Hello World'}" )
byteframe = lora_frame.encode('utf-8')
message_list = list(byteframe)
LoRa.beginPacket()
LoRa.write(0x3C)
LoRa.write(0xFF)
LoRa.write(0x01)
LoRa.write(message_list, len(message_list))
LoRa.write([tx_counter], 1)
LoRa.endPacket()
LoRa.wait()
And the Transceiver setup:
LoRa.setSpi(0, 0, 7800000)
LoRa.setPins(22, 23)
LoRa.begin()
LoRa.setTxPower(17, LoRa.TX_POWER_PA_BOOST)
LoRa.setRxGain(LoRa.RX_GAIN_POWER_SAVING, LoRa.RX_GAIN_AUTO)
LoRa.setFrequency(433775000)
LoRa.setSpreadingFactor(12)
LoRa.setBandwidth(125000)
LoRa.setCodeRate(5)
LoRa.setLoRaPacket(LoRa.HEADER_EXPLICIT, 12, 15, True, False)
LoRa.setSyncWord(0x3444)
Thank you all again for your gracious help.