Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Хидматҳои зиёде мавҷуданд, ки маълумоти обу ҳаворо пешниҳод мекунанд, аммо ба кадоме шумо бояд бовар кунед? Вақте ки ман зуд-зуд ба велосипедронӣ шурӯъ кардам, ман мехостам маълумоти дақиқтаринро дар бораи шароити обу ҳаво дар ҷое, ки савор мекунам, дошта бошам.

Аввалин андешаи ман сохтани як истгоҳи хурди обу ҳаво бо сенсорҳо ва гирифтани маълумот аз он буд. Аммо ман "чархро аз нав ихтироъ накардаам" ва маълумоти обу ҳаворо, ки дар авиатсияи гражданӣ ҳамчун манбаи маълумоти тасдиқшуда истифода мешаванд, интихоб кардам. Метар (Хисоботи аэродром METeorological) ва ТАС (TAF - Пешгӯии аэродромҳои терминал). Дар авиатсия ҳаёти садҳо одамон аз обу ҳаво вобаста аст, бинобар ин пешгӯиҳо то ҳадди имкон дақиқ мебошанд.

Ин маълумот XNUMX/XNUMX тавассути овоз дар ҳар як фурудгоҳи замонавӣ дар шакл пахш карда мешавад АТИС (Хадамоти автоматии терминали иттилоотӣ) ва ВОЛМЕТ (аз фаронсавӣ. Бештар — парвоз ва météo - обу ҳаво). Якум дар бораи обу ҳавои воқеии фурудгоҳ маълумот медиҳад ва дуюмӣ барои 24-30 соати оянда на танҳо дар фурудгоҳ, балки дар дигар ҷойҳо пешгӯӣ мекунад.

Намунаи амалиёти ATIS дар фурудгоҳи Внуково:

Мисоли он, ки чӣ тавр VOLMET дар фурудгоҳи Внуково кор мекунад

Ҳар дафъа бо худ бурдани сканер ё қабулкунаки радио барои диапазони мувофиқ номувофиқ аст ва ман мехостам дар Telegram бот эҷод кунам, ки бо пахши тугма ба шумо имкон медиҳад, ки ҳамон як пешгӯиро гиред. Барои ин ҷудо кардани сервери алоҳида ва инчунин фиристодани дархостҳо ба хонаи худ Raspberry ҳадди аққал ғайриимкон аст.

Аз ин рӯ, ман қарор додам, ки хидматро ҳамчун пуштибон истифода барам Хусусиятҳои абрии интихоб кунед. Шумораи дархостҳо ночиз хоҳад буд, аз ин рӯ чунин хидмат амалан ройгон хоҳад буд (тибқи ҳисобҳои ман, он барои 22 100 дархост 000 рубл хоҳад буд).

Омодасозии пушти сар

Функсия эҷод кунед

Дар панели идоракунӣ my.selectel.ru манзараро кушоед Платформаи абрӣ ва лоиҳаи нав эҷод кунед:

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Пас аз сохтани лоиҳа, ба қисмат равед Функсияҳо:

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Тугмаро пахш кунед Функсия эҷод кунед ва ба он номи дилхоҳро диҳед:

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Пас аз пахш кардан Функсия эҷод кунед мо намояндагии функсияи сохташударо дорем:

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Пеш аз оғози сохтани код дар 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 и setup.py бо сохтори дурусти директория.

Азбаски дар код мо ба модул дастрасӣ пайдо мекунем питаф, пас версияи он бояд фавран илова карда шавад Талабот.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 бастаем ва ба панели идоракунӣ ба функсияи сохташуда меравем.
  • Дар ин ҷо зер кунед Таҳрири ва архивро бо код зеркашӣ кунед.

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ

  • Роҳи нисбии файлро пур кунед tele_bot (васеъ .py метавонад муайян карда нашавад) ва функсияи ниҳоӣ (дар мисоли додашуда ин аст асосӣ).
  • фасли Тағйирёбандаҳои муҳити зист тағирёбанда нависед Нишон ва ба он аломати боти телеграммаи дилхоҳро таъин кунед.
  • Дар ин ҷо зер кунед Захира ва васеъ кунед, пас аз он мо ба қисмат меравем ангезандаҳо.
  • Мо тугмаро гузоштем Дархости HTTPки дархостро оммавй гардонад.

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Мо ҳоло URL-ро барои занги оммавӣ ба функсия дорем. Ҳама чиз боқӣ мондааст вебхукро танзим кунед. Боти моро пайдо кунед @SelectelServerless_bot дар Telegram ва боти худро бо фармон сабти ном кунед:

/setwebhook <you bot token> <public URL of your function>

Дар натиҷа

Агар ҳама чиз дуруст анҷом дода шавад, боти шумо фавран ба кор шурӯъ мекунад ва гузориши охирини обу ҳавои авиатсияро мустақиман дар мессенҷер намоиш медиҳад.

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ
Албатта, кодро такмил додан мумкин аст, аммо ҳатто дар ҳолати кунунии он барои дарёфти дақиқтарин обу ҳаво ва пешгӯӣ аз манбаи боэътимод кофӣ аст.

Шумо версияи пурраи кодро дар мо пайдо мекунед анборҳо дар GitHub.

Дурусттарин пешгӯии обу ҳаво: бот барои Telegram дар функсияҳои абрӣ

Манбаъ: will.com

Илова Эзоҳ