Ең дәл ауа райы болжамы: бұлттық функциялардағы Telegram боты

Ең дәл ауа райы болжамы: бұлттық функциялардағы Telegram боты
Ауа-райы туралы ақпарат беретін көптеген қызметтер бар, бірақ қайсысына сену керек? Велосипедпен жиі айналыса бастағанда, мен мінген жердегі ауа-райы туралы ең дәл ақпарат алғым келді.

Менің бірінші ойым сенсорлары бар шағын DIY метеостанциясын салу және одан мәліметтер алу болды. Бірақ мен «дөңгелекті қайта ойлап тапқан жоқпын» және тексерілген деректер көзі ретінде азаматтық авиацияда қолданылатын ауа райы туралы ақпаратты таңдадым, атап айтқанда МЕТАР (MEТеорологиялық аэродром туралы есеп) және TAF (TAF - Терминал аэродромының болжамы). Авиацияда жүздеген адамдардың өмірі ауа-райына байланысты, сондықтан болжамдар мүмкіндігінше дәл.

Бұл ақпарат әр заманауи аэродромда тәулік бойы дауыспен беріледі АТИС (Автоматты терминал ақпарат қызметі) және VOLMET (француз тілінен. том - ұшу және Біз аралында Meteo - ауа райы). Біріншісі аэродромдағы нақты ауа-райы туралы ақпарат береді, ал екіншісі тек хабар тарататын аэродромда ғана емес, сонымен қатар келесі 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

Менің жағдайда, ең жақын әуежай - Внуково, оның ИКАО коды UUWW. Жасалған URL мекенжайына өту келесіні береді:

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

Бірінші жол - Гринвич уақытындағы болжамның ағымдағы уақыты. Екінші жол - нақты ауа райының қысқаша мазмұны. Азаматтық авиацияның ұшқыштары бұл сызықтың нені білдіретінін түсінуде қиындықтар туғызбайды, бірақ бізге түсініктеме қажет:

  • [UUWW] — Внуково, Мәскеу (Ресей — RU);
  • [101130Z] — айдың 10-ы күні, GMT сағат 11:30;
  • [31004MPS] — желдің бағыты 310 градус, жылдамдығы 4 м/с;
  • [9999] — көлденең көріну 10 км және одан да көп;
  • [SCT048] — 4800 футтағы (~1584м) шашыраңқы/шашыраңқы бұлттар;
  • [24 / 13] — температура 24°С, шық нүктесі 13°С;
  • [1014-тоқсан] — қысым (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

Әсіресе сызықтарға назар аударайық TEMPO и BECMG. ТЕМПО көрсетілген кезеңдегі нақты ауа-райының кезеңді түрде өзгеретінін білдіреді. BECMG - белгілі бір уақыт аралығында ауа-райы біртіндеп өзгереді.

Яғни, сызық:

TEMPO 1012/1020 -TSRA BKN020CB

Мынаны білдіреді:

  • [1012 / 1020] — 12 және 20 сағат арасында (Гринвич уақыты);
  • [-TSRA] — төмен қарқындылықтағы жаңбырмен (RA = жаңбыр) найзағай (TS = найзағай) (минус белгісі);
  • [BKN020CB] - теңіз деңгейінен 2000 фут (610 метр) биіктікте маңызды (BKN = сынған), кумулонимбус (CB = cumulonimbus) бұлттары.

Ауа-райы құбылыстарына қатысты терминдер өте көп және оларды есте сақтау қиын. 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 боты

Ақпарат көзі: www.habr.com

пікір қалдыру