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
Maandalizi ya nyuma
Unda kipengele cha kukokotoa
Katika jopo la kudhibiti
Baada ya mradi kuundwa, nenda kwenye sehemu Kazi:
Pushisha kifungo Unda kipengele cha kukokotoa na upe jina unalotaka:
Baada ya kushinikiza Unda kipengele cha kukokotoa tutakuwa na uwakilishi wa kazi iliyoundwa:
Kabla ya kuanza kuunda nambari kwenye Python, utahitaji kuunda bot kwenye Telegraph. Sitaelezea jinsi hii inafanywa - kuna maagizo ya kina
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
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.
- 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.
Sasa tunayo URL ya kupiga chaguo hili hadharani. Kilichobaki ni
/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.
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
Chanzo: mapenzi.com