Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Կան բազմաթիվ ծառայություններ, որոնք տրամադրում են եղանակի մասին տեղեկատվություն, բայց որի՞ն պետք է վստահել: Երբ ես սկսեցի հաճախակի հեծանիվ վարել, ես ուզում էի ամենաճշգրիտ տեղեկություն ունենալ այն վայրում, որտեղ ես վարում եմ եղանակային պայմանները:

Իմ առաջին միտքը տվիչներով փոքրիկ DIY եղանակային կայան կառուցելն ու դրանից տվյալներ ստանալն էր: Բայց ես չվերաստեղծեցի անիվը և ընտրեցի եղանակային տեղեկատվությունը, որն օգտագործվում է քաղաքացիական ավիացիայում որպես ստուգված տվյալների աղբյուր, մասնավորապես. ՄԵՏԱՐ (Օդերեւութաբանական աերոդրոմի հաշվետվություն) և Taf (TAF - Terminal Aerodrome Forecast): Ավիացիայում հարյուրավոր մարդկանց կյանքը կախված է եղանակից, ուստի կանխատեսումները հնարավորինս ճշգրիտ են:

Այս տեղեկատվությունը XNUMX/XNUMX ձայնով հեռարձակվում է յուրաքանչյուր ժամանակակից օդանավակայանում այս ձևով ԱՏԻՍ (Ավտոմատ Տերմինալի տեղեկատվական ծառայություն) և ՎՈԼՄԵՏ (ֆրանսերենից. ք - թռիչք և meteo - եղանակ): Առաջինը տեղեկատվություն է տրամադրում օդանավակայանի իրական եղանակի մասին, իսկ երկրորդը տրամադրում է առաջիկա 24-30 ժամվա կանխատեսումը ոչ միայն հեռարձակման օդանավակայանում, այլև մյուսներում:

Վնուկովո օդանավակայանում ATIS շահագործման օրինակ.

Օրինակ, թե ինչպես է աշխատում VOLMET-ը Վնուկովո օդանավակայանում

Անհարմար է ձեզ հետ ամեն անգամ համապատասխան տիրույթի համար ռադիո սկաներ կամ հաղորդիչ տանելը, և ես ուզում էի Telegram-ում ստեղծել բոտ, որը կոճակի սեղմումով թույլ կտա ստանալ նույն կանխատեսումը: Առնվազն գործնական չէ առանձին սերվեր հատկացնել դրա համար, ինչպես նաև հարցումներ ուղարկել ձեր տան Raspberry-ին:

Հետևաբար, ես որոշեցի օգտագործել ծառայությունը որպես հետին պլան Selectel Cloud-ի առանձնահատկությունները. Հարցումների քանակը աննշան կլինի, ուստի նման ծառայությունը գործնականում անվճար կլինի (ըստ իմ հաշվարկների, այն կկազմի 22 ռուբլի 100 հարցումների համար):

Backend պատրաստում

Ֆունկցիայի ստեղծում

Կառավարման վահանակում my.selectel.ru բացել տեսարանը ամպային հարթակ և ստեղծել նոր նախագիծ.

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Նախագիծը ստեղծելուց հետո անցեք բաժին Գործառույթներ:

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Սեղմեք կոճակը Ստեղծեք գործառույթ և տվեք նրան ցանկալի անունը.

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Սեղմելուց հետո Ստեղծեք գործառույթ մենք կունենանք ստեղծված ֆունկցիայի ներկայացում.

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Նախքան Python-ում կոդ ստեղծելը, ձեզ հարկավոր է բոտ ստեղծել Telegram-ում: Ես չեմ նկարագրի, թե ինչպես է դա արվում, կան մանրամասն հրահանգներ մեր գիտելիքների բազայում. Մեզ համար գլխավորը ստեղծված բոտի նշանն է։

Կոդը պատրաստելը

Որպես վստահելի տվյալների աղբյուր ես ընտրեցի Օվկիանոսների և մթնոլորտի ազգային վարչությունը (NOAA): Այս գիտական ​​գործակալությունը իրական ժամանակում թարմացնում է տվյալները իր սերվերում TXT ձևաչափով:

Հղում METAR-ի տվյալներ ստանալու համար (նշեք դեպքը).

https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT

Իմ դեպքում մոտակա օդանավակայանը Վնուկովոն է, նրա ԻԿԱՕ կոդը UUWW. Ստեղծված URL-ին անցնելը կտա հետևյալը.

2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG

Առաջին տողը Գրինվիչի ժամանակով կանխատեսման ընթացիկ ժամն է: Երկրորդ տողը փաստացի եղանակի ամփոփումն է: Քաղաքացիական ավիացիայի օդաչուները խնդիր չեն ունենա հասկանալու, թե ինչ է նշանակում այս գիծը, բայց մեզ բացատրություն է պետք.

  • [UUWW] — Վնուկովո, Մոսկվա (Ռուսաստան — RU);
  • [101130Z] — ամսվա 10-րդ օրը, 11:30 GMT;
  • [31004 MPS] — քամու ուղղությունը 310 աստիճան, արագությունը 4 մ/վ;
  • [9999] — հորիզոնական տեսանելիություն 10 կմ և ավելի;
  • [SCT048] — ցրված/ցրված ամպեր 4800 ոտնաչափ (~1584 մ);
  • [24 / 13] — ջերմաստիճանը 24°C, ցողի կետը 13°C;
  • [Q1014] - ճնշում (QNH) 1014 հեկտոպասկալ (750 մմ Hg);
  • [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] — ամպրոպ (TS = ամպրոպ) ցածր ինտենսիվության անձրևով (ՀՀ = անձրև) (մինուս նշան);
  • [BKN020CB] - զգալի (BKN = կոտրված), կուտակային (CB = cumulonimbus) ամպեր ծովի մակարդակից 2000 ֆուտ (610 մետր) բարձրության վրա:

Եղանակային երևույթների տերմինները բավականին շատ են, և դրանք հիշելը դժվար է։ TAF հարցման ծածկագիրը գրված է նույն ձևով:

Կոդը վերբեռնվում է ամպի վրա

Որպեսզի ժամանակ չկորցնենք, եկեք մեր պահոցից վերցնենք հեռագրային բոտի կաղապար cloud-telegram-bot. Կա նախապես պատրաստված պահանջները. 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 (ընդլայնում հ կարող է նշված չլինել) և վերջնակետի ֆունկցիա (տրված օրինակում սա է հիմնական).
  • Բաժին Շրջակա միջավայրի փոփոխականներ գրել փոփոխական ՏՈԿԵՆ և նշանակեք այն ցանկալի հեռագրային բոտի նշանը:
  • Սեղմել Պահպանել և ընդարձակել, որից հետո անցնում ենք բաժին Triggers.
  • Մենք դնում ենք անջատիչը HTTP հարցումհարցումը հրապարակայնացնելու համար։

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Այժմ մենք ունենք URL գործառույթը հրապարակայնորեն կանչելու համար: Մնում է միայն կարգավորել webhook-ը. Գտեք մեր բոտը @SelectelServerless_bot Telegram-ում և գրանցեք ձեր բոտը հրամանով.

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

Արդյունք

Եթե ​​ամեն ինչ ճիշտ արվի, ձեր բոտն անմիջապես կսկսի աշխատել և կցուցադրի ավիացիոն եղանակի վերջին հաշվետվությունը անմիջապես մեսենջերում։

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա
Իհարկե, կոդը կարող է բարելավվել, բայց նույնիսկ ներկա վիճակում բավական է վստահելի աղբյուրից պարզել եղանակի առավել ճշգրիտ կանխատեսումը։

Կոդի ամբողջական տարբերակը կգտնեք մեր կայքում պահոցներ GitHub-ում.

Եղանակի ամենաճշգրիտ կանխատեսումը. բոտ Telegram-ի համար՝ ամպային գործառույթների վրա

Source: www.habr.com

Добавить комментарий