Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
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 Selectel Cloud Features. Numerus petitionum neglegendus erit, ergo talis servitus virtualiter libera erit (secundum rationes meas, erit 22 rublorum pro 100 petitionibus).

Backend praeparatio

Munus creare

In imperium panel my.selectel.ru visum aperire Nubes suggestus et novum consilium creare:

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
Post consilium creatum est, vade ad sectionem munera:

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
urna ipsum Munus creare et da nomen optatum;

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
Post urgeat Munus creare repraesentationem functionis creatae habebimus;

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
Priusquam codicem in Pythone creare incipias, opus erit autocinetum in Telegram creare. Non describere quomodo hoc fiat - sunt mandata detailed in scientia nostra basi. Summa nobis est signum automatis creati.

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 nubilum telegraphum. Est pre-paratus requirements.txt и setup.py cum recta structuram presul.

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.

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera

  • 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.

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
Nunc domicilium habemus ad munus vocatum publice. Quod reliquum est configurare webhook. Reperio nostri bot @SelectelServerless_bot in Telegram ac subcriptio tuum bot cum imperio:

/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.

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera
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 repositoria in GitHub.

Accuratissimum tempestas praenuntientur: bot ad Telegram in nube munera

Source: www.habr.com

Add a comment