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
Backend npaj
Tsim ib qho Function
Hauv Control Vaj Huam Sib Luag
Tom qab tsim qhov project, mus rau ntu Zog:
Nias lub khawm Tsim ib txoj haujlwm thiab muab nws lub npe xav tau:
Tom qab nias Tsim ib txoj haujlwm peb yuav muaj ib tug sawv cev ntawm qhov tsim muaj nuj nqi:
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
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
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.
- 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.
Peb tam sim no muaj qhov URL rau kev hu xov tooj rau pej xeem. Tag nrho cov ntawd yog lawm
/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.
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
Tau qhov twg los: www.hab.com