/APRSAIR

Console App Detects DTMF GPS Signals or APRS AFSK1200 signals from radios (eg: Abbree AR-F8, Zastone ZT-889G) over soundcard and allow to view it over console, web (HTTP), APRS and send via HTTP-GET, TCP-APRS, UDP-APRS.

Primary LanguageC#MIT LicenseMIT

APRSAir / APRS Air

Console App Detects DTMF GPS Signals or APRS AFSK1200 signals from radios (eg: Abbree AR-F8, Zastone ZT-889G) over soundcard and allow to view it over console, web (HTTP), APRS and send via HTTP-GET, TCP-APRS, UDP-APRS.

Это консольное приложение, которое разбирает DTMF GPS пакеты от радиостанций (пакеты координат). К таким радиостанциям относятся Abbree AR-F8, Zastone ZT-889G и прочие. А также пакеты APRS AFSK1200. Оно позволяет прослушивать звуковую карту и преобразовывать полученные пакеты в текстовую строку, которая выводится в консоль, через веб-сервер, через APRS-сервер и может отправлять разобранные данные по сети средствами HTTP-GET, TCP-APRS, UDP-APRS на внешние сервера. Для прослушивания используются устройства аудиовхода (записи). Т.е. вы можете подключить вашу радиостанцию к линейному входу звуковой карты или к микрофонному входу и следить за эфиром. Либо подключить SDR-приемник и анализировать звук с него.

Приложение может работать в режиме веб-сервера, подключившись к которому можно получать информацию обо всех разобранных пакетах координат, а также в режиме APRS-сервера, отправляя всем клиентам стандартные APRS-пакеты с координатами радиостанций.

Также вы можете настроить отправку пакетов на внешний HTTP или APRS сервер.

Начиная с версии 0.0.1.5 приложение поддерживает прием пакетов APRS AFSK1200. Для этого используется параметр /afsk=.. (только в режимах /listen, либо /agw, либо /kiss)

Начиная с версии 0.0.1.15 приложение умеет работать по KISS/AGW протоколу. Вы можете подключиться к AGW Packet Engine или напрямую через KISS к TNC по TCP/IP или через Serial COM Port и получать APRS-пакеты из эфира. Для этого используется параметр /age, либо /kiss

Рекомендуемые значения для настройки DTMF в радиостанции: DTMF Transmit time: 160 - 200 ms (200 ms наверняка) DTMF Interval time: 130 - 200 ms (200 ms наверняка) 6-тизначный ANI CODE !!!

Запуск в тестовом режиме (проверка работоспособности DTMF):

APRSAIR.exe

Получение списка звуковых устройств ввода (записи DTMF/AFSK1200):

APRSAIR.exe /listrecorddevices
APRSAIR_List_input_devices.cmd

Преобразование пакета (строки) в звуковой сигнал DTMF:

APRSAIR.exe /encode "[PACKET]" "[FILE.WAV]"
APRSAIR.exe /encode "926801  B0B  023C#7B0  034#A030  00198000" "encoded_file.wav"
packet_to_dtmf.cmd

APRSAIR.exe /encgeo "CALLID B0B LAT.XX LON.XX ALTITUDE" "[FILE.WAV]"
APRSAIR.exe /encgeo "926801 B0B 55.5 37.5 00198000" "encoded_file.wav"
geo_to_dtmf.cmd

Преобразование звукового сигнала DTMF из файла в текст (файл):

APRSAIR.exe /decode "[FILE.WAV]"
APRSAIR.exe /decode "encoded_file.wav"

APRSAIR.exe /decode "[FILE.WAV]" "[FILE.TXT]"
APRSAIR.exe /decode "encoded_file.wav" "original_packet.txt"
APRSAIR_to_packet.cmd

APRSAIR.exe /decgeo "encoded_file.wav" "original_packet.txt"
APRSAIR.exe /decgeo "encoded_file.wav" "original_packet.txt"	
APRSAIR_to_geo.cmd

Преобразование APRS пакета (строки) в звуковой сигнал AFSK1200:

APRSAIR.exe /encaprs "[PACKET]" "[FILE.WAV]"
APRSAIR.exe /encaprs "ZADIRA>APRS,WIDE1-1,WIDE2-2:=5539.03N/03729.50EM275/029" "test_APRS_result.wav"
APRSAIR_Encode_APRS.cmd

Преобразование APRS пакета (файла со списком комманд) в звуковой сигнал AFSK1200:

APRSAIR.exe /encaprsf "[PACKET.TXT]" "[FILE.WAV]"
APRSAIR.exe /encaprsf "TEST_APRS_multiline.txt" "TEST_APRS_multiline.wav"
APRSAIR_Encode_APRS_Multiline.cmd

Преобразование звукового сигнала AFSK1200 из файла в APRS пакет (файл):

APRSAIR.exe /decaprs "[FILE.WAV]"
APRSAIR.exe /decaprs "test_APRS_result.wav"

APRSAIR.exe /decode "[FILE.WAV]" "[FILE.TXT]"
APRSAIR.exe /decode "test_APRS_result.wav" "test_APRS_result.txt"
APRSAIR_Decode_APRS.cmd

Работа в режиме прослушки аудиокарты (потоковый режим):

APRSAIR.exe /listen /source=1 [/afsk=0] [/send="..."] [/aprs="tcp://.../"] [/aprs="udp://.../"] [/httpserv=80] [/aprsserv=14580] [/nogps2console] [/useNormalPassw] [/serverName="..."]

Параметры:
	/listen - задаем режим работы
	/source=... - с какого аудиоустройства в системе слушать аудиопоток (0,1,2...)
		          используйте /listrecorddevices для получения списка устройств 
				  (Record Devices)
	/afsk=... c какой карты в системе слушать аудиопоток (0,1,2...) 
				  для анализа APRS AFSK1200 сигнала
				  используйте /listrecorddevices для получения списка устройств 
				  (AFSK Devices)
	/send="http://..." - отправлять координаты по ссылке
		 ="http://127.0.0.1/?user={ID}&lat={LAT}&lon={LON}&alt={ALT}"
	/aprs="tcp://..." - держать коннект с APRS-IS сервером и отправлять ему координаты
		 ="tcp://username:password@servername:serverport/"
		 ="tcp://callsign:password@euro.aprs2.net:14580"
	/aprs="udp://..." - оптравлять данные на APRS-IS сервер через UDP
		 ="udp://username:password@servername:serverport/" - оптравлять данные на APRS-IS сервер через UDP
		 ="udp://callsign:password@russia.aprs2.net:8080" - оптравлять данные на APRS-IS сервер через UDP
	/httpserv=80 - веб сервер на порту 80 для вывода информации о принятых координатах (с картой)
	/aprsserv=14580 - APRS сервер на порту 14580 для вывода информации о принятых координатах
	/nogps2console - не выводится GPS информация в консоль
	/serverName="HTTP & APRS Server Name" - имя сервера
	/useNormalPassw - использовать правильный пароль APRS для отправки данных через UDP (только через UDP!)

	Из файла `users_replace_list.txt` берется список соответствия CALLSIGN и ANI_ID
	Из файла `\WEB\index.html` берется ответ HTTP сервера
	Из папки `\WEB` берется карта и ответ HTTP сервера

Пример:
	APRSAIR.exe /listen /source=1 /send="http://127.0.0.1/?user={ID}&lat={LAT}&lon={LON}&alt={ALT}" /aprs="tcp://UNKNOWN:-1@russia.aprs2.net:14580/" /aprs="udp://UNKNOWN:-1@russia.aprs2.net:8080"  /httpserv=80 /aprsserv=14580 /serverName="My APRSAIR"

Пример:
	APRSAIR_Run_as_WaveListener.cmd

Работа в режиме клиента KISS/AGW:
KISS/AGW Listen Mode:

APRSAIR.exe /agw /source=127.0.0.1:8000:0 [/afsk=0] [/send="..."] [/aprs="tcp://.../"] [/aprs="udp://.../"] [/httpserv=80] [/aprsserv=14580] [/nogps2console] [/useNormalPassw] [/serverName="..."]
APRSAIR.exe /kiss /source=127.0.0.1:8100 [/afsk=0] [/send="..."] [/aprs="tcp://.../"] [/aprs="udp://.../"] [/httpserv=80] [/aprsserv=14580] [/nogps2console] [/useNormalPassw] [/serverName="..."]
APRSAIR.exe /kiss /source=COM3:9600 [/afsk=0] [/send="..."] [/aprs="tcp://.../"] [/aprs="udp://.../"] [/httpserv=80] [/aprsserv=14580] [/nogps2console] [/useNormalPassw] [/serverName="..."]

Параметры:
	/agw  - задаем режим работы AGW
	/kiss - задаем режим работы KISS
	/source=... - server:port:radio для AGW (например: 127.0.0.1:8000:0) где radio - порт/номер радио в AGW Packet Engine
	            - server:port для Kiss через TCP/IP (например: 127.0.0.1:8100)
		    - serial:baud для Kiss через COM (например: COM3:9600)
	/afsk=... c какой карты в системе слушать аудиопоток (0,1,2...) 
				  для анализа APRS AFSK1200 сигнала
				  используйте /listrecorddevices для получения списка устройств 
				  (AFSK Devices)
	/send="http://..." - отправлять координаты по ссылке
		 ="http://127.0.0.1/?user={ID}&lat={LAT}&lon={LON}&alt={ALT}"
	/aprs="tcp://..." - держать коннект с APRS-IS сервером и отправлять ему координаты
		 ="tcp://username:password@servername:serverport/"
		 ="tcp://callsign:password@euro.aprs2.net:14580"
	/aprs="udp://..." - оптравлять данные на APRS-IS сервер через UDP
		 ="udp://username:password@servername:serverport/" - оптравлять данные на APRS-IS сервер через UDP
		 ="udp://callsign:password@russia.aprs2.net:8080" - оптравлять данные на APRS-IS сервер через UDP
	/httpserv=80 - веб сервер на порту 80 для вывода информации о принятых координатах (с картой)
	/aprsserv=14580 - APRS сервер на порту 14580 для вывода информации о принятых координатах
	/nogps2console - не выводится GPS информация в консоль
	/serverName="HTTP & APRS Server Name" - имя сервера
	/useNormalPassw - использовать правильный пароль APRS для отправки данных через UDP (только через UDP!)

	Из файла `users_replace_list.txt` берется список соответствия CALLSIGN и ANI_ID
	Из файла `\WEB\index.html` берется ответ HTTP сервера
	Из папки `\WEB` берется карта и ответ HTTP сервера
	
Примеры:
	APRSAIR.exe /agw /source=127.0.0.1:8000:0 /send="http://127.0.0.1/?user={ID}&lat={LAT}&lon={LON}&alt={ALT}" /aprs="tcp://UNKNOWN:-1@russia.aprs2.net:14580/" /aprs="udp://UNKNOWN:-1@russia.aprs2.net:8080"  /httpserv=80 /aprsserv=14580 /serverName="My APRSAIR"
	
	APRSAIR.exe /kiss /source=127.0.0.1:8100 /send="http://127.0.0.1/?user={ID}&lat={LAT}&lon={LON}&alt={ALT}" /aprs="tcp://UNKNOWN:-1@russia.aprs2.net:14580/" /aprs="udp://UNKNOWN:-1@russia.aprs2.net:8080"  /httpserv=80 /aprsserv=14580 /serverName="My APRSAIR"
	
	APRSAIR.exe /kiss /source=COM3:9600 /send="http://127.0.0.1/?user={ID}&lat={LAT}&lon={LON}&alt={ALT}" /aprs="tcp://UNKNOWN:-1@russia.aprs2.net:14580/" /aprs="udp://UNKNOWN:-1@russia.aprs2.net:8080"  /httpserv=80 /aprsserv=14580 /serverName="My APRSAIR"
	
Примеры:
	APRSAIR_Run_AGW.cmd
	APRSAIR_Run_KISS_TCP.cmd