Хидматҳои зиёде мавҷуданд, ки маълумоти обу ҳаворо пешниҳод мекунанд, аммо ба кадоме шумо бояд бовар кунед? Вақте ки ман зуд-зуд ба велосипедронӣ шурӯъ кардам, ман мехостам маълумоти дақиқтаринро дар бораи шароити обу ҳаво дар ҷое, ки савор мекунам, дошта бошам.
Аввалин андешаи ман сохтани як истгоҳи хурди обу ҳаво бо сенсорҳо ва гирифтани маълумот аз он буд. Аммо ман "чархро аз нав ихтироъ накардаам" ва маълумоти обу ҳаворо, ки дар авиатсияи гражданӣ ҳамчун манбаи маълумоти тасдиқшуда истифода мешаванд, интихоб кардам. Метар (Хисоботи аэродром METeorological) ва ТАС (TAF - Пешгӯии аэродромҳои терминал). Дар авиатсия ҳаёти садҳо одамон аз обу ҳаво вобаста аст, бинобар ин пешгӯиҳо то ҳадди имкон дақиқ мебошанд.
Ин маълумот XNUMX/XNUMX тавассути овоз дар ҳар як фурудгоҳи замонавӣ дар шакл пахш карда мешавад АТИС (Хадамоти автоматии терминали иттилоотӣ) ва ВОЛМЕТ (аз фаронсавӣ. Бештар — парвоз ва météo - обу ҳаво). Якум дар бораи обу ҳавои воқеии фурудгоҳ маълумот медиҳад ва дуюмӣ барои 24-30 соати оянда на танҳо дар фурудгоҳ, балки дар дигар ҷойҳо пешгӯӣ мекунад.
Намунаи амалиёти ATIS дар фурудгоҳи Внуково:
Мисоли он, ки чӣ тавр VOLMET дар фурудгоҳи Внуково кор мекунад
Ҳар дафъа бо худ бурдани сканер ё қабулкунаки радио барои диапазони мувофиқ номувофиқ аст ва ман мехостам дар Telegram бот эҷод кунам, ки бо пахши тугма ба шумо имкон медиҳад, ки ҳамон як пешгӯиро гиред. Барои ин ҷудо кардани сервери алоҳида ва инчунин фиристодани дархостҳо ба хонаи худ Raspberry ҳадди аққал ғайриимкон аст.
Аз ин рӯ, ман қарор додам, ки хидматро ҳамчун пуштибон истифода барам
Омодасозии пушти сар
Функсия эҷод кунед
Дар панели идоракунӣ
Пас аз сохтани лоиҳа, ба қисмат равед Функсияҳо:
Тугмаро пахш кунед Функсия эҷод кунед ва ба он номи дилхоҳро диҳед:
Пас аз пахш кардан Функсия эҷод кунед мо намояндагии функсияи сохташударо дорем:
Пеш аз оғози сохтани код дар Python, шумо бояд дар Telegram бот эҷод кунед. Ман тавсиф намекунам, ки ин чӣ гуна анҷом дода мешавад - дастурҳои муфассал мавҷуданд
Омода кардани код
Ман Маъмурияти Миллии Уқёнусҳо ва Атмосфераро (NOAA) ҳамчун манбаи маълумоти боэътимод интихоб кардам. Ин агентии илмӣ маълумотро дар вақти воқеӣ дар сервери худ дар формати TXT навсозӣ мекунад.
Истинод барои гирифтани маълумоти METAR (ба ҳолат таваҷҷӯҳ кунед):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT
Дар ҳолати ман, наздиктарин фурудгоҳ Внуково аст, рамзи ICAO он аст UUWW. Гузариш ба URL-и тавлидшуда инҳоро медиҳад:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
Сатри аввал вақти ҷории пешгӯӣ дар вақти миёнаи Гринвич мебошад. Сатри дуюм мухтасари воқеии обу ҳаво мебошад. Лётчикхои авиацияи гражданй дар фахмидани маънои ин хат душворй нахоханд дошт, аммо ба мо тавзех лозим аст:
- [UUWW] — Внуково, Москва (Русия — РУ);
- [101130Z] — соати 10-уми мох, соати 11-30 пагохй;
- [31004MPS] — самти шамол 310 дарача, суръат 4 м/с;
- [9999] — дидани уфуқӣ 10 км ва бештар аз он;
- [SCT048] — абрҳои пароканда/пароканда дар 4800 фут (~1584м);
- [24/13] — харорат 24°С, нуктаи шабнам 13°С;
- [Q1014] — фишор (QNH) 1014 гектопаскаль (750 мм рт.ст);
- [R01/000070] — коэффисиенти часпидан дар хати 01 — 0,70;
- [NOSIG] - бе тағироти назаррас.
Биёед ба навиштани рамзи барнома шурӯъ кунем. Аввал шумо бояд функсияҳоро ворид кунед дархост и питаф:
from urllib import request
import pytaf
Тағирёбандаҳоро муайян кунед ва функсияи рамзкушоиро омода кунед:
URL_METAR = "https://tgftp.nws.noaa.gov/data/observations/metar/stations/UUWW.TXT"
URL_TAF = "https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/UUWW.TXT"
def parse_data(code):
code = code.split('n')[1]
return pytaf.Decoder(pytaf.TAF(code)).decode_taf()
Биёед ба TAF гузарем (парвандаи он низ муҳим аст).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT
Мисли мисоли қаблӣ, биёед ба пешгӯӣ дар фурудгоҳи Внуково назар андозем:
2020/08/10 12:21
TAF UUWW 101050Z 1012/1112 28003G10MPS 9999 SCT030 TX25/1012Z TN15/1103Z
TEMPO 1012/1020 -TSRA BKN020CB
BECMG 1020/1021 FEW007 BKN016
TEMPO 1021/1106 -SHRA BKN020CB PROB40
TEMPO 1021/1106 -TSRA BKN020CB
BECMG 1101/1103 34006G13MPS
Махсусан ба сатрхо диккат дихем ТЕМПО и BECMG. TEMPO маънои онро дорад, ки обу ҳавои воқеӣ дар давраи муайян давра ба давра тағйир меёбад. BECMG - ҳаво тадриҷан дар як муддати муайян тағйир меёбад.
Яъне сатр:
TEMPO 1012/1020 -TSRA BKN020CB
Ин маънои онро дорад:
- [1012/1020] — аз соати 12 то 20 (вактн миёнаи Гринвич);
- [-TSRA] — раъду барк (ТС = раъду барк) бо борон (РА = борон) шиддати паст (аломати минус);
- [BKN020CB] - абрҳои назаррас (BKN = шикаста), cumulonimbus (CB = cumulonimbus) дар 2000 фут (610 метр) аз сатҳи баҳр.
Барои зуҳуроти обу ҳаво истилоҳоти зиёде мавҷуданд ва дар хотир нигоҳ доштани онҳо душвор аст. Рамзи дархости TAF ба ҳамин тарз навишта шудааст.
Боркунии код ба абр
Барои он ки вақтро аз даст надиҳед, биёед аз анбори худ як қолаби боти телеграммаро гирем
Азбаски дар код мо ба модул дастрасӣ пайдо мекунем питаф, пас версияи он бояд фавран илова карда шавад Талабот.txt
pytaf~=1.2.1
- Биёед ба таҳрир гузарем bot/tele_bot.py. Мо ҳама чизҳои нолозимро нест мекунем ва рамзи худро илова мекунем.
import os
from urllib import request
import telebot
import pytaf
TOKEN = os.environ.get('TOKEN')
URL_METAR = "https://tgftp.nws.noaa.gov/data/observations/metar/stations/UUWW.TXT"
URL_TAF = "https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/UUWW.TXT"
bot = telebot.TeleBot(token=TOKEN, threaded=False)
keyboard = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.row('/start', '/get_metar', '/get_taf')
def start(message):
msg = "Привет. Это бот для получения авиационного прогноза погоды "
"с серверов NOAA. Бот настроен на аэропорт Внуково (UUWW)."
bot.send_message(message.chat.id, msg, reply_markup=keyboard)
def parse_data(code):
code = code.split('n')[1]
return pytaf.Decoder(pytaf.TAF(code)).decode_taf()
def get_metar(message):
# Fetch info from server.
code = request.urlopen(URL_METAR).read().decode('utf-8')
# Send formatted answer.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def get_taf(message):
# Fetch info from server.
code = request.urlopen(URL_TAF).read().decode('utf-8')
# Send formatted answer.
bot.send_message(message.chat.id, parse_data(code), reply_markup=keyboard)
def route_command(command, message):
"""
Commands router.
"""
if command == '/start':
return start(message)
elif command == '/get_metar':
return get_metar(message)
elif command == '/get_taf':
return get_taf(message)
def main(**kwargs):
"""
Serverless environment entry point.
"""
print(f'Received: "{kwargs}"')
message = telebot.types.Update.de_json(kwargs)
message = message.message or message.edited_message
if message and message.text and message.text[0] == '/':
print(f'Echo on "{message.text}"')
route_command(message.text.lower(), message)
- Мо тамоми директорияро ба бойгонии ZIP бастаем ва ба панели идоракунӣ ба функсияи сохташуда меравем.
- Дар ин ҷо зер кунед Таҳрири ва архивро бо код зеркашӣ кунед.
- Роҳи нисбии файлро пур кунед tele_bot (васеъ .py метавонад муайян карда нашавад) ва функсияи ниҳоӣ (дар мисоли додашуда ин аст асосӣ).
- фасли Тағйирёбандаҳои муҳити зист тағирёбанда нависед Нишон ва ба он аломати боти телеграммаи дилхоҳро таъин кунед.
- Дар ин ҷо зер кунед Захира ва васеъ кунед, пас аз он мо ба қисмат меравем ангезандаҳо.
- Мо тугмаро гузоштем Дархости HTTPки дархостро оммавй гардонад.
Мо ҳоло URL-ро барои занги оммавӣ ба функсия дорем. Ҳама чиз боқӣ мондааст
/setwebhook <you bot token> <public URL of your function>
Дар натиҷа
Агар ҳама чиз дуруст анҷом дода шавад, боти шумо фавран ба кор шурӯъ мекунад ва гузориши охирини обу ҳавои авиатсияро мустақиман дар мессенҷер намоиш медиҳад.
Албатта, кодро такмил додан мумкин аст, аммо ҳатто дар ҳолати кунунии он барои дарёфти дақиқтарин обу ҳаво ва пешгӯӣ аз манбаи боэътимод кофӣ аст.
Шумо версияи пурраи кодро дар мо пайдо мекунед
Манбаъ: will.com