Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Það er fullt af þjónustu sem veitir veðurupplýsingar, en hverjum ættir þú að treysta? Þegar ég byrjaði að hjóla oft vildi ég hafa sem nákvæmastar upplýsingar um veðurskilyrði á þeim stað sem ég hjóla á.

Fyrsta hugsun mín var að byggja litla DIY veðurstöð með skynjurum og taka á móti gögnum frá henni. En ég „fann ekki upp hjólið aftur“ og valdi veðurupplýsingar sem eru notaðar í almenningsflugi sem uppspretta sannreyndra gagna, þ.e. METAR (Veðurfræðiflugvallarskýrsla) og TAF (TAF - Terminal Aerodrome Forecast). Í flugi er líf hundruða manna háð veðri og því eru spár eins nákvæmar og hægt er.

Þessar upplýsingar eru sendar út XNUMX/XNUMX með rödd á öllum nútíma flugvöllum í formi ATIS (Sjálfvirk flugstöðvarupplýsingaþjónusta) og VOLMET (úr frönsku. vol - flug og Météo - veður). Sá fyrsti gefur upplýsingar um raunverulegt veður á flugvellinum og sá síðari gefur spá fyrir næstu 24-30 klukkustundir, ekki aðeins á útsendingarvellinum, heldur einnig á öðrum.

Dæmi um starfsemi ATIS á Vnukovo flugvelli:

Dæmi um hvernig VOLMET virkar á Vnukovo flugvelli

Það er óþægilegt að hafa útvarpsskanni eða senditæki með sér í hvert skipti fyrir samsvarandi svið, og ég vildi búa til vélmenni í Telegram sem, með því að smella á hnapp, gerir þér kleift að fá sömu spá. Það er að minnsta kosti óraunhæft að úthluta sérstökum netþjóni fyrir þetta, auk þess að senda beiðnir heim til Raspberry.

Þess vegna ákvað ég að nota þjónustuna sem bakhlið Veldu skýjaeiginleika. Fjöldi beiðna verður hverfandi, þannig að slík þjónusta verður nánast ókeypis (samkvæmt mínum útreikningum mun það vera 22 rúblur fyrir 100 beiðnir).

Undirbúningur bakenda

Búðu til aðgerð

Í stjórnborðinu my.selectel.ru opna útsýnið Cloud pallur og búa til nýtt verkefni:

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Eftir að verkefnið er búið til skaltu fara í hlutann Aðgerðir:

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Ýttu á takkann Búðu til aðgerð og gefðu því nafnið sem þú vilt:

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Eftir að hafa ýtt á Búðu til aðgerð við munum hafa framsetningu á stofnuðu falli:

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Áður en þú byrjar að búa til kóða í Python þarftu að búa til vélmenni í Telegram. Ég mun ekki lýsa því hvernig þetta er gert - það eru nákvæmar leiðbeiningar í þekkingargrunni okkar. Aðalatriðið fyrir okkur er tákn hins skapaða botn.

Að undirbúa kóðann

Ég valdi National Oceanic and Atmospheric Administration (NOAA) sem uppsprettu áreiðanlegra gagna. Þessi vísindastofnun uppfærir gögn í rauntíma á netþjóni sínum á TXT sniði.

Tengill til að fá METAR gögn (athugaðu málið):

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

Í mínu tilfelli er næsti flugvöllur Vnukovo, ICAO kóða hans er UUWW. Ef farið er á myndaða vefslóð gefur eftirfarandi:

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

Fyrsta línan er núverandi tími spárinnar á Greenwich Mean Time. Önnur línan er samantekt á raunverulegu veðri. Flugmenn í almenningsflugi munu ekki eiga í neinum vandræðum með að skilja hvað þessi lína þýðir, en við þurfum skýringu:

  • [UUWW] - Vnukovo, Moskvu (Rússland - HR);
  • [101130Z] — 10. dagur mánaðarins, 11:30 GMT;
  • [31004MPS] — vindátt 310 gráður, hraði 4 m/s;
  • [9999] — lárétt skyggni 10 km eða meira;
  • [SCT048] — dreifð/dreifð ský í 4800 fetum (~1584m);
  • [24 / 13] — hitastig 24°C, daggarmark 13°C;
  • [Q1014] — þrýstingur (QNH) 1014 hektópascals (750 mm Hg);
  • [R01/000070] — viðloðunarstuðull á braut 01 — 0,70;
  • [NOSIG] - án teljandi breytinga.

Við skulum byrja að skrifa forritskóða. Fyrst þarftu að flytja inn aðgerðir óska eftir и pytaf:

from urllib import request
import pytaf

Tilgreindu breyturnar og undirbúið afkóðunaraðgerðina:

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

Förum yfir í TAF (tilfelli er líka mikilvægt).

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

Eins og í fyrra dæmi, skulum við líta á spána á Vnukovo flugvelli:

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

Gætum sérstaklega að línunum TEMPO и BECMG. TEMPO þýðir að raunverulegt veður á tilgreindu tímabili mun breytast reglulega. BECMG - veðrið mun breytast smám saman innan ákveðins tíma.

Það er línan:

TEMPO 1012/1020 -TSRA BKN020CB

Mun meina:

  • [1012 / 1020] — á milli 12 og 20 klukkustundir (Greenwich meðaltími);
  • [-TSRA] — þrumuveður (TS = þrumuveður) með rigningu (RA = rigning) af lágum styrkleika (mínusmerki);
  • [BKN020CB] - veruleg (BKN = brotinn), cumulonimbus (CB = cumulonimbus) ský í 2000 fetum (610 metrum) yfir sjávarmáli.

Það eru ansi mörg hugtök yfir veðurfyrirbæri og erfitt er að muna þau. Kóðinn fyrir TAF beiðnina er skrifaður á svipaðan hátt.

Hleður upp kóða í skýið

Til þess að eyða ekki tíma, skulum við taka símskeyti bot sniðmát úr geymslunni okkar skýjasímskeyti-botni. Það er fyrirfram undirbúin kröfur.txt и setup.py með réttri möppuuppbyggingu.

Þar sem í kóðanum munum við fá aðgang að einingunni pytaf, þá ætti útgáfu þess strax að bætast við kröfur.txt

pytaf~=1.2.1

  • Við skulum halda áfram að klippa bot/tele_bot.py. Við fjarlægjum alla óþarfa hluti og bætum við kóðanum okkar.

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)

  • Við pökkum allri möppunni inn í ZIP skjalasafn og förum á stjórnborðið til að búa til aðgerðina.
  • Ýttu Breyta og hlaðið niður skjalasafninu með kóðanum.

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum

  • Fylltu út hlutfallslega slóðina í skránni tele_bot (framlenging .py má ekki tilgreina) og endapunktsfall (í dæminu sem gefið er er þetta helstu).
  • Í kafla Umhverfisbreytur skrifa breytu TOKEN og úthlutaðu því tákni viðkomandi símskeyti botni.
  • Ýttu Vista og stækkaðu, eftir það förum við í kaflann kveikir.
  • Við settum rofann HTTP beiðniað gera beiðnina opinbera.

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Við höfum nú slóð til að kalla aðgerðina opinberlega. Það eina sem er eftir er stilla webhook. Finndu botninn okkar @SelectelServerless_bot í Telegram og skráðu vélmanninn þinn með skipuninni:

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

Niðurstaðan

Ef allt er gert rétt mun vélmenni þinn strax byrja að vinna og birta nýjustu flugveðurskýrsluna beint í boðberanum.

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum
Auðvitað er hægt að bæta kóðann, en jafnvel í núverandi ástandi er það nóg að finna út nákvæmasta veður og spá frá traustum aðilum.

Þú finnur fulla útgáfu kóðans í okkar geymslur á GitHub.

Nákvæmasta veðurspáin: vélmenni fyrir Telegram á skýjaaðgerðum

Heimild: www.habr.com

Bæta við athugasemd