
Es gibt viele Dienste, die Wetterinformationen bereitstellen, aber welchen sollte man glauben? Als ich viel mit dem Radfahren anfing, wollte ich die genauesten Informationen über die Wetterbedingungen an dem Ort haben, an dem ich fahre.
Der erste Gedanke war, eine kleine DIY-Wetterstation mit Sensoren zu bauen und Daten davon zu empfangen. Aber ich habe das Rad nicht neu erfunden und Wetterinformationen ausgewählt, die in der Zivilluftfahrt verwendet werden, nämlich METAR (METeorological Aerodrome Report) und TAF (TAF - Terminal Aerodrome Forecast) als Quelle verifizierter Daten . In der Luftfahrt hängt das Leben von Hunderten von Menschen vom Wetter ab, sodass Prognosen so genau wie möglich sind.
Diese Informationen werden rund um die Uhr ausgestrahlt durch Stimme bei jedem modernen Flugplatz in Form von ATIS (Automatic Terminal Information Service) und VOLMET (von Französisch vol - Flug und météo - Wetter). Der erste liefert Informationen über das tatsächliche Wetter am Flughafen und der zweite liefert eine Vorhersage für die nächsten 24 bis 30 Stunden, nicht nur am Rundfunkflughafen, sondern auch an anderen.
Ein Beispiel für ATIS am Flughafen Vnukovo:
Beispiel für VOLMET am Flughafen Vnukovo
Es ist unpraktisch, jedes Mal einen Radioscanner oder Transceiver in den entsprechenden Bereich mitzunehmen, und ich wollte in Telegram einen Bot erstellen, mit dem ich per Knopfdruck dieselbe Vorhersage erhalten kann. Das Zuweisen eines separaten Servers hierfür ist zumindest unpraktisch, ebenso wie das Weiterleiten von Anforderungen an die Himbeere zu Hause.
Aus diesem Grund habe ich mich entschieden, den Selectel Cloud Functions- Dienst als Backend zu verwenden . Die Anzahl der Anfragen wird vernachlässigbar sein, so dass dieser Service praktisch kostenlos ist (nach meinen Berechnungen sind es 22 Rubel pro 100.000 Anfragen).
Backend-Vorbereitung
Funktionserstellung
Öffnen Sie in der Systemsteuerung my.selectel.ru die Ansicht Cloud Platform und erstellen Sie ein neues Projekt:

Wechseln Sie nach dem Erstellen des Projekts zum Abschnitt Funktionen :

Klicken Sie auf die Schaltfläche Funktion erstellen und geben Sie den gewünschten Namen ein:

Nachdem Sie auf Funktion erstellen geklickt haben , wird eine Ansicht der erstellten Funktion angezeigt:

Bevor Sie mit dem Erstellen von Python-Code beginnen, müssen Sie in Telegram einen Bot erstellen. Ich werde nicht beschreiben, wie dies gemacht wird - detaillierte Anweisungen finden Sie in unserer Wissensdatenbank . Die Hauptsache für uns ist das Token des erstellten Bots.
Den Code kochen
Ich habe die National Oceanic and Atmospheric Administration (NOAA) als Quelle für zuverlässige Daten ausgewählt. Diese wissenschaftliche Agentur aktualisiert die Daten auf ihrem Server in Echtzeit im TXT-Format.
Link zum Abrufen von METAR-Daten (beachten Sie den Fall):
https://tgftp.nws.noaa.gov/data/observations/metar/stations/< ICAO>.TXT
In meinem Fall ist der nächstgelegene Flughafen Vnukovo, sein ICAO-Code ist UUWW . Wenn Sie zur generierten URL gehen, erhalten Sie Folgendes:
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
Die erste Zeile ist die Zeit, zu der die Prognose nach Greenwich Mean Time auf dem neuesten Stand ist. Die zweite Zeile ist eine Zusammenfassung des tatsächlichen Wetters. Piloten der Zivilluftfahrt werden leicht verstehen, was diese Linie bedeutet, aber wir brauchen eine Entschlüsselung:
- [UUWW] - Vnukovo, Moskau (Russland - RU);
- [101130Z] - 10. Tag des Monats, 11:30 GMT;
- [31004MPS] - Windrichtung 310 Grad, Geschwindigkeit 4 m / s;
- [9999] - horizontale Sichtweite 10 km oder mehr;
- [SCT048] - verstreute / verstreute Wolken in einer Höhe von ~ 1584 m (4800 Fuß);
- [24/13] - Temperatur 24 ° C, Taupunkt 13 ° C;
- [Q1014] - Druck (QNH) 1014 Hektopascal (750 mm Hg);
- [R01 / 000070] - Adhäsionskoeffizient auf Spur 01 - 0,70;
- [NOSIG] - keine wesentlichen Änderungen.
Beginnen wir mit dem Schreiben des Programmcodes. Zunächst müssen Sie die Anforderungs- und Pytaf-Funktionen importieren :
from urllib import request
import pytaf
Geben Sie Variablen an und bereiten Sie die Dekodierungsfunktion vor:
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()
Fahren wir mit TAF fort (Register ist ebenfalls wichtig).
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/< ICAO>.TXT
Sehen wir uns wie im vorherigen Beispiel die Prognose am Flughafen Vnukovo an:
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
Achten Sie besonders auf die Linien TEMPO und BECMG . TEMPO bedeutet, dass sich das tatsächliche Wetter während des angegebenen Zeitraums regelmäßig ändert. BECMG - Das Wetter ändert sich während des angegebenen Zeitraums allmählich.
Das heißt, die Linie:
TEMPO 1012/1020 -TSRA BKN020CB
Bedeutet:
- [1012/1020] - zwischen 12:00 und 20:00 (GMT);
- [-TSRA] - Gewitter (TS = Gewitter) mit Regen (RA = Regen) geringer Intensität (Minuszeichen);
- [BKN020CB] Signifikante (BKN = gebrochene) Cumulonimbus-Wolken (CB = Cumulonimbus) in 610 Metern Höhe über dem Meeresspiegel.
Es gibt viele Begriffe für Wetterphänomene, und es ist schwierig, sich an sie zu erinnern. Der Code für eine TAF-Anfrage wird auf ähnliche Weise geschrieben.
Hochladen des Codes in die Cloud
Um keine Zeit zu verschwenden, nehmen wir eine Telegramm-Bot-Vorlage aus unserem Cloud-Telegramm-Bot- Repository . Es gibt eine vorbereitete Anforderung.txt und setup.py mit der richtigen Verzeichnisstruktur.
Da wir uns im Code auf das pytaf- Modul beziehen , sollte seine Version sofort zur Datei "resources.txt" hinzugefügt werden
pytaf~=1.2.1
- Gehen wir zur Bearbeitung von bot / tele_bot.py . Wir entfernen alle unnötigen und fügen unseren Code hinzu.
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)
- Packen Sie das gesamte Verzeichnis in ein ZIP-Archiv und wechseln Sie in der Systemsteuerung zur erstellten Funktion.
- .

- tele_bot ( .py ) - ( main).
- TOKEN -.
- , .
- HTTP-, .

Wir haben jetzt eine URL für einen öffentlichen Funktionsaufruf. Es bleibt nur die Konfiguration des Webhooks . Finden Sie unseren Bot @SelectelServerless_bot in Telegram und registrieren Sie Ihren Bot mit dem Befehl:
/setwebhook <you bot token> <public URL of your function>
Ergebnis
Wenn alles richtig gemacht ist, beginnt Ihr Bot sofort zu arbeiten und zeigt den aktuellen Flugwetterbericht direkt im Messenger an.

Natürlich kann der Code geändert werden, aber selbst im aktuellen Zustand reicht es aus, das genaueste Wetter und die genaueste Vorhersage aus einer vertrauenswürdigen Quelle zu ermitteln.
Die Vollversion des Codes finden Sie in unserem Repository auf GitHub .
