Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Muaj ntau cov kev pabcuam uas muab cov ntaub ntawv huab cua, tab sis qhov twg koj yuav tsum ntseeg? Thaum kuv pib caij tsheb kauj vab ntau zaus, kuv xav kom muaj cov ntaub ntawv tseeb tshaj plaws txog huab cua hauv qhov chaw uas kuv caij.

Kuv thawj qhov kev xav yog tsim lub chaw nres tsheb me me DIY huab cua nrog cov sensors thiab tau txais cov ntaub ntawv los ntawm nws. Tab sis kuv tsis tau "rov tsim lub log" thiab xaiv cov ntaub ntawv huab cua uas siv hauv kev dav hlau dav hlau los ntawm cov ntaub ntawv pov thawj, uas yog HLUB (METeorological Aerodrome Report) thiab hauj lwm (TAF - Terminal Aerodrome Forecast). Hauv aviation, ntau pua tus neeg lub neej nyob ntawm huab cua, yog li kev kwv yees tau raug raws li qhov ua tau.

Cov ntaub ntawv no tau tshaj tawm XNUMX/XNUMX los ntawm lub suab ntawm txhua lub tshav dav hlau niaj hnub hauv daim ntawv ATIS (Tsis Siv Neeg Terminal Information Service) thiab VOLMET (los ntawm Fabkis. vol - dav hlau thiab mΓ©tΓ©o - huab cua). Thawj zaug muab cov ntaub ntawv hais txog huab cua tiag tiag ntawm lub tshav dav hlau, thiab qhov thib ob muab kev kwv yees rau 24-30 teev tom ntej, tsis yog ntawm lub tshav dav hlau tshaj tawm, tab sis kuj ntawm lwm tus.

Piv txwv ntawm ATIS ua haujlwm ntawm Vnukovo tshav dav hlau:

Ib qho piv txwv ntawm yuav ua li cas VOLMET ua haujlwm ntawm Vnukovo tshav dav hlau

Nws tsis yooj yim los nqa lub xov tooj cua scanner lossis transceiver nrog koj txhua lub sijhawm rau qhov sib thooj, thiab kuv xav tsim ib lub bot hauv Telegram uas, ntawm qhov nias ntawm lub pob, tso cai rau koj kom tau txais tib qhov kev kwv yees. Nws yog qhov tsawg kawg yog qhov ua tsis tau zoo los faib cov neeg rau zaub mov cais rau qhov no, nrog rau xa cov lus thov rau koj lub tsev Raspberry.

Yog li ntawd, kuv txiav txim siab los siv qhov kev pabcuam ua tus backend Selectel Cloud Features. Tus naj npawb ntawm kev thov yuav tsis tsim nyog, yog li qhov kev pabcuam no yuav tsis pub dawb (raws li kuv suav, nws yuav yog 22 rubles rau 100 thov).

Backend npaj

Tsim ib qho Function

Hauv Control Vaj Huam Sib Luag kuv.selectel.ru qhib qhov pom Huab platform thiab tsim ib qhov project tshiab:

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Tom qab tsim qhov project, mus rau ntu Zog:

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Nias lub khawm Tsim ib txoj haujlwm thiab muab nws lub npe xav tau:

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Tom qab nias Tsim ib txoj haujlwm peb yuav muaj ib tug sawv cev ntawm qhov tsim muaj nuj nqi:

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Ua ntej koj pib tsim cov cai hauv Python, koj yuav tsum tsim ib qho bot hauv Telegram. Kuv yuav tsis piav qhia qhov no ua li cas - muaj cov lus qhia ntxaws hauv peb lub hauv paus kev paub. Qhov tseem ceeb tshaj plaws rau peb yog lub cim ntawm tus tsim bot.

Npaj cov cai

Kuv tau xaiv National Oceanic and Atmospheric Administration (NOAA) ua cov ntaub ntawv ntseeg tau. Lub koom haum tshawb fawb no hloov kho cov ntaub ntawv hauv lub sijhawm ntawm nws lub server hauv TXT hom.

Txuas kom tau txais METAR cov ntaub ntawv (ceeb toom rooj plaub):

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

Hauv kuv qhov xwm txheej, lub tshav dav hlau ze tshaj plaws yog Vnukovo, nws txoj cai ICAO yog UUWW. Mus rau qhov tsim URL yuav muab cov hauv qab no:

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

Thawj kab yog lub sijhawm tam sim no ntawm kev kwv yees hauv Greenwich Mean Time. Cov kab thib ob yog cov ntsiab lus ntawm huab cua tiag tiag. Civil aviation pilots yuav tsis muaj teeb meem nkag siab tias kab no txhais li cas, tab sis peb xav tau kev piav qhia:

  • [UUWW] - Vnukovo, Moscow (Russia - RU);
  • [101130 Z] - 10 hnub ntawm lub hli, 11:30 teev sawv ntxov GMT;
  • [31004MPS] - cua kev taw qhia 310 degrees, ceev 4 m / s;
  • [9999] - kab rov tav visibility 10 km lossis ntau dua;
  • [SCT048] - huab cua tawg ri niab ntawm 4800 ko taw (~ 1584 m);
  • [24/13/XNUMX] - kub 24 Β° C, dew point 13 Β° C;
  • [Q1014] - siab (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - coefficient ntawm adhesion ntawm txoj kab 01 - 0,70;
  • [NOSIG] - tsis muaj kev hloov pauv tseem ceeb.

Cia peb pib sau qhov program code. Ua ntej koj yuav tsum import functions thov ΠΈ pytaf:

from urllib import request
import pytaf

Qhia kom meej cov variables thiab npaj lub decoding muaj nuj nqi:

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

Cia peb mus rau TAF (cov ntaub ntawv tseem ceeb).

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

Raws li nyob rau hauv cov piv txwv yav dhau los, cia peb saib qhov kev kwv yees ntawm lub tshav dav hlau 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

Cia peb tshwj xeeb mloog rau cov kab TEMPO ΠΈ BECMG. TEMPO txhais tau hais tias huab cua tiag tiag thaum lub sijhawm teev tseg yuav hloov pauv ib ntus. BECMG - huab cua yuav maj mam hloov nyob rau hauv ib lub sij hawm teev.

Ntawd yog, kab:

TEMPO 1012/1020 -TSRA BKN020CB

Yuav txhais tau tias:

  • [1012/1020/XNUMX] - nruab nrab ntawm 12 thiab 20 teev (Greenwich Mean Time);
  • [-TSRA] - thunderstorm (TS = thunderstorm) nrog los nag (RA = nag) ntawm kev siv qis (muab kos npe);
  • [BKN020CB] - tseem ceeb (BKN = tawg), cumulonimbus (CB = cumulonimbus) huab ntawm 2000 ko taw (610 meters) saum hiav txwv theem.

Muaj ntau ntau cov ntsiab lus rau huab cua tshwm sim, thiab nco ntsoov lawv yog qhov nyuaj. Cov cai rau TAF thov yog sau rau hauv ib txoj kev zoo sib xws.

Uploading code rau huab

Txhawm rau kom tsis txhob nkim sijhawm, cia peb coj tus qauv telegram bot los ntawm peb lub chaw cia khoom huab-telegram-bot. Muaj kev npaj ua ntej tsuav .txt ΠΈ setup.py nrog rau qhov tseeb directory qauv.

Txij li thaum nyob rau hauv cov cai peb yuav tau nkag mus rau lub module pytaf, ces nws version yuav tsum tam sim ntawd ntxiv rau tsuav .txt

pytaf~=1.2.1

  • Wb mus rau qhov kho kom raug ib/tele_bot.py. Peb tshem tawm txhua yam tsis tsim nyog thiab ntxiv peb cov cai.

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)

  • Peb ntim tag nrho cov npe rau hauv ZIP archive thiab mus rau lub vaj huam sib luag tswj mus rau qhov tsim muaj nuj nqi.
  • Laub Kho kom raug thiab download tau lub archive nrog cov cai.

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm

  • Sau rau hauv txoj kev txheeb ze hauv cov ntaub ntawv tele_bot (extension .py tej zaum yuav tsis tau teev tseg) thiab qhov kawg ua haujlwm (hauv qhov piv txwv muab qhov no yog ntsiab).
  • seem Environment Variables sau qhov sib txawv TOKEN thiab muab nws lub token ntawm qhov xav tau telegram bot.
  • Laub Txuag thiab nthuav, tom qab ntawd peb mus rau ntu ua rau.
  • Peb muab qhov hloov HTTP thovlos ua qhov kev thov rau pej xeem.

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Peb tam sim no muaj qhov URL rau kev hu xov tooj rau pej xeem. Tag nrho cov ntawd yog lawm configure webhook. Nrhiav peb bot @SelectelServerless_bot hauv Telegram thiab sau npe koj bot nrog cov lus txib:

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

tshwm sim

Yog tias txhua yam ua tiav yog lawm, koj lub bot yuav pib ua haujlwm tam sim ntawd thiab tso tawm cov ntawv tshaj tawm huab cua tshiab ncaj qha rau hauv tus tub txib.

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm
Tau kawg, txoj cai tuaj yeem txhim kho, tab sis txawm tias nyob rau hauv nws lub xeev tam sim no nws txaus los nrhiav cov huab cua raug tshaj plaws thiab kev kwv yees los ntawm qhov chaw ntseeg siab.

Koj yuav pom tag nrho version ntawm tus lej hauv peb repositories ntawm GitHub.

Huab cua qhov tseeb tshaj plaws: bot rau Telegram ntawm huab ua haujlwm

Tau qhov twg los: www.hab.com

Ntxiv ib saib