ááá¯ážáá±ááá¡áá»ááºá¡áááºááᯠáá±ážáá±á¬ááºááá·áº áááºáá±á¬ááºááŸá¯áá»á¬ážá
áœá¬ááŸááá±á¬áºáááºáž áááºááá·áºá¡áá¬ááᯠáá¯á¶ááŒááºááá·áºááááºážá áá»áœááºáá±á¬áº áááŒá¬áá á
ááºáá®ážá
á®ážáá¬áá²á·á¡áá«á áá»áœááºáá±á¬áºá
á®ážáá²á· áá±áá¬áá²á· áá¬áá®á¥áᯠá¡ááŒá±á¡áá±áá²á· áááºáááºááŒá®áž á¡áááá»áá¯á¶áž á¡áá»ááºá¡áááºááᯠááá»ááºáá²á·áááºá
á¡á¬áá¯á¶áá¶áááááá¬áá»á¬ážáá«ááŸááá±á¬ DIY ááá¯ážáá±ááá
áááºážáááºáá
áºáá¯ááᯠáááºáá±á¬ááºááŒá®áž áááºážáá¶á០áá±áá¬ááá°ááẠááááá¯á¶ážá
áááºáá°ážááŒá
áºáááºá áá«áá±ááá·áº áá« "áá®ážááᯠááŒááºáááºáá®ááœááºááŒááºáž" áááŒá¯áá²á·áá² á¡áááºáááºáá±ááŒá±á¬ááºážááŸá¬ á¡áá¯á¶ážááŒá¯áá²á· áá¬áá®á¥áá¯á¡áá»ááºá¡áááºááᯠá
áá
á
áºááŒá®áž áá±áá¬á¡áááºážá¡ááŒá
áºá¡ááŒá
áºá ááŒá±á¬ááááºá áá®áᬠ(METeorological Aerodrome Report) ááŸáá·áº á¡áá¯áẠ(TAF - Terminal Aerodrome ááá·áºááŸááºážáá»ááº)á áá±ááŒá±á¬ááºážáá»á¶áááºážááŸá¯ááœáẠáá°áá¬áá±á«ááºážáá»á¬ážá
áœá¬áá¡áááºááẠáá¬áá®á¥áá¯áá±á«áºááœááºáá°áááºáá±á¬ááŒá±á¬áá·áº ááá·áºááŸááºážáá»ááºáá»á¬ážááᯠáááºááá¯ááºááá»áŸ áááá»ááŸááºáááºá
á±áááºá
á€á¡áá»ááºá¡áááºááᯠáá¯á¶á
á¶ááŒáá·áº áá±ááºáá®áá±áá¬ááºááœááºážááá¯ááºážááœáẠá¡áá¶ááŒáá·áº XNUMX/XNUMX áá¯ááºááœáŸáá·áºáá«áááºá ATIS (Automatic Terminal Information Service) ááŸáá·áº VOLMET (ááŒááºáá
áºá០vol - áá±áá¬ááºááŸáá·áº météo - áá¬áá®á¥áá¯)á ááááá
áºáá¯á áá±áá¬ááºááœááºážááŸá á¡ááŸááºáááẠáá¬áá®á¥áá¯á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááᯠáá±ážáá±á¬ááºááŒá®áž áá¯ááááá
áºáá¯á áá¯ááºááœáŸáá·áºááá·áº áá±áá¬ááºááœááºážááœááºáá¬áá á¡ááŒá¬ážáá±á¬ááºááẠ24-30 áá¬áá®á¡ááœáẠááá·áºááŸááºážáá»ááºáá»á¬ážááᯠáá±ážáá«áááºá
Vnukovo áá±ááááºááŸá ATIS áááºáááºááŸá¯ á¥ááá¬-
Vnukovo áá±ááááºááœáẠVOLMET á¡áá¯ááºáá¯ááºáá¯á¶ á¥ááá¬
áááºááá¯ááºáá¬á¡ááœá¬á¡áá±ážá¡ááœáẠá¡áá»áááºááá¯ááºáž áá±áá®ááá¯á áááºáᬠááá¯á·ááá¯áẠtransceiver áááºáá±á¬ááºááẠá¡áááºáááŒá±ááŒá áºááŒá®áž ááá¯ááºáá áºáá»ááºááŸáááºáá¯á¶ááŒáá·áº áá°áá®áá±á¬ááá·áºááŸááºážáá»ááºááᯠáááŸáá á±ááá·áº Telegram ááœáẠbot áá áºáá¯ááᯠáááºáá®ážááá¯áá«áááºá á€á¡ááœáẠáá®ážááŒá¬ážáá¬áá¬áá áºáá¯ááᯠááœá²áá±áá»áá¬ážáá±ážááŒááºážá¡ááŒáẠááá·áºá¡ááẠRaspberry ááá¯á· áá±á¬ááºážááá¯áá»ááºáá»á¬ážááᯠáá±ážááá¯á·ááŒááºážááẠá¡áááºážáá¯á¶áž áááºááœá±á·ááá»áá«á
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááẠáááºáá±á¬ááºááŸá¯ááᯠáá±á¬ááºáá¶á¡ááŒá
Ạá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá²á·áááºá
áá±á¬ááºáá¶ááŒááºáááºááŸá¯
áá¯ááºáá±á¬ááºáá»ááºáá áºáá¯áááºáá®ážáá«á
control panel áá²ááŸá¬
ááá±á¬áá»ááºááᯠáááºáá®ážááŒá®ážáá±á¬áẠá¡ááá¯ááºážááᯠááœá¬ážáá«á áá¯ááºáááºážáá±á¬ááºáá¬:
ááá¯ááºááá¯ááœááºáž áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯áááºáá®ážáá«á á¡ááá¯ááŸááá±á¬ á¡áááºááᯠáá±ážáá±á¬á·á
ááŸáááºááŒá®ážáá±á¬áẠáá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯áááºáá®ážáá«á áá»áœááºá¯ááºááá¯á· áááºáá®ážáá¬ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºááᯠááá¯ááºá
á¬ážááŒá¯ááŸá¯ ááŸááá«áááºá
Python ááœáẠáá¯ááºááááºáá®ážáá® Telegram ááœáẠbot áá
áºáá¯ááᯠáááºáá®ážááẠááá¯á¡ááºáá«áááºá áááºážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºáááºááᯠáá»áœááºá¯ááºáá±á¬áºááŒáááºááá¯ááºáá« - á¡áá±ážá
áááºááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸááá«áááºá
áá¯ááºááŒááºáááºááŒááºážá
áá¯á¶ááŒááºá áááºáá»ááá±á¬ á¡áá»ááºá¡áááºá¡áááºážá¡ááŒá áºá¡ááŒá Ạá¡áá»áá¯ážáá¬áž ááá¯áá¹ááá¬ááŸáá·áº áá±áá¯ááá¯ááºáᬠá á®áá¶ááá·áºááœá²ááŸá¯ (NOAA) ááᯠááœá±ážáá»ááºáá²á·áááºá á€áááá¹áá¶áááºážáá»á¡á±áá»ááºá á®ááẠáááºážááá¬áá¬ááœáẠáá±áá¬ááᯠTXT áá±á¬áºáááºááŒáá·áº á¡áá»áááºááŸáá·áºáááŒá±ážáá® á¡ááºááááºáá¯ááºáááºá
METAR áá±áá¬ááá°ááẠááá·áºáẠ(ááá á¹á áááºááᯠáááááŒá¯áá«)á
https://tgftp.nws.noaa.gov/data/observations/metar/stations/<кПЎ аÑÑПпПÑÑа пП ICAO>.TXT
áá«á·ááá á¹á ááœááºá á¡áá®ážáá¯á¶ážáá±ááááºááŸá¬ Vnukovo ááŒá áºááŒá®áž áááºážá ICAO áá¯ááºááŒá áºáááºá UUWW. áá¯ááºáá¯ááºáá¬ážáá±á¬ URL ááá¯á·ááœá¬ážáá«á á¡á±á¬ááºáá«ááá¯á·ááᯠáá±ážáá«áááºá
2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG
áááááá¯ááºážááẠGreenwich Mean Time ááœáẠááá·áºááŸááºážáá»ááºá áááºááŸáá¡áá»áááºááŒá áºáááºá áá¯áááá á¬ááŒá±á¬ááºážááẠáááá·áºáá¬áá®á¥áá¯á á¡áá»ááºážáá»á¯ááºááŒá áºáááºá á¡áááºáááºáá±ááŒá±á¬ááºáž áá±áá¬ááºááŸá°ážáá»á¬ážááẠá€áá»ááºážááŒá±á¬ááºážá á¡áááá¹áá«ááºááᯠáá¬ážáááºááẠááŒá¿áá¬áááŸááá±á¬áºáááºážá áá»áœááºá¯ááºááá¯á·á ááŸááºážáááºážáá»áẠááá¯á¡ááºáááº-
- [UUWW] â Vnukovo, áá±á¬áºá ááᯠ(áá¯ááŸá¬áž â RU);
- [101130Z] â áá 10 áááºá 11:30 GMT;
- [31004MPS] - áá±ááá¯ááºááŸá¯ááºáž 310 áá®ááá®á á¡ááŒááºááŸá¯ááºáž 4 m/s;
- [9999] - á¡áá»á¬ážááá¯áẠ10 áá®ááá¯áá®áᬠááá¯á·ááá¯áẠááá¯á·áááºááá¯á ááŒááºááá¯ááºá áœááºážá
- [SCT048] â áá± áááá (~áá áá áá®áá¬) ááœáẠááŒáá·áºáá»á²áá±áá±á¬ ááááºááá¯ááºáá»á¬áž
- [á/á] - á¡áá°áá»ááẠ24 áá®ááá®á ááºáá®áááááºá ááŸááºážá¡ááŸáẠ13 áá®ááá®á ááºáá®áááááºá
- [Q1014] - ááá¡á¬áž (QNH) 1014 hectopascals (750 mm Hg);
- [R01/000070] - 01 á០0,70 áááºážááŒá¬ážááŸá áááºááœááºááŸá¯ááááºážá
- [NOSIG] - áááá¬áááºááŸá¬ážáá±á¬ááŒá±á¬ááºážáá²ááŸá¯áááŸááá²á
áááá¯ááááºáá¯ááºááᯠá áááºáá±ážáá¬ážááá¯ááºáá¡á±á¬ááºá ááááŠážá áœá¬ áááºááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááºááœááºážááẠááá¯á¡ááºáááºá áá±á¬ááºážááá¯áá»ááºááᯠО pytaf:
from urllib import request
import pytaf
variable áá»á¬ážááá¯áááºááŸááºááŒá®áž decoding function ááá¯ááŒááºáááºáá«á
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()
TAF ááá¯á· áááºááœá¬ážááŒáá«á áá¯á· (ááá á¹á áááºáááºáž á¡áá±ážááŒá®ážáááº)á
https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<кПЎ аÑÑПпПÑÑа пП ICAO>.TXT
ááááºá¥ááá¬ááœááºá¡ááá¯ááºážá 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
á¡áá°ážáááŒáá·áº ááá¯ááºážááœá±ááᯠá¡á¬áá¯á¶á áá¯ááºááŒáá·áºáá¡á±á¬áẠTempo О BECMG. TEMPO ááá¯áááºááŸá¬ áááºááŸááºáá¬ážááá·áºáá¬áá¡ááœááºáž á¡ááŸááºááááºáá¬áá®á¥áá¯ááẠá¡áá«á¡á¬ážáá»á±á¬áºá áœá¬ ááŒá±á¬ááºážáá²ááœá¬ážáááºááŒá áºáááºá BECMG - áááºááŸááºáá¬ááá áºáá¯á¡ááœááºáž áá¬áá®á¥áá¯ááẠáááŒááºážááŒááºáž ááŒá±á¬ááºážáá²áá¬áááºá
ááá¯ááá¯áááºááŸá¬ ááá¯ááºážá
TEMPO 1012/1020 -TSRA BKN020CB
ááá¯ááá¯áááºááŸá¬-
- [á/á] - 12 áá¬áá®á០20 áá¬áá®ááŒá¬áž (Greenwich Mean Time);
- [-TSRA] â ááá¯ážááŒáá¯ážáá¯ááºááá¯ááºáž (TS = ááá¯ážááŒáá¯ážáá¯ááºááá¯ááºáž) (RA = ááá¯ážááœá¬ááŒááºáž) ááŒááºážáááºááŸá¯ (á¡áá¯ááºááá¹ááá¬)á
- [BKN020CB] - áááá¬áááºááŸá¬ážáá±á¬ (BKN = áá»áá¯áž), cumulonimbus (CB = cumulonimbus) áááºáááºáá±áá»ááºááŸá¬ááŒááºá¡ááẠ2000 áá± (610 áá®áá¬) ááœááºááááºáá»á¬ážá
áá¬áá®á¥áá¯ááŒá áºá ááºáá»á¬ážá¡ááœáẠáá±á«áá¬áá¡ááŒá±á¬ááºá¡áá»á¬ážááŸáááŒá®áž áááºážááá¯á·ááᯠááŸááºáá¬ážááẠáááºáá²áááºá TAF áá±á¬ááºážááá¯ááŸá¯á¡ááœáẠáá¯ááºááᯠá¡áá¬ážáá°áá¯á¶á á¶ááŒáá·áº áá±ážáá¬ážáá¬ážáááºá
áá¯ááºááᯠcloud ááá¯á· á¡ááºáá¯ááºáá¯ááºáá±áááºá
á¡áá»áááºáááŒá¯ááºážá
á±áááºá áá»áœááºá¯ááºááá¯á·áááá¯ááŸá±á¬ááºáááºážá០áááºáá®ááááºáááºáá¯á¶á
á¶áá
áºáá¯ááᯠáá°ááá¯ááºááŒáá«á
áá¯á·
áá¯ááºááœááºááŸááá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠmodule ááá¯áááºáá±á¬ááºááŒáá·áºááŸá¯áááºááŒá áºáááºá pytafááá¯á·áá±á¬ááºáááºážááá¬ážááŸááºážááá¯áá»ááºáá»ááºážááá·áºááœááºážááá·áºáááºá ááá¯á¡ááºáá»ááºáá»á¬áž
pytaf~=1.2.1
- áááºážááŒááºááŒááºážááá¯á· áááºááœá¬ážááŒáá«á áá¯á· bot/tele_bot.py. áá»áœááºá¯ááºááá¯á·ááẠáááá¯á¡ááºáá±á¬á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºááŸá¬ážááŒá®áž áá»áœááºá¯ááºááá¯á·ááá¯ááºááᯠááá·áºáá«á
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)
- áá»áœááºá¯ááºááá¯á·ááẠáááºážááœáŸááºáá áºáá¯áá¯á¶ážááᯠZIP ááŸááºáááºážá¡ááŒá Ạáá¯ááºááá¯ážááŒá®áž áááºáá®ážáá¬ážááá·áºáá¯ááºáá±á¬ááºáá»ááºááá¯á· ááááºážáá»á¯ááºááŸá¯ panel ááá¯á·ááœá¬ážáá«á
- á á¬áááºáááºážáá»á¬áž ááŒááºáááºááẠáá¯ááºááŒáá·áº áá±á¬áºááœááºážááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«á
- ááá¯ááºááŸá ááœá±áá»áá¯ážáááºážááŒá±á¬ááºážááᯠááŒáá·áºáá«á tele_bot (ááá¯ážáá»á²á·ááŸá¯ .py áááºááŸááºáá¬ážááŒááºážáááŸááá«) ááŸáá·áº á¡áá¯á¶ážááŸááºáá¯ááºáá±á¬ááºáá»ááºáá áºáᯠ(á¥ááá¬áá±ážáá¬ážáá±á¬ á€á¡áá¬ááẠá€á¡áá¬ááŒá áºáááºá á¡ááá).
- á¡ááá¯ááºáž áááºáááºážáá»áẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬áž variable áá áºáá¯áá±ážáá«á ááá¯ááẠááá¯áá»ááºáá±á¬ áááºáá®áááẠbot á ááá¯áááºááᯠáááºááŸááºáá±ážáá«á
- á á¬áááºáááºážáá»á¬áž ááááºážáááºážááŒá®áž áá»á²á·ááœááºáá«áááŒá®ážááẠá¡ááá¯ááºážááᯠááœá¬ážáá«á á¡á áá»áá¯ážáááºá.
- ááá¯ááºááᯠáá»áœááºáá±á¬áºááá¯á· áá¬ážáá²á·áá«áááºá HTTP áá±á¬ááºážááá¯áá»ááºáá±á¬ááºážááá¯áá»ááºááᯠá¡áá»á¬ážááá á±áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠáá¯ááºáá±á¬ááºáá»ááºááᯠáá°ááááŸááºááŒá¬ážáá±á«áºááá¯áááºá¡ááœáẠURL áá
áºáá¯ááŸááááºá áá»ááºáá¬á
/setwebhook <you bot token> <public URL of your function>
ááááº
á¡áá¬á¡á¬ážáá¯á¶áž ááŸááºáááºá áœá¬ ááŒá®ážáá«áá áááºá bot ááẠáá»ááºáá»ááºáž á áááºá¡áá¯ááºáá¯ááºááŒá®áž áá±á¬ááºáá¯á¶ážááá±ááŒá±á¬ááºáž áá¬áá®á¥áᯠá¡á á®áááºáá¶á á¬ááᯠmessenger ááœáẠááá¯ááºááá¯ááºááŒááá«áááºá
áá¯ááºáá«áááºá áá¯ááºááᯠááŒáŸáá·áºáááºááá¯ááºáá±ááá·áº áá°á·áá²á· áááºááŸáá¡ááŒá±á¡áá±ááŸá¬áá±á¬áẠá¡áááá»áá¯á¶áž áá¬áá®á¥áá¯áá²á· ááá·áºááŸááºážáá»ááºááᯠáá¯á¶ááŒááºááá²á· á¡áááºážá¡ááŒá
áºááá± ááŸá¬ááœá±ááá¯á· áá¯á¶áá±á¬ááºáá«áááºá
áá»áœááºá¯ááºááá¯á·ááœáẠáá¯ááºááá¬ážááŸááºážá¡ááŒáá·áºá¡á
á¯á¶ááᯠáááºááœá±á·ááá«áááºá
source: www.habr.com