Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Ir daudz pakalpojumu, kas sniedz informāciju par laikapstākļiem, bet kuram no tiem vajadzētu uzticēties? Kad sāku bieži braukt ar velosipēdu, vēlējos iegūt pēc iespējas precīzāku informāciju par laikapstākļiem vietā, kur braucu.

Mana pirmā doma bija uzbūvēt nelielu DIY laika staciju ar sensoriem un saņemt no tās datus. Bet es neizgudroju riteni no jauna un kā pārbaudīto datu avotu izvēlējos informāciju par laikapstākļiem, kas tiek izmantota civilajā aviācijā, proti, METĀRS (METeoroloģiskā lidlauka ziņojums) un TAF (TAF - Terminal Aerodrome Forecast). Aviācijā simtiem cilvēku dzīvības ir atkarīgas no laikapstākļiem, tāpēc prognozes ir pēc iespējas precīzākas.

Šī informācija tiek pārraidīta XNUMX/XNUMX ar balsi katrā mūsdienu lidlaukā formā ATIS (Automātiskais termināļa informācijas pakalpojums) un VOLMET (no franču valodas. vol - lidojums un Meteo - laikapstākļi). Pirmajā tiek sniegta informācija par faktiskajiem laikapstākļiem lidlaukā, bet otrajā tiek sniegta prognoze turpmākajām 24-30 stundām ne tikai apraides lidlaukā, bet arī citos.

ATIS darbības piemērs Vnukovo lidostā:

Piemērs, kā VOLMET strādā Vnukovas lidostā

Ir neērti katru reizi nēsāt līdzi radio skeneri vai raiduztvērēju attiecīgajam diapazonam, un es gribēju izveidot telegrammā robotu, kas, noklikšķinot uz pogas, ļauj iegūt tādu pašu prognozi. Šim nolūkam ir vismaz nepraktiski piešķirt atsevišķu serveri, kā arī nosūtīt pieprasījumus uz jūsu mājas Raspberry.

Tāpēc es nolēmu izmantot pakalpojumu kā aizmuguri Atlasiet mākoņa funkcijas. Pieprasījumu skaits būs niecīgs, tāpēc šāds pakalpojums būs praktiski bez maksas (pēc maniem aprēķiniem, tie būs 22 rubļi par 100 000 pieprasījumu).

Aizmugursistēmas sagatavošana

Izveidojiet funkciju

Vadības panelī my.selectel.ru atver skatu Mākoņu platforma un izveidot jaunu projektu:

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Kad projekts ir izveidots, dodieties uz sadaļu Funkcijas:

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Nospiediet pogu Izveidojiet funkciju un piešķiriet tai vēlamo nosaukumu:

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Pēc nospiešanas Izveidojiet funkciju mums būs izveidotās funkcijas attēlojums:

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Pirms sākat izveidot kodu Python, jums būs jāizveido robots Telegram. Es neaprakstīšu, kā tas tiek darīts - ir detalizētas instrukcijas mūsu zināšanu bāzē. Mums galvenais ir izveidotā bota žetons.

Koda sagatavošana

Es izvēlējos Nacionālo okeānu un atmosfēras pārvaldi (NOAA) kā uzticamu datu avotu. Šī zinātniskā aģentūra reāllaikā atjaunina datus savā serverī TXT formātā.

Saite, lai iegūtu METAR datus (ņemiet vērā gadījumu):

https://tgftp.nws.noaa.gov/data/observations/metar/stations/<код аэропорта по ICAO>.TXT

Manā gadījumā tuvākā lidosta ir Vnukovo, tās ICAO kods ir UUWW. Pārejot uz ģenerēto URL, tiks parādīts šāds:

2020/08/10 11:30
UUWW 101130Z 31004MPS 9999 SCT048 24/13 Q1014 R01/000070 NOSIG

Pirmajā rindā ir pašreizējais prognozes laiks pēc Griničas laika. Otrā rinda ir faktisko laikapstākļu kopsavilkums. Civilās aviācijas pilotiem nebūs problēmu saprast, ko šī līnija nozīmē, taču mums ir nepieciešams skaidrojums:

  • [UUWW] — Vnukovo, Maskava (Krievija — RU);
  • [101130Z] — mēneša 10. datums, 11:30 pēc GMT;
  • [31004MPS] — vēja virziens 310 grādi, ātrums 4 m/s;
  • [9999] — horizontālā redzamība 10 km vai vairāk;
  • [SCT048] — izkliedēti/izkliedēti mākoņi 4800 pēdu (~1584m) augstumā;
  • [24 / 13] — temperatūra 24°C, rasas punkts 13°C;
  • [Q1014] — spiediens (QNH) 1014 hektopaskāli (750 mm Hg);
  • [R01/000070] — saķeres koeficients 01. joslā — 0,70;
  • [NOSIG] - bez būtiskām izmaiņām.

Sāksim rakstīt programmas kodu. Vispirms jums ir jāimportē funkcijas pieprasīt и pytaf:

from urllib import request
import pytaf

Norādiet mainīgos un sagatavojiet dekodēšanas funkciju:

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()

Pārejam pie TAF (svarīgs ir arī gadījums).

https://tgftp.nws.noaa.gov/data/forecasts/taf/stations/<код аэропорта по ICAO>.TXT

Tāpat kā iepriekšējā piemērā, apskatīsim prognozi Vnukovo lidostā:

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

Īpašu uzmanību pievērsīsim līnijām LAIKS и BECMG. TEMPO nozīmē, ka faktiskie laikapstākļi norādītajā periodā periodiski mainīsies. BECMG - laika apstākļi pakāpeniski mainīsies noteiktā laika periodā.

Tas ir, rinda:

TEMPO 1012/1020 -TSRA BKN020CB

Nozīmēs:

  • [1012 / 1020] — no 12 līdz 20 stundām (pēc Griničas laika);
  • [-TSRA] — pērkona negaiss (TS = pērkona negaiss) ar zemas intensitātes lietu (RA = lietus) (mīnusa zīme);
  • [BKN020CB] - nozīmīgi (BKN = sadalīti), gubu (CB = gubu) mākoņi 2000 pēdu (610 metru) augstumā virs jūras līmeņa.

Laikapstākļu parādībām ir diezgan daudz terminu, un tos atcerēties ir grūti. TAF pieprasījuma kods ir uzrakstīts līdzīgi.

Koda augšupielāde mākonī

Lai netērētu laiku, paņemsim telegrammas robota veidni no mūsu krātuves mākonis-telegramma-bot. Ir iepriekš sagatavots prasības.txt и setup.py ar pareizo direktoriju struktūru.

Tā kā kodā mēs piekļūsim modulim pytaf, tad tā versija nekavējoties jāpievieno prasības.txt

pytaf~=1.2.1

  • Pāriesim pie rediģēšanas bot/tele_bot.py. Mēs noņemam visas nevajadzīgās lietas un pievienojam savu kodu.

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)

  • Mēs iesaiņojam visu direktoriju ZIP arhīvā un pārejam uz vadības paneli uz izveidoto funkciju.
  • Noklikšķiniet šeit Rediģēt un lejupielādējiet arhīvu ar kodu.

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas

  • Failā ievadiet relatīvo ceļu tele_bot (pagarinājums .py var nebūt norādīts) un beigu punkta funkcija (dotajā piemērā tas ir galvenais).
  • Iedaļā Vides mainīgie uzrakstiet mainīgo TOKEN un piešķiriet tam vajadzīgās telegrammas robota marķieri.
  • Noklikšķiniet šeit Saglabāt un paplašināt, pēc kura mēs ejam uz sadaļu Trigeri.
  • Mēs ievietojam slēdzi HTTP pieprasījumslai pieprasījums būtu publisks.

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Tagad mums ir URL funkcijas publiskai izsaukšanai. Viss, kas palicis, ir konfigurēt tīmekļa aizķeri. Atrodiet mūsu robotu @SelectelServerless_bot programmā Telegram un reģistrējiet savu robotprogrammatūru ar komandu:

/setwebhook <you bot token> <public URL of your function>

Piedzīvojiet efektīvu rezultātu spēku

Ja viss ir izdarīts pareizi, jūsu robots nekavējoties sāks darboties un parādīs jaunāko aviācijas laikapstākļu ziņojumu tieši kurjerā.

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas
Protams, kodu var uzlabot, taču pat tā pašreizējā stāvoklī ir pietiekami, lai uzzinātu precīzākos laikapstākļus un prognozes no uzticama avota.

Pilnu koda versiju atradīsit mūsu GitHub krātuves.

Visprecīzākā laika prognoze: bot Telegram on mākoņa funkcijas

Avots: www.habr.com

Pievieno komentāru