This patch adds APRS KISS connectivity. I have tested this with
a running Direwolf install via either a serial KISS connection or
the optional new TCPKISS connection, both to Direwolf.
This adds the new required aioax25 python library for the underlying
KISS and AX25 support.
NOTE: For the TCPKISS connection, this patch requires a pull request
patch the aioax25 library to include a TCP Based KISS TNC client to
enable the TCPKISS client So you will need to pull down this PR
https://github.com/sjlongland/aioax25/pull/7
To enable this,
Edit your aprsd.yml file and enable one of the 2 KISS connections.
Only one is supported at a time.
kiss:
serial:
enabled: True
device: /dev/ttyS1
baudrate: 9600
or
kiss:
tcp:
enabled: True
host: "ip address/hostname of direwolf"
port: "direwolf configured kiss port"
This patch alters the Message object classes to be able to
send messages out via the aprslib socket connection to the APRS-IS
network on the internet, or via the direwolf KISS TCP socket,
depending on the origination of the initial message coming in.
If an APRS message comes in via APRS-IS, then replies will go out
APRS-IS. IF an APRS message comes in via direwolf, then replies
will go out via direwolf KISS TCP socket. Both can work at the same
time.
TODO: I need some real APRS message packets to verify that
the new thread is processing packets correctly through the plugins
and able to send the resulting messages back out to direwolf.
Have a hard coded callsign for now in the kissclient consumer call,
just so I can see messages coming in from direwolf. I dont' have an
APRS capable radio at the moment to send messages directly to direwolf.
Might need to write a simple python socket server to send fake APRS
messages to aprsd kiss, just for finishing up development.
APRSD No longer follows the black code styling. Black just sucks
due to it's completely unreadable code for functions with long
parameter lists. This patch removes the code style badge from
the README.rst
Since all outbound messages have a send() method that starts
a separate there, there really is no reason for the transmit queue
thread at all. All it did was get a message from the queue and then
call send on it, which would start another thread. This removes that
intermediate TXThread. When you want to send a message just call
send() on the message object.
This patch updates the select timeouts for threads. This allows
threads to exit quicker when user hits CTRL-C.
Updates the KeepAlive Thread to include total packets.
This patch adds plugin rx/tx processing of packets.
This tracks how many messages a plugin processes (recieves) and
how many packets result in a plugin sending a message out.
This patch also adds a new plugins tab on the admin page.
This patch updates the APRSDPluginBase class to include
standard methods for allowing plugins to create, start, stop
threads that the plugin might need/use. Also update the aprsd-dev
to correctly start the threads and stop them for testing plugin
functionality.
Also added more unit tests and fake objects for unit tests.
This patch refactors how the recieved message processing happens.
We now handle all incoming packets the same. Removed the notification
thread to handle the watchlist packets. This is now done with a
unified plugins architecture that allows different capabilities
via the new plugin structure. All packets sent to us will be
sent through all of the plugins. It's the plugins job to decide what to
do with that packet or ignore it.
Email is no longer a special case for the most part. All email
functions have been migrated to the EmailPlugin, including starting the
EmailThread, which works in the background to check for new emails and
send those to the registered callsign. The EmailPlugin now starts the
EmailThread itself.
All plugins are now build on the new APRSDPluginBase which has a common
set of features. The APRSDPluginBase calls self.setup() upon creation,
which allows all plugins to do whatever they want for initiali startup.
The EmailPlugin uses setup() to start the EmailThread if email is
enabled.
This patch adds the ability for plugins to send multiple messages
back in response to a command/message. The plugin simple needs
to return a list of messages (Strings). Each string in that list
will result in a separate message being sent back to the originator
of the message.
This patch updates the Admin UI to display the APRS icon symbol
associated with a mic-e packet on the watch list tab for all
entries in the watch list.
This patch updates the notification thread to send all packets
through the notification plugins. The plugins themselves need to
do smart filter to not reply to every packet. This allows for
more interesting plugins.
Also fixed an issue with the messages tab in the admin ui, not
showing all of the recieved packets. The messages tab now also
sees all the packets that aprsd recieves.
This patch adds a new optional feature called Watch list.
Aprsd will filter IN all aprs packets from a list of callsigns.
APRSD will keep track of the last time a callsign has been seen.
When the configured timeout value has been reached, the next time
a callsign is seen, APRSD will send the next packet from that callsign
through the new notification plugins list.
The new BaseNotifyPlugin is the default core APRSD notify based plugin.
When it gets a packet it will construct a reply message to be sent
to the configured alert callsign to alert them that the seen callsign
is now on the APRS network.
This basically acts as a notification that your watched callsign list is
available on APRS.
The new configuration options:
aprsd:
watch_list:
# The callsign to send a message to once a watch list callsign
# is now seen on APRS-IS
alert_callsign: NOCALL
# The time in seconds to wait for notification.
# The default is 12 hours.
alert_time_seconds: 43200
# The list of callsigns to watch for
callsigns:
- WB4BOR
- KFART
# Enable/disable this feature
enabled: false
# The list of notify based plugins to load for
# processing a new seen packet from a callsign.
enabled_plugins:
- aprsd.plugins.notify.BaseNotifyPlugin
This patch also adds a new section in the Admin UI for showing the
watch list and the age of the last seen packet for each callsing since
APRSD startup.
This patch fixes a bug in the AckThread. The thread loop
was exiting after the first attempt to send the ack.
Thread loops have to return True, in order to be called again
as this is the mechanism in which aprsd gracefully shuts down all
threads.
This patch updates the admin UI to include 3 tabs
of content.
Charts
messages
config
The charts tab is the existing line charts.
The messages tab shows a list of RX (green) and TX (red) messages
from/to aprsd.
The config tab shows the config loaded at startup time.
This patch adds the dumping out of a flattened config to the log
at startup. This is helpful for seeing what aprsd server is actually
using for config entries at startup and since it's in the log, you can
reference it.
This patch adds a message counter for each plugin. When the regex for
a plugin passes and the message is pass into the plugin for processing,
that message is tracked. This message count is reported by the stats
tracking object now for the web admin ui.
This patch adds usage of update_checker to check to make sure the
version of APRSD being launched is the latest version. Also added a
call to upate_checker as part of the KeepAlive thread. It will
call update_check every hour. If there is no aprsd connectivitity,
the update check will silently fail.