Sunt multa officia, quae tempestatum informationem praebent, sed cui credere debetis? Cum saepe revolutio incepi, accuratissimas informationes habere volui de tempestatum in loco ubi veho.
Prima cogitatio mea erat parvam DIY stationem tempestatis cum sensoriis aedificare et inde data accipere. Ego autem non "rotam reinveniendi" et notationes tempestatum delegit quae in civili aviatione adhibita sunt ut fons notitiarum verificantium, scilicet METAR (Meteorological Aerodrome Report) et OMEGA (TAF - Terminal Aerodrome Data). In aeroplano, vitas centenariorum hominum a tempestatibus pendent, tam praenotiones quam accuratissime fieri possunt.
Haec notitia passim XNUMX/XNUMX voce ad omnem airfield modernam in forma ATIS (Automatic Terminal Information Service) and VOLMET (ex Gallico. v - fugae et météo — tempestas). Prima informationes praebet de ipsa tempestate in aere, secunda praenuntiativum proximorum 24-30 horarum praebet, non solum in aere passim, sed etiam in aliis.
Exemplum operationis ATIS apud aeroportum Vnukovo:
Exemplum quomodo VOLMET operatur in Vnukovo Airport
Incommodum est deferre scanner vel transceiver apud te omni tempore pro iugi congruente, et volebam automata in Telegram creare quod, in pressione globuli, permittit te ut idem praevideat. Impracticum saltem est singulas huic servo collocare, necnon petitiones tuas mittere ad domum tuam Raspberry.
Quapropter uti munus statui quasi backend
Backend praeparatio
Munus creare
In imperium panel
Post consilium creatum est, vade ad sectionem munera:
urna ipsum Munus creare et da nomen optatum;
Post urgeat Munus creare repraesentationem functionis creatae habebimus;
Priusquam codicem in Pythone creare incipias, opus erit autocinetum in Telegram creare. Non describere quomodo hoc fiat - sunt mandata detailed
Praeparans codice
Nationalem Oceanicam et Administrationem atmosphaericam (NOAA) ut fontem certae notitiae elegi. Haec procuratio scientifica renovat notitias in reali tempore in servo suo in forma TXT.
Link to get METAR data (note causa):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT
In casu meo, proximus aeriportus Vnukovo est, eius ICAO signum est UUWW. URL ad generatum dabit sequentia:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
Prima linea est praesens tempus praesagio in Greenwich Tempus medium. Secundus versus est summa tempestas. Gubernatores civiles aeroplano haud difficulter intellegentes quid haec linea significet, sed explicatione indigemus;
- [UUWW] — Vnukovo, Moscovia (Russia — RU);
- [101130Z] - Die 10 mensis, 11:30 sum GMT;
- [31004MPS] — directio venti 310 gradus, velocitas 4 m/s;
- [9999] - visibilis horizontalis 10 km vel plus;
- [SCT048] — sparsas nubes 4800 pedes (~1584 m);
- [XX / 24] — temperatura 24°C, punctum roris 13°C;
- [Q1014] — pressio (QNH) 1014 hectopascalum (750 mm Hg);
- [R01/000070] — coefficiens adhaesionis in lane 01 — 0,70;
- [NOSIG] — sine notabili mutatione.
Incipiamus scribere programma codice. Primum opus est ad munera importare request и pytaf:
from urllib import request
import pytaf
Variabiles specificare et functionem decoctionis praeparare;
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()
Transeamus ad TAF (causa etiam magni momenti est).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT
Sicut in exemplo praecedente, inspiciamus praesagio in aeroporto 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
Maxime attendamus ad lineas TEMPUS и BECMG. TEMPO significat ipsam tempestatem per tempus definitum mutare temporibus. BECMG - tempestas intra certum temporis spatium paulatim mutabit.
Id est, recta;
TEMPO 1012/1020 -TSRA BKN020CB
Dicet:
- [XX / 1012] - inter XII et XX horas (Greenwich Tempus medium);
- [-TSRA] — tonitrui (TS = tonitrui) cum pluvia (RA = pluvia) gravis intensionis (signum minus);
- [BKN020CB] - Significans (BKN = fractus), cumulonimbus (CB = cumulonimbus) nubes ad MM pedes (2000 m) supra mare planum.
Termini tempestatis phaenomenorum satis multae sunt, earumque memoria difficilis est. Codex enim postulationis TAF simili modo scriptus est.
Discas signum in nube
Ne tempus morer, telegraphum e repositorio nostro sumamus
Cum in codice erimus accessu moduli pytaf, dein eius versio statim addatur requirements.txt
pytaf~=1.2.1
- Transeamus ut emendo bot/tele_bot.py. Omnia superflua tollimus et codicem nostrum addimus.
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)
- Totam presul in ZIP tabularium colligemus et ad tabulam moderandam ad munus creatum applicamus.
- torcular recensere et depone archivum cum codice.
- Replete in relativo itinere in tabella tele_bot (Extensio' .py non potest specificari) et terminus functionis (per exemplum hoc datum est" summa).
- sectioni Environment Variabiles scribere variabilis INDICIUM et signum telegraphi desiderati adscribe bot.
- torcular Salvum ac Expandpost quem ad sectionem itur triggers.
- Posuimus switch HTTP requestad petitionem publicam.
Nunc domicilium habemus ad munus vocatum publice. Quod reliquum est
/setwebhook <you bot token> <public URL of your function>
exitum
Si omnia recte aguntur, automati opus tuum statim incipiet et relationem ultimam tempestatum aviationum directe in nuntio ostendet.
Scilicet, codicem emendari potest, sed etiam in statu currenti satis est explorare accuratissimam tempestatem et praenuntiationem ex fidenti fonte.
Plenam versionem codicis in nostro invenies
Source: www.habr.com