Радиоэфир > SDR
Киевский Боливар
UR1229SWL:
Всем доброго здравия! :smilie:
Замечательно, что этот форум. наконец, начал нормально работать, а то раньше, сколько не пытался, регистрация на нем была невозможной, и пришлось еще в прошлом году открыть одноименную тему здесь.
Итак, приглашаю всех радиоаматоров на Web-SDR-приемник под названием "Киевский Боливар", находящийся адресу: http://kiev.extmail.info
Проект существует около года и претерпел множество изменений в своем развитии.
На данный момент он принимает 6 диапазонов: радиолюбительские VHF, UHF и Avia.
В ближайшей перспективе число диапазонов с общей помощью планируется довести до 9 (а то и до 10) и снабдить диапазонными фильтрами.
Помощь может быть разнообразной, начиная с пожеланий по выбору диапазонов и т.д., которые можно изложить в опросе в "телеграммной" группе
--- End quote ---
Ваши пожелания и замечания, которые можно публиковать также и в этой же теме, по возможности будут учтены.
73! :wink:
UT3UDX:
проверка данных по репитеру в APRS
--- Код: ---def aprs_request(callsign):
aprs_apikey="apikey"
apiurl = "https://api.aprs.fi/api/get?name="+ str(callsign) + "&what=loc&apikey=" + str(aprs_apikey) + "&format=json"
apireq = requests.get(apiurl)
apidata = json.loads(apireq.text)
print("-"*10 + "> | APRS data" )
if not apidata['entries']:
print("Warning: No APRS data found")
else:
for i in apidata['entries']:
print("| APRS Name: " + str(i['name']) + "\n" +
"| APRS Lat: " + str(i['lat']) + "\n" +
"| APRS Lng: " + str(i['lng']) + "\n" +
"| Lasttime seen: " + datetime.utcfromtimestamp(int(i['lasttime'])).strftime('%Y-%m-%d %H:%M:%S') + "\n" +
"| Comment: " + str(i['comment']))
time.sleep(15)
--- End code ---
Не все репитеры есть в APRS.
Вывод примерно такой
--- Код: ---===============| UR0UUA |===================================
----------> | APRS data
| APRS Name: UR0UUA
| APRS Lat: 50.42333
| APRS Lng: 30.46367
| Lasttime seen: 2021-03-26 17:27:39
| Comment: 439.375MHz -760 T067 R99
===============| UR0UUB |===================================
----------> | APRS data
| APRS Name: UR0UUB
| APRS Lat: 50.391
| APRS Lng: 30.4805
| Lasttime seen: 2021-03-26 17:23:34
| Comment: 439.400MHz-760 DMR CC1 R100
===============| UR0UUD |===================================
----------> | APRS data
| APRS Name: UR0UUD
| APRS Lat: 50.44533
| APRS Lng: 30.5045
| Lasttime seen: 2021-03-26 17:24:50
| Comment: 438.700MHz D023 -7.60 http://cb.org.ua
===============| UR0UUE |===================================
----------> | APRS data
| APRS Name: UR0UUE
| APRS Lat: 50.44517
| APRS Lng: 30.50533
| Lasttime seen: 2021-03-26 17:25:51
| Comment: 438.775MHz -7.60 DMR CC1 http://cb.org.ua
--- End code ---
UR1229SWL:
Приветствую, UT3UDX!
Как я могу воспользоватся вашими данными для Боливара?
Или они предназначены не для него ?
UT3UDX:
Это простой скрипт на Python3, точнее просто функция - что она делает - на вход этой функции, в качестве аргумента передается позывной, любой позывной , данные по которому мы хотим получить в APRS
https://www.aprsdirect.com/center/50.39189,30.65014/zoom/11/time/60
https://aprs.fi/#!lat=50.4334&lng=30.5216
Далее, запрашиваем APRS API ( не чаще раз в 15-20 секунд, иначе сработает rate limit и api будет возвращать или пустую строку или какой-то http ответ , типа доступ запрещен )
--- Код: --- apiurl = "https://api.aprs.fi/api/get?name="+ str(callsign) + "&what=loc&apikey=" + str(aprs_apikey) + "&format=json"
--- End code ---
URL формируется из нескольких частей - callsign, apikey и формат - в нашем случае json .
далее, нам нужен список репитеров для опроса - тут все очень просто - согласно регламенту радиосвязи, если отбросить всё лишнее - репитеров в каждой области ( в каждом диапазоне ) не может быть больше, чем букв в английском алфавите.
Цитирую регламент - " 4. Для ретрансляторів аматорського радіозв'язку позивні сигнали призначаються із серії UR0 в алфавітному порядку суфіксів.
Перша літера суфікса обов'язково повинна відповідати літері-ознаці області згідно з таблицею 1, а друга літера суфікса позивного
сигнала визначає смугу частот, у якій працює ретранслятор (V-діапазон 145 МГц; U-діапазон 435 МГц)."
https://zakon.rada.gov.ua/laws/show/z0205-11#Text
UR0 + U( Киев ) + U ( 70 cм ) или V (2 м) , тоесть что мы имеем -
UR0UUA-UR0UUZ для 70 сантиметрового диапазона и
UR0UVA-UR0UVZ для 2-х метрового диапазона , вобщем не так и много.
Далее, вам нужно получить APRS API key ( https://aprs.fi/account/ ) - это ключ, при помощи которого вы будете делать запросы к APRS api.
Я не помню, нужен ли валидный позывной для этого или нет - это вы уже проверите сами.
Итак файлы, их два - сам скрипт и конфиг
openwebrx_aprs.py
--- Код: ---#!/bin/python3
import re, requests, sys, string,json,time,datetime
import configparser
from datetime import datetime # for convert APRS time
letters = list(string.ascii_uppercase)
digits = list(string.digits)
config = configparser.ConfigParser()
config.read('config.ini')
dict_callsigns = {'Крим':'J', 'Вінницька':'N', 'Волинська':'P', 'Дніпропетровська':'E',
'Житомирська':'X','Закарпатська':'D', 'Запорізька':'Q','Івано - Франківська':'S',
'Київ':'U','Кіровоградська':'V','Львівська':'W', 'Миколаївська':'Z','Одеська':'F',
'Полтавська':'H','Рівненська':'K','Сумська':'A','Тернопільська':'B','Харківська':'L',
'Херсонська':'G','Хмельницька':'T','Черкаська':'C','Чернівецька':'Y','Чернігівська':'R'}
def repeaters_2m_callsign_generator(region):
list = []
for third_letter in dict_callsigns[region]:
for four_letter in letters[21:22]:
for five_letter in letters:
list.append(str("UR0" + third_letter + four_letter + five_letter))
return list
def repeaters_70cm_callsign_generator(region):
list = []
for third_letter in dict_callsigns[region]:
for four_letter in letters[20:21]:
for five_letter in letters:
list.append(str("UR0" + third_letter + four_letter + five_letter))
return list
def aprs_request(callsign):
aprs_apikey=config['APRS']['token']
apiurl = "https://api.aprs.fi/api/get?name="+ str(callsign) + "&what=loc&apikey=" + str(aprs_apikey) + "&format=json"
apireq = requests.get(apiurl)
apidata = json.loads(apireq.text)
print("-"*10 + "> | APRS data" )
if not apidata['entries']:
print("Warning: No APRS data found")
time.sleep(15)
else:
for i in apidata['entries']:
print("| APRS Name: " + str(i['name']) + "\n" +
"| APRS Lat: " + str(i['lat']) + "\n" +
"| APRS Lng: " + str(i['lng']) + "\n" +
"| Lasttime seen: " + datetime.utcfromtimestamp(int(i['lasttime'])).strftime('%Y-%m-%d %H:%M:%S') + "\n" +
"| Comment: " + str(i['comment']))
time.sleep(15)
if __name__ == '__main__':
print("APRS 70cm repeaters data")
for callsign in repeaters_70cm_callsign_generator("Київ"):
aprs_request(callsign)
for callsign in repeaters_2m_callsign_generator("Київ"):
aprs_request(callsign)
--- End code ---
и конфиг - config.ini
--- Код: ---[APRS]
token = validAPRStokenhere
--- End code ---
в конфигурационный файл нужно поместить валидный aprs api key - иначе работать не будет.
Известные проблемы - APRS имеет свои жесткие rate limits - и поэтому тут нужно или играть с time.sleep или каким-то образом обходить ограниичение на частоту запросов. Я не копал глубоко :)
UT3UDX:
И если все будет хорошо, на выходе мы получаем такой список ( 70 cм)
--- Код: ---APRS 70cm repeaters data
----------> | UR0UUA APRS data
| APRS Name: UR0UUA
| APRS Lat: 50.42333
| APRS Lng: 30.46367
| Lasttime seen: 2021-03-31 14:54:25
| Comment: 439.375MHz -760 T067 R99
----------> | UR0UUB APRS data
| APRS Name: UR0UUB
| APRS Lat: 50.391
| APRS Lng: 30.4805
| Lasttime seen: 2021-03-31 14:45:20
| Comment: 439.400MHz-760 DMR CC1 R100
----------> | UR0UUC APRS data
Warning: No APRS data found
----------> | UR0UUD APRS data
| APRS Name: UR0UUD
| APRS Lat: 50.44533
| APRS Lng: 30.5045
| Lasttime seen: 2021-03-31 14:44:51
| Comment: 438.700MHz D023 -7.60 http://cb.org.ua
----------> | UR0UUE APRS data
| APRS Name: UR0UUE
| APRS Lat: 50.44517
| APRS Lng: 30.50533
| Lasttime seen: 2021-03-31 14:45:51
| Comment: 438.775MHz -7.60 DMR CC1 http://cb.org.ua
----------> | UR0UUF APRS data
Warning: No APRS data found
----------> | UR0UUG APRS data
Warning: No APRS data found
----------> | UR0UUH APRS data
Warning: No APRS data found
----------> | UR0UUI APRS data
Warning: No APRS data found
----------> | UR0UUJ APRS data
Warning: No APRS data found
----------> | UR0UUK APRS data
| APRS Name: UR0UUK
| APRS Lat: 50.52733
| APRS Lng: 30.2285
| Lasttime seen: 2021-03-31 14:54:35
| Comment: 438.825MHz -760 DMR CC1 R77
----------> | UR0UUL APRS data
| APRS Name: UR0UUL
| APRS Lat: 50.53417
| APRS Lng: 30.60467
| Lasttime seen: 2021-03-31 14:43:30
| Comment: 438.675MHz -760 DMR CC1 R71
----------> | UR0UUM APRS data
Warning: No APRS data found
----------> | UR0UUN APRS data
| APRS Name: UR0UUN
| APRS Lat: 50.51617
| APRS Lng: 30.77967
| Lasttime seen: 2021-03-31 14:46:40
| Comment: 438.800MHz -760 T088 R76
----------> | UR0UUO APRS data
Warning: No APRS data found
----------> | UR0UUP APRS data
Warning: No APRS data found
----------> | UR0UUQ APRS data
| APRS Name: UR0UUQ
| APRS Lat: 50.45883
| APRS Lng: 30.35333
| Lasttime seen: 2021-03-31 15:06:16
| Comment: 439.275MHz -760 DMR CC1 R95
----------> | UR0UUR APRS data
| APRS Name: UR0UUR
| APRS Lat: 50.55000
| APRS Lng: 30.19983
| Lasttime seen: 2020-04-19 10:31:26
| Comment: 438.900MHz -760 DMR CC1 R80
----------> | UR0UUS APRS data
| APRS Name: UR0UUS
| APRS Lat: 50.469
| APRS Lng: 30.60317
| Lasttime seen: 2021-03-31 15:05:49
| Comment: 439.000MHz -760 DMR CC1
----------> | UR0UUT APRS data
| APRS Name: UR0UUT
| APRS Lat: 50.15383
| APRS Lng: 30.74617
| Lasttime seen: 2021-03-31 15:03:04
| Comment: 438.975MHz -760 DMR CC1 R83
----------> | UR0UUU APRS data
| APRS Name: UR0UUU
| APRS Lat: 50.51733
| APRS Lng: 30.237
| Lasttime seen: 2021-03-31 15:01:33
| Comment: R79 438.875(-7.600)MHz Irnen CTCSS 88.5
----------> | UR0UUV APRS data
Warning: No APRS data found
----------> | UR0UUW APRS data
Warning: No APRS data found
----------> | UR0UUX APRS data
Warning: No APRS data found
----------> | UR0UUY APRS data
Warning: No APRS data found
----------> | UR0UUZ APRS data
Warning: No APRS data found
--- End code ---
на 144 вообще пусто, можно даже не проверять
UR1229SWL:
Что-то невероятно заманчивое, а главное, полезное! :smilie:
Спасибо! Попробую разобраться.
Навігація
Go to full version