Nui nā lawelawe e hāʻawi ana i ka ʻike o ka wā, akā ʻo wai kahi āu e hilinaʻi ai? I koʻu hoʻomaka ʻana i ke kaʻa kaʻa pinepine, makemake au e loaʻa ka ʻike pololei loa e pili ana i ke ʻano o ke aniau ma kahi aʻu e holo ai.
ʻO koʻu manaʻo mua, ʻo ia ke kūkulu ʻana i kahi kikowaena DIY liʻiliʻi me nā mea ʻike a loaʻa ka ʻikepili mai ia mea. Akā ʻaʻole wau i "hou i ka huila" a koho i ka ʻike o ka wā i hoʻohana ʻia i ka mokulele kīwila i kumu o ka ʻikepili i hōʻoia ʻia, ʻo ia hoʻi. METAR (METeorological Aerodrome Report) a TAF (TAF - Hōʻike Manaʻo Aerodrome Terminal). Ma ka mokulele, hilinaʻi ke ola o nā haneli o ka poʻe i ka lewa, no laila ua pololei nā wānana.
Hoʻolaha ʻia kēia ʻike XNUMX/XNUMX ma ka leo ma kēlā me kēia kahua mokulele o kēia manawa ma ke ʻano ATIS (Automatic Terminal Information Service) a VOLMET (mai Palani. vol - lele a météo - ka makani). Hāʻawi ka mea mua i ka ʻike e pili ana i ke aniau maoli ma ke kahua mokulele, a ʻo ka lua e hāʻawi i kahi wānana no nā hola 24-30 e hiki mai ana, ʻaʻole wale ma ke kahua mokulele hoʻolaha, akā ma nā mea ʻē aʻe.
Ka laʻana o ka hana ATIS ma Vnukovo airport:
He laʻana o ka hana ʻana o VOLMET ma Vnukovo Airport
He mea maʻalahi ka lawe ʻana i kahi scanner radio a i ʻole transceiver me ʻoe i kēlā me kēia manawa no ka laulā kūpono, a makemake wau e hana i kahi bot ma Telegram e hiki ai iā ʻoe ke loaʻa ka wānana like. ʻAʻole hiki ke hoʻokaʻawale i kahi kikowaena kaʻawale no kēia, a me ka hoʻouna ʻana i nā noi i kou home Raspberry.
No laila, ua hoʻoholo wau e hoʻohana i ka lawelawe ma ke ʻano he backend
Hoʻomākaukau hope
Hana i kahi hana
I ka papa mana
Ma hope o ka hana ʻana o ka papahana, e hele i ka ʻāpana Nā hana:
Pahu i ka pihi Hana i kahi hana a hāʻawi i ka inoa i makemake ʻia:
Ma hope o ke kaomi ʻana Hana i kahi hana e loaʻa iā mākou kahi hōʻike o ka hana i hana ʻia:
Ma mua o kou hoʻomaka ʻana e hana i ka code ma Python, pono ʻoe e hana i kahi bot ma Telegram. ʻAʻole wau e wehewehe pehea e hana ʻia ai - aia nā ʻōlelo kikoʻī
Hoʻomākaukau i ke code
Ua koho au i ka National Oceanic and Atmospheric Administration (NOAA) ma ke ʻano he kumu o ka ʻikepili hilinaʻi. Hoʻopuka kēia ʻoihana ʻepekema i ka ʻikepili i ka manawa maoli ma kāna kikowaena ma TXT format.
Link e kiʻi i ka ʻikepili METAR (e nānā i ka hihia):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT
I koʻu hihia, ʻo Vnukovo ka mokulele kokoke loa, ʻo kāna code ICAO UUWW. Ke hele nei i ka URL i hana ʻia e hāʻawi i kēia:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
ʻO ka laina mua ka manawa o ka wānana ma Greenwich Mean Time. ʻO ka laina ʻelua he hōʻuluʻulu o ke aniau maoli. ʻAʻole pilikia ka poʻe hoʻokele mokulele civil i ka hoʻomaopopo ʻana i ke ʻano o kēia laina, akā pono mākou i wehewehe:
- [UUWW] - Vnukovo, Moscow (Russia - RU);
- [101130Z] — La 10 o ka malama, 11:30 am GMT;
- [31004MPS] — kuhikuhi makani 310 degere, māmā holo 4 m/s;
- [9999] — ʻike ākea 10 km a ʻoi aku paha;
- [SCT048] — nā ao hoʻopuehu/puehu ma 4800 kapuaʻi (~1584m);
- [24/13] — ka mahana 24°C, ka hau 13°C;
- [Q1014] - kaomi (QNH) 1014 hectopascals (750 mm Hg);
- [R01/000070] - coefficient o ka pili ana ma ke ala 01 - 0,70;
- [NOSIG] - me nā loli nui ʻole.
E hoʻomaka kākou e kākau i ka code program. Pono mua ʻoe e hoʻokomo i nā hana noi и pytaf:
from urllib import request
import pytaf
E wehewehe i nā mea hoʻololi a hoʻomākaukau i ka hana decoding:
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()
E neʻe kākou i ka TAF (he mea nui hoʻi ka hihia).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT
E like me ka laʻana mua, e nānā kākou i ka wānana ma ke kahua mokulele ʻo 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
E nānā pono kākou i nā laina TEMPO и BECMG. 'O TEMPO 'o ia ho'i, e ho'ololi ke aniau maoli i ka manawa i kuhikuhi 'ia. BECMG - e loli mālie ke aniau i loko o kahi manawa i kuhikuhi ʻia.
ʻO ia ka laina:
TEMPO 1012/1020 -TSRA BKN020CB
ʻO ke ʻano:
- [1012/1020] — ma waena o 12 a me 20 hola (Greenwich Mean Time);
- [-TSRA] - ka hekili (TS = thunderstorm) me ka ua (RA = ka ua) o ka ikaika haʻahaʻa (hōʻailona hōʻemi);
- [BKN020CB] - nui (BKN = haki), cumulonimbus (CB = cumulonimbus) ao ma 2000 kapuaʻi (610 mika) ma luna o ka ʻilikai.
Nui nā huaʻōlelo no nā ʻano ʻano o ka wā, a paʻakikī ka hoʻomanaʻo ʻana iā lākou. Ua kākau ʻia ke code no ka noi TAF ma ke ʻano like.
Ke hoʻouka nei i ke code i ke ao
I mea e pau ʻole ai ka manawa, e lawe kāua i kahi hoʻohālike bot telegram mai kā mākou waihona
No ka mea ma ke code e komo mākou i ka module pytaf, a laila e hoʻohui koke ʻia kona mana i koi.txt
pytaf~=1.2.1
- E neʻe kākou i ka hoʻoponopono bot/tele_bot.py. Wehe mākou i nā mea pono ʻole a hoʻohui i kā mākou code.
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)
- Hoʻopili mākou i ka papa kuhikuhi holoʻokoʻa i kahi waihona ZIP a hele i ka papa mana i ka hana i hana ʻia.
- Kui ʻū Hoʻoponopono a hoʻoiho i ka waihona me ke code.
- E hoʻopiha i ke ala pili i ka faila tele_bot (hoʻonui .py ʻAʻole hiki ke kuhikuhi ʻia) a me kahi hana hope (ma ka laʻana i hāʻawi ʻia ʻo ia ka papa kuhikuhiE).
- pauku Nā Hoʻololi Kaiapuni e kakau i ka hoololi TOKENA a hāʻawi iā ia i ka hōʻailona o ka bot telegram i makemake ʻia.
- Kui ʻū Mālama a hoʻonui, a laila hele mākou i ka ʻāpana nā mea hoʻoulu.
- Hoʻokomo mākou i ka hoʻololi noi HTTPe hoolaha i ke noi.
Loaʻa iā mākou kahi URL no ke kāhea ʻana i ka hana. ʻO nā mea i koe
/setwebhook <you bot token> <public URL of your function>
hopena
Inā hana pololei nā mea a pau, e hoʻomaka koke kāu bot e hana a hōʻike pololei i ka hōʻike ʻana i ka ʻelele mokulele hou loa.
ʻOiaʻiʻo, hiki ke hoʻomaikaʻi ʻia ke code, akā ʻoiai i kona kūlana i kēia manawa ua lawa ia e ʻike i ka ʻike kūpono loa a me ka wānana mai kahi kumu hilinaʻi.
E ʻike ʻoe i ka mana piha o ke code ma kā mākou
Source: www.habr.com