Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Ana akeh layanan sing nyedhiyakake informasi cuaca, nanging sing kudu dipercaya? Nalika aku miwiti muter asring, Aku wanted kanggo duwe informasi paling akurat bab kondisi cuaca ing panggonan ngendi aku numpak.

Pikiranku pisanan yaiku mbangun stasiun cuaca DIY cilik kanthi sensor lan nampa data saka iku. Nanging aku ora "reinvent roda" lan milih informasi cuaca sing digunakake ing penerbangan sipil minangka sumber data sing wis diverifikasi, yaiku METAR (Laporan Aerodrome METeorologis) lan TAF (TAF - Prakiraan Aerodrome Terminal). Ing penerbangan, urip atusan wong gumantung marang cuaca, mula ramalan kasebut akurat.

Informasi iki disiarake XNUMX/XNUMX kanthi swara ing saben lapangan udara modern ing wangun ATIS (Layanan Informasi Terminal Otomatis) lan VOLMET (saka basa Prancis. vol - pesawat lan Météo - cuaca). Kapisan nyedhiyakake informasi babagan cuaca nyata ing lapangan terbang, lan sing kapindho nyedhiyakake ramalan kanggo 24-30 jam sabanjure, ora mung ing lapangan udara siaran, nanging uga ing wong liya.

Conto operasi ATIS ing Bandara Vnukovo:

Conto cara kerja VOLMET ing Bandara Vnukovo

Ora trep kanggo nggawa scanner radio utawa transceiver karo sampeyan saben wektu kanggo sawetara sing cocog, lan aku pengin nggawe bot ing Telegram sing, kanthi ngeklik tombol, ngidini sampeyan entuk ramalan sing padha. Paling ora praktis kanggo nyedhiyakake server sing kapisah kanggo iki, uga ngirim panjaluk menyang Raspberry omah sampeyan.

Mulane, aku mutusake nggunakake layanan kasebut minangka backend Pilih Fitur Cloud. Jumlah panjalukan bakal diabaikan, mula layanan kasebut bakal gratis (miturut petunganku, bakal dadi 22 rubel kanggo 100 panjaluk).

Persiapan mburi

Nggawe fungsi

Ing panel kontrol my.selectel.ru mbukak tampilan Platform awan lan nggawe proyek anyar:

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Sawise proyek digawe, pindhah menyang bagean kasebut Fungsi:

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Pencet tombol Nggawe fungsi lan wenehi jeneng sing dikarepake:

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Sawise mencet Nggawe fungsi kita bakal duwe perwakilan saka fungsi sing digawe:

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Sadurunge miwiti nggawe kode ing Python, sampeyan kudu nggawe bot ing Telegram. Aku ora bakal njlèntrèhaké carane iki rampung - ana instruksi rinci ing basis kawruh kita. Sing utama kanggo kita yaiku token saka bot sing digawe.

Nyiyapake kode

Aku milih National Oceanic and Atmospheric Administration (NOAA) minangka sumber data sing bisa dipercaya. Agensi ilmiah iki nganyari data ing wektu nyata ing server ing format TXT.

Link kanggo njaluk data METAR (cathetan kasus):

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

Ing kasusku, bandara paling cedhak yaiku Vnukovo, kode ICAO UUWW. Menyang URL sing digawe bakal menehi ing ngisor iki:

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

Baris pisanan yaiku wektu ramalan saiki ing Greenwich Mean Time. Baris kapindho minangka ringkesan cuaca sing nyata. Pilot penerbangan sipil ora bakal duwe masalah ngerti apa tegese baris iki, nanging kita butuh panjelasan:

  • [UUWW] - Vnukovo, Moscow (Rusia - RU);
  • [101130Z] — 10 dina sasi, 11:30 GMT;
  • [31004MPS] - arah angin 310 derajat, kacepetan 4 m / s;
  • [9999] - visibilitas horisontal 10 km utawa luwih;
  • [SCT048] — mega kasebar / kasebar ing 4800 kaki (~1584 m);
  • [24 / 13] - suhu 24°C, titik embun 13°C;
  • [Q1014] - tekanan (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - koefisien adhesion ing jalur 01 - 0,70;
  • [NOSIG] - tanpa owah-owahan sing signifikan.

Ayo miwiti nulis kode program. Pisanan sampeyan kudu ngimpor fungsi Nyuwun и pytaf:

from urllib import request
import pytaf

Nemtokake variabel lan nyiapake fungsi dekoding:

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

Ayo pindhah menyang TAF (kasus uga penting).

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

Kaya ing conto sadurunge, ayo goleki ramalan ing bandara 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

Ayo kita mbayar manungsa waé khusus kanggo garis MASA и BECMG. TEMPO tegese cuaca sing nyata sajrone periode sing ditemtokake bakal ganti kanthi periodik. BECMG - cuaca bakal mboko sithik ganti ing wektu tartamtu.

Yaiku, baris:

TEMPO 1012/1020 -TSRA BKN020CB

Bakal tegese:

  • [1012 / 1020] - antarane 12 lan 20 jam (Greenwich Mean Time);
  • [-TSRA] - badai (TS = badai) kanthi udan (RA = udan) kanthi intensitas kurang (tanda minus);
  • [BKN020CB] - awan signifikan (BKN = rusak), cumulonimbus (CB = cumulonimbus) awan ing 2000 kaki (610 meter) saka lumahing segara.

Ana cukup akeh istilah kanggo fenomena cuaca, lan ngelingi iku angel. Kode kanggo panyuwunan TAF ditulis kanthi cara sing padha.

Ngunggah kode menyang awan

Supaya ora mbuwang wektu, ayo njupuk cithakan bot telegram saka gudang cloud-telegram-bot. Ana sing wis disiapake syarat.txt и setup.py kanthi struktur direktori sing bener.

Wiwit ing kode kita bakal ngakses modul pytaf, banjur versi kasebut kudu langsung ditambahake syarat.txt

pytaf~=1.2.1

  • Ayo pindhah menyang nyunting bot/tele_bot.py. Kita mbusak kabeh sing ora perlu lan nambah kode kita.

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)

  • Kita ngemas kabeh direktori menyang arsip ZIP lan pindhah menyang panel kontrol menyang fungsi sing digawe.
  • Tekan Sunting lan download arsip karo kode.

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan

  • Isi path relatif ing file tele_bot (ekstensi .py bisa uga ora kasebut) lan fungsi endpoint (ing conto diwenehi iki utama).
  • bagean Variabel Lingkungan nulis variabel TOKEN lan wenehake token bot telegram sing dikarepake.
  • Tekan Simpen lan Expand, sawise iku kita pindhah menyang bagean pemicu.
  • Kita sijine saklar panjalukan HTTPkanggo nggawe panjalukan umum.

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Saiki kita duwe URL kanggo nelpon umum fungsi kasebut. Sing isih ana ngatur webhook. Temokake bot kita @SelectelServerless_bot ing Telegram lan ndhaptar bot sampeyan nganggo printah:

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

asil

Yen kabeh wis rampung kanthi bener, bot sampeyan bakal langsung kerja lan nampilake laporan cuaca penerbangan paling anyar langsung ing utusan.

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan
Mesthi, kode kasebut bisa ditingkatake, nanging sanajan ing kahanan saiki, cukup kanggo ngerteni cuaca lan ramalan sing paling akurat saka sumber sing dipercaya.

Sampeyan bakal nemokake versi lengkap kode ing kita repositori ing GitHub.

Ramalan cuaca sing paling akurat: bot kanggo Telegram ing fungsi awan

Source: www.habr.com

Add a comment