Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Kuna huduma nyingi zinazotoa taarifa ya hali ya hewa, lakini ni ipi unapaswa kuamini? Nilipoanza kuendesha baiskeli mara kwa mara, nilitaka kuwa na taarifa sahihi zaidi kuhusu hali ya hewa mahali ninapoendesha.

Wazo langu la kwanza lilikuwa kujenga kituo kidogo cha hali ya hewa cha DIY na vihisi na kupokea data kutoka kwake. Lakini siku "kuanzisha tena gurudumu" na nikachagua habari ya hali ya hewa ambayo hutumiwa katika anga kama chanzo cha data iliyothibitishwa, ambayo ni. METARI (Ripoti ya Meteorological Aerodrome) na TAF (TAF - Utabiri wa Aerodrome ya Kituo). Katika usafiri wa anga, maisha ya mamia ya watu hutegemea hali ya hewa, hivyo utabiri ni sahihi iwezekanavyo.

Habari hii inatangazwa XNUMX/XNUMX kwa sauti katika kila uwanja wa ndege wa kisasa katika fomu ATIS (Huduma ya Taarifa ya Kitengo kiotomatiki) na VOLMET (kutoka Kifaransa. vol - kukimbia na Meteo - hali ya hewa). Ya kwanza hutoa habari kuhusu hali ya hewa halisi kwenye uwanja wa ndege, na ya pili hutoa utabiri wa saa 24-30 zijazo, sio tu kwenye uwanja wa ndege wa matangazo, bali pia kwa wengine.

Mfano wa operesheni ya ATIS kwenye uwanja wa ndege wa Vnukovo:

Mfano wa jinsi VOLMET inavyofanya kazi kwenye Uwanja wa Ndege wa Vnukovo

Haifai kubeba kichanganuzi cha redio au kipitishi sauti nawe kila wakati kwa safu inayolingana, na nilitaka kuunda roboti kwenye Telegramu ambayo, kwa kubofya kitufe, hukuruhusu kupata utabiri sawa. Angalau haiwezekani kutenga seva tofauti kwa hili, na pia kutuma maombi kwa Raspberry yako ya nyumbani.

Kwa hivyo, niliamua kutumia huduma kama njia ya nyuma Chagua Vipengele vya Wingu. Idadi ya maombi itakuwa isiyo na maana, hivyo huduma hiyo itakuwa karibu bure (kulingana na mahesabu yangu, itakuwa rubles 22 kwa maombi 100).

Maandalizi ya nyuma

Unda kipengele cha kukokotoa

Katika jopo la kudhibiti my.selectel.ru fungua mtazamo Jukwaa la wingu na unda mradi mpya:

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Baada ya mradi kuundwa, nenda kwenye sehemu Kazi:

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Pushisha kifungo Unda kipengele cha kukokotoa na upe jina unalotaka:

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Baada ya kushinikiza Unda kipengele cha kukokotoa tutakuwa na uwakilishi wa kazi iliyoundwa:

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Kabla ya kuanza kuunda nambari kwenye Python, utahitaji kuunda bot kwenye Telegraph. Sitaelezea jinsi hii inafanywa - kuna maagizo ya kina katika msingi wetu wa maarifa. Jambo kuu kwetu ni ishara ya bot iliyoundwa.

Kuandaa kanuni

Nilichagua Utawala wa Kitaifa wa Bahari na Anga (NOAA) kama chanzo cha data ya kuaminika. Wakala huu wa kisayansi husasisha data katika muda halisi kwenye seva yake katika umbizo la TXT.

Unganisha ili kupata data ya METAR (kumbuka kesi):

https://tgftp.nws.noaa.gov/data/observations/metar/stations/<ΠΊΠΎΠ΄ аэропорта ΠΏΠΎ ICAO>.TXT

Katika kesi yangu, uwanja wa ndege wa karibu ni Vnukovo, kanuni yake ya ICAO ni UUWW. Kwenda kwa URL iliyotengenezwa itatoa yafuatayo:

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

Mstari wa kwanza ni wakati wa sasa wa utabiri katika Greenwich Mean Time. Mstari wa pili ni muhtasari wa hali ya hewa halisi. Marubani wa anga hawatakuwa na shida kuelewa maana ya laini hii, lakini tunahitaji maelezo:

  • [UUWW] - Vnukovo, Moscow (Urusi - RU);
  • [101130Z] β€” siku ya 10 ya mwezi, 11:30 asubuhi GMT;
  • [31004MPS] - mwelekeo wa upepo digrii 310, kasi 4 m / s;
  • [9999] - mwonekano wa usawa wa kilomita 10 au zaidi;
  • [SCT048] - mawingu yaliyotawanyika / yaliyotawanyika kwa futi 4800 (~ 1584m);
  • [24 / 13] - joto 24 Β° C, kiwango cha umande 13 Β° C;
  • [Q1014] - shinikizo (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - mgawo wa kujitoa kwenye mstari wa 01 - 0,70;
  • [NOSIG] - bila mabadiliko makubwa.

Wacha tuanze kuandika nambari ya programu. Kwanza unahitaji kuagiza vitendaji kuomba ΠΈ pytaf:

from urllib import request
import pytaf

Bainisha vigezo na uandae kazi ya kusimbua:

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

Wacha tuendelee kwenye TAF (kesi pia ni muhimu).

https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<ΠΊΠΎΠ΄ аэропорта ΠΏΠΎ ICAO>.TXT

Kama katika mfano uliopita, hebu tuangalie utabiri wa uwanja wa ndege wa 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

Wacha tuangalie hasa mistari TEMPO ΠΈ BECMG. TEMPO inamaanisha kuwa hali ya hewa halisi katika kipindi kilichobainishwa itabadilika mara kwa mara. BECMG - hali ya hewa itabadilika polepole ndani ya muda maalum.

Hiyo ni, mstari:

TEMPO 1012/1020 -TSRA BKN020CB

Itamaanisha:

  • [1012 / 1020] - kati ya saa 12 na 20 (Wakati wa Wastani wa Greenwich);
  • [-TSRA] - dhoruba ya radi (TS = radi) na mvua (RA = mvua) ya kiwango cha chini (ishara ya minus);
  • [BKN020CB] - muhimu (BKN = imevunjika), cumulonimbus (CB = cumulonimbus) mawingu katika futi 2000 (mita 610) juu ya usawa wa bahari.

Kuna maneno mengi ya hali ya hewa, na kukumbuka ni ngumu. Msimbo wa ombi la TAF umeandikwa kwa njia sawa.

Inapakia msimbo kwenye wingu

Ili tusipoteze muda, hebu tuchukue kiolezo cha telegram bot kutoka kwenye hazina yetu wingu-telegram-bot. Kuna iliyoandaliwa kabla mahitaji.txt ΠΈ kuanzisha.py na muundo sahihi wa saraka.

Kwa kuwa katika msimbo tutakuwa tukipata moduli pytaf, basi toleo lake linapaswa kuongezwa mara moja mahitaji.txt

pytaf~=1.2.1

  • Wacha tuendelee kuhariri bot/tele_bot.py. Tunaondoa vitu vyote visivyo vya lazima na kuongeza nambari yetu.

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)

  • Tunapakia saraka nzima kwenye kumbukumbu ya ZIP na kwenda kwenye jopo la kudhibiti kwenye kazi iliyoundwa.
  • Shinikiza Edit na kupakua kumbukumbu na msimbo.

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu

  • Jaza njia ya jamaa kwenye faili tele_bot (kiendelezi .py inaweza isibainishwe) na kitendakazi cha mwisho (katika mfano uliopewa hii ni kuu).
  • Katika sehemu Vigezo vya Mazingira kuandika variable TOKA na uwape ishara ya bot ya telegram inayotaka.
  • Shinikiza Hifadhi na Upanue, baada ya hapo tunaenda kwenye sehemu vichochezi.
  • Tunaweka kubadili Ombi la HTTPkuweka ombi hilo hadharani.

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Sasa tunayo URL ya kupiga chaguo hili hadharani. Kilichobaki ni sanidi kitabu cha wavuti. Tafuta bot yetu @SelectelServerless_bot kwenye Telegraph na usajili bot yako kwa amri:

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

Matokeo

Ikiwa kila kitu kimefanywa kwa usahihi, bot yako itaanza kufanya kazi mara moja na kuonyesha ripoti ya hivi karibuni ya hali ya hewa ya anga moja kwa moja kwenye mjumbe.

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu
Bila shaka, kanuni inaweza kuboreshwa, lakini hata katika hali yake ya sasa ni ya kutosha kujua hali ya hewa sahihi zaidi na utabiri kutoka kwa chanzo cha kuaminika.

Utapata toleo kamili la nambari katika yetu hazina kwenye GitHub.

Utabiri sahihi zaidi wa hali ya hewa: bot kwa Telegraph kwenye kazi za wingu

Chanzo: mapenzi.com

Kuongeza maoni