apirc/aprs.py

53 lines
1.6 KiB
Python
Raw Normal View History

2023-07-22 03:50:13 +03:00
#!/usr/bin/env python3
import asyncio
import logging
import os
import irc.client
import irc.client_aio
from ax253 import Frame
import kiss
2023-07-22 04:00:50 +03:00
import aprslib
2023-07-22 03:50:13 +03:00
MYCALL = os.environ.get("MYCALL", "N0CALL")
KISS_HOST = os.environ.get("KISS_HOST", "10.10.10.91")
KISS_PORT = os.environ.get("KISS_PORT", "8001")
server = os.environ.get('IRC_HOST', "irc.dead.guru")
port = int(os.environ.get('IRC_PORT', 6697))
channel = os.environ.get('CHANNEL_NAME', "#spau")
nickname = os.environ.get('BOT_NICK', "aprsbot")
logger = logging.getLogger(__name__)
2023-07-22 04:00:50 +03:00
logging.basicConfig(level=logging.DEBUG) ## TODO: Make logging level configurable
2023-07-22 03:50:13 +03:00
async def main():
2023-07-22 03:53:20 +03:00
logger.info(f"Connecting to {server}:{port} as {nickname}")
2023-07-22 03:50:13 +03:00
loop = asyncio.get_event_loop()
2023-07-22 03:53:20 +03:00
irc_client = await irc.client_aio.AioReactor(loop=loop).server().connect(
server, port, nickname, connect_factory=irc.connection.AioFactory(ssl=True) ## TODO: Make SSL optional and add password support
2023-07-22 03:50:13 +03:00
)
2023-07-22 03:53:20 +03:00
logger.info(f"Connected to {server}:{port} as {nickname}")
2023-07-22 03:50:13 +03:00
transport, kiss_protocol = await kiss.create_tcp_connection(
host=KISS_HOST,
port=KISS_PORT,
loop=loop,
)
2023-07-22 03:53:20 +03:00
irc_client.privmsg(channel, '[APRS] Starting...')
2023-07-22 03:50:13 +03:00
async for frame in kiss_protocol.read():
2023-07-22 04:00:50 +03:00
try:
packet = aprslib.parse(str(frame))
except (aprslib.ParseError, aprslib.UnknownFormat) as exp:
pass
## TODO: Build APRS message from packet
2023-07-22 03:53:20 +03:00
logger.debug(f"Received frame: {frame}")
irc_client.privmsg(channel, str(frame)) ## TODO: Parse frame and send to channel
2023-07-22 03:50:13 +03:00
if __name__ == "__main__":
asyncio.run(main())