L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Hemm ħafna servizzi li jipprovdu informazzjoni dwar it-temp, imma liema wieħed għandek tafda? Meta bdejt niċċirkola ta’ spiss, ridt li jkolli l-aktar informazzjoni preċiża dwar il-kundizzjonijiet tat-temp fil-post fejn nirkeb.

L-ewwel ħsieb tiegħi kien li nibni stazzjon tat-temp DIY żgħir b'sensors u nirċievi data minnu. Imma jien ma "ivvintajtx ir-rota" u għażilt informazzjoni dwar it-temp li tintuża fl-avjazzjoni ċivili bħala sors ta' dejta verifikata, jiġifieri METAR (Rapport dwar l-Ajrudrom METeoroloġiku) u TAF (TAF - Tbassir tal-Ajrudrom tat-Terminal). Fl-avjazzjoni, il-ħajja ta’ mijiet ta’ nies tiddependi mit-temp, u għalhekk it-tbassir huwa preċiż kemm jista’ jkun.

Din l-informazzjoni tixxandar XNUMX/XNUMX bil-vuċi f'kull ajruport modern fil-forma ATIS (Servizz ta' Informazzjoni tat-Terminal Awtomatiku) u VOLMET (mill-Franċiż. vol - titjira u Meteo - temp). L-ewwel jipprovdi informazzjoni dwar it-temp attwali fl-ajruport, u t-tieni jipprovdi tbassir għall-24-30 siegħa li ġejjin, mhux biss fil-mitjar tax-xandir, iżda wkoll f'oħrajn.

Eżempju ta' operazzjoni ATIS fl-ajruport ta' Vnukovo:

Eżempju ta' kif jaħdem VOLMET fl-Ajruport ta' Vnukovo

Huwa inkonvenjenti li ġġorr skaner tar-radju jew transceiver miegħek kull darba għall-firxa korrispondenti, u ridt noħloq bot f'Telegram li, mal-ikklikkja ta 'buttuna, jippermettilek tikseb l-istess tbassir. Mhuwiex prattiku għall-inqas li jiġi allokat server separat għal dan, kif ukoll li jintbagħtu talbiet lid-dar tiegħek Raspberry.

Għalhekk, iddeċidejt li nuża s-servizz bħala backend Selectel Cloud Karatteristiċi. In-numru ta 'talbiet se jkun negliġibbli, għalhekk servizz bħal dan se jkun prattikament b'xejn (skond il-kalkoli tiegħi, se jkun 22 rublu għal 100 talba).

Preparazzjoni backend

Oħloq funzjoni

Fil-pannell tal-kontroll my.selectel.ru tiftaħ il-veduta Pjattaforma tas-sħab u oħloq proġett ġdid:

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Wara li jinħoloq il-proġett, mur fit-taqsima Funzjonijiet:

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Agħfas il-buttuna Oħloq funzjoni u agħtiha l-isem mixtieq:

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Wara li tagħfas Oħloq funzjoni se jkollna rappreżentazzjoni tal-funzjoni maħluqa:

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Qabel ma tibda toħloq kodiċi f'Python, ser ikollok bżonn toħloq bot f'Telegram. Mhux se niddeskrivi kif dan isir - hemm struzzjonijiet dettaljati fil-bażi tal-għarfien tagħna. Il-ħaġa prinċipali għalina hija t-token tal-bot maħluq.

Tħejjija tal-kodiċi

Għażilt in-National Oceanic and Atmospheric Administration (NOAA) bħala sors ta’ dejta affidabbli. Din l-aġenzija xjentifika taġġorna d-dejta f'ħin reali fuq is-server tagħha fil-format TXT.

Link biex tikseb id-dejta METAR (innota l-każ):

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

Fil-każ tiegħi, l-eqreb ajruport huwa Vnukovo, il-kodiċi ICAO tiegħu huwa UUWW. Jekk tmur fil-URL iġġenerat tagħti dan li ġej:

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

L-ewwel linja hija l-ħin attwali tat-tbassir f'Greenwich Mean Time. It-tieni linja hija sommarju tat-temp attwali. Il-bdoti tal-avjazzjoni ċivili se jkollhom l-ebda problema biex jifhmu xi tfisser din il-linja, iżda għandna bżonn spjegazzjoni:

  • [UUWW] — Vnukovo, Moska (Russja — RU);
  • [101130Z] — L-10 jum tax-xahar, 11:30 am GMT;
  • [31004MPS] — direzzjoni tar-riħ 310 grad, veloċità 4 m/s;
  • [9999] — viżibilità orizzontali 10 km jew aktar;
  • [SCT048] — sħab imferrex/imxerred f'4800 pied (~1584 m);
  • [24 / 13] — temperatura 24°C, punt tan-nida 13°C;
  • [Q1014] — pressjoni (QNH) 1014 ettopascals (750 mm Hg);
  • [R01/000070] — koeffiċjent ta' adeżjoni fuq korsija 01 — 0,70;
  • [NOSIG] - mingħajr bidliet sinifikanti.

Ejja nibdew niktbu l-kodiċi tal-programm. L-ewwel għandek bżonn timporta funzjonijiet jitlob и pytaf:

from urllib import request
import pytaf

Speċifika l-varjabbli u pprepara l-funzjoni tad-dekodifikazzjoni:

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()

Ejja ngħaddu għal TAF (il-każ huwa importanti wkoll).

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

Bħal fl-eżempju preċedenti, ejja nħarsu lejn it-tbassir fl-ajruport ta 'Vnukovo:

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

Ejjew nagħtu attenzjoni speċjalment għal-linji TEMPO и BECMG. TEMPO tfisser li t-temp attwali matul il-perjodu speċifikat se jinbidel perjodikament. BECMG - it-temp se jinbidel gradwalment matul il-perjodu ta 'żmien speċifikat.

Jiġifieri, il-linja:

TEMPO 1012/1020 -TSRA BKN020CB

Se jfisser:

  • [1012 / 1020] — bejn 12 u 20 siegħa (Ħin medju ta' Greenwich);
  • [-TSRA] — maltempata bir-ragħad (TS = maltempata bir-ragħad) b’xita (RA = xita) ta’ intensità baxxa (sinjal minus);
  • [BKN020CB] - sħab sinifikanti (BKN = miksur), cumulonimbus (CB = cumulonimbus) f'2000 pied (610 metru) 'l fuq mil-livell tal-baħar.

Hemm ħafna termini għall-fenomeni tat-temp, u huwa diffiċli li tiftakarhom. Il-kodiċi għat-talba TAF huwa miktub b'mod simili.

Tlugħ tal-kodiċi fil-cloud

Sabiex ma taħlix il-ħin, ejja nieħdu mudell tal-bot tat-telegramma mir-repożitorju tagħna sħaba-telegramma-bot. Hemm ippreparat minn qabel rekwiżiti.txt и setup.py bl-istruttura tad-direttorju korretta.

Peress li fil-kodiċi se nkunu qed naċċessaw il-modulu pytaf, allura l-verżjoni tagħha għandha tiġi miżjuda immedjatament rekwiżiti.txt

pytaf~=1.2.1

  • Ejja ngħaddu għall-editjar bot/tele_bot.py. Aħna neħħi l-affarijiet kollha mhux meħtieġa u żid il-kodiċi tagħna.

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)

  • Aħna nippakkjaw id-direttorju kollu f'arkivju ZIP u mmorru fil-pannell tal-kontroll għall-funzjoni maħluqa.
  • Imbotta Editja u niżżel l-arkivju bil-kodiċi.

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab

  • Imla l-mogħdija relattiva fil-fajl tele_bot (estensjoni .py jistgħu ma jiġux speċifikati) u funzjoni endpoint (fl-eżempju mogħti dan huwa prinċipali).
  • Fit-taqsima Varjabbli Ambjentali ikteb varjabbli TOKEN u jassenjah it-token tal-bot tat-telegramma mixtieqa.
  • Imbotta Issejvja u Tespandi, wara li mmorru għat-taqsima iqanqal.
  • Poġġi l-iswiċċ Talba HTTPbiex tagħmel it-talba pubblika.

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Issa għandna URL biex insejħu pubblikament il-funzjoni. Kulma fadal hu kkonfigurat webhook. Sib il-bot tagħna @SelectelServerless_bot f'Telegram u rreġistra l-bot tiegħek bil-kmand:

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

Riżultat

Jekk kollox isir b'mod korrett, il-bot tiegħek immedjatament jibda jaħdem u juri l-aħħar rapport tat-temp tal-avjazzjoni direttament fil-messaġġier.

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab
Naturalment, il-kodiċi jista 'jitjieb, iżda anke fl-istat attwali tiegħu huwa biżżejjed li ssir taf l-aktar temp preċiż u tbassir minn sors ta' fiduċja.

Issib il-verżjoni sħiħa tal-kodiċi f'tagħna repożitorji fuq GitHub.

L-aktar tbassir preċiż tat-temp: bot għal Telegram fuq il-funzjonijiet tas-sħab

Sors: www.habr.com

Żid kumment