በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
ስለ አየር ሁኔታ መረጃ የሚሰጡ ብዙ አገልግሎቶች አሉ, ግን የትኛውን ማመን ነው? ብዙ ጊዜ ብስክሌት መንዳት ስጀምር በተሳፈርኩበት ቦታ ስላለው የአየር ሁኔታ ሁኔታ ትክክለኛውን መረጃ ማግኘት ፈልጌ ነበር።

የመጀመሪያ ሀሳቤ ትንሽ DIY የአየር ሁኔታ ጣቢያ ከሴንሰሮች ጋር ሰብስቦ መረጃ መቀበል ነበር። ነገር ግን "መንኮራኩሩን እንደገና አላፈለስኩም" እና በሲቪል አቪዬሽን ውስጥ ጥቅም ላይ የሚውለውን የአየር ሁኔታ መረጃ እንደ የተረጋገጠ የውሂብ ምንጭ መረጥኩ, ማለትም. ሜተር (ሜትሮሎጂካል ኤሮድሮም ሪፖርት) እና ሥራ (TAF - ተርሚናል ኤሮድሮም ትንበያ)። በአቪዬሽን ውስጥ በመቶዎች የሚቆጠሩ ሰዎች ሕይወት በአየር ሁኔታ ላይ የተመሰረተ ነው, ስለዚህ ትንበያዎች በተቻለ መጠን ትክክለኛ ናቸው.

ይህ መረጃ በየሰዓቱ በድምጽ በሁሉም ዘመናዊ የአየር ማረፊያዎች በቅጹ ይሰራጫል ኤቲአስ (ራስ-ሰር ተርሚናል መረጃ አገልግሎት) እና ቮልሜት (ከፈረንሳይኛ - በረራ እና Meteo - የአየር ሁኔታ). የመጀመሪያው በአየር መንገዱ ላይ ስላለው ትክክለኛ የአየር ሁኔታ መረጃን ይሰጣል, ሁለተኛው - ለቀጣዮቹ 24-30 ሰዓታት ትንበያ, በስርጭት አየር ማረፊያ ላይ ብቻ ሳይሆን በሌሎችም ጭምር.

በ Vnukovo አየር ማረፊያ ውስጥ የ ATIS አሠራር ምሳሌ:

በ Vnukovo አየር ማረፊያ የ VOLMET አሠራር ምሳሌ

በእያንዳንዱ ጊዜ የሬዲዮ ስካነር ወይም ትራንስሴቨር ከእርስዎ ጋር ወደ ተገቢው ክልል መጓዙ የማይመች ነው ፣ እና በቴሌግራም ውስጥ ቦት መፍጠር ፈልጌ ነበር ፣ ይህም አንድ ቁልፍ ሲነኩ ተመሳሳይ ትንበያ እንዲያገኙ ያስችልዎታል። ለዚህ የተለየ አገልጋይ መስጠት ቢያንስ አላስፈላጊ ነው፣ እንዲሁም ጥያቄዎችን ወደ ቤት Raspberry መላክ ነው።

ስለዚህ, እንደ ደጋፊ, አገልግሎቱን ለመጠቀም ወሰንኩ የተመረጠ የክላውድ ተግባራት. የጥያቄዎች ብዛት እዚህ ግባ የማይባል ይሆናል, ስለዚህ እንዲህ ዓይነቱ አገልግሎት በእውነቱ በነጻ ዋጋ ያስከፍላል (በእኔ ስሌት መሰረት, ለ 22 ጥያቄዎች 100 ሩብልስ ይሆናል).

የጀርባውን ክፍል በማዘጋጀት ላይ

ተግባር ፍጠር

በመቆጣጠሪያ ፓነል ውስጥ my.selectel.ru ክፍት እይታ የደመና መድረክ እና አዲስ ፕሮጀክት ይፍጠሩ:

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
ፕሮጀክቱ ከተፈጠረ በኋላ ወደ ክፍሉ ይሂዱ ተግባሮች:

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
አዝራሩን ይጫኑ ተግባር ፍጠር እና የተፈለገውን ስም ይስጡት:

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
ከተጫኑ በኋላ ተግባር ፍጠር የተፈጠረውን ተግባር ውክልና ይኖረናል፡-

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
የ Python ኮድ መፍጠር ከመጀመርዎ በፊት በቴሌግራም ውስጥ ቦት መፍጠር ያስፈልግዎታል። ይህ እንዴት እንደሚደረግ አልገልጽም - ዝርዝር መመሪያዎች አሉ በእውቀታችን መሰረት. ለእኛ ዋናው ነገር የተፈጠረ ቦት ምልክት ነው.

የማብሰያ ኮድ

ብሄራዊ የውቅያኖስ እና የከባቢ አየር አስተዳደር (NOAA) አስተማማኝ የመረጃ ምንጭ እንዲሆን መርጫለሁ። ይህ የሳይንስ ኤጀንሲ በ TXT ቅርጸት በአገልጋዩ ላይ ያለውን መረጃ በቅጽበት ያዘምናል።

የMETAR ውሂብ ለማግኘት አገናኝ (መዝገቡን ያስተውሉ)፡-

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

በእኔ ሁኔታ, በአቅራቢያው ያለው አየር ማረፊያ Vnukovo ነው, የእሱ ICAO ኮድ ነው UUWW. ወደ የመነጨው ዩአርኤል ማሰስ የሚከተለውን ያስገኛል፡

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

የመጀመሪያው መስመር የትንበያው አግባብነት ያለው የጂኤምቲ ጊዜ ነው። ሁለተኛው መስመር ትክክለኛው የአየር ሁኔታ ማጠቃለያ ነው. የሲቪል አቪዬሽን አብራሪዎች ይህ መስመር ምን ማለት እንደሆነ ለመረዳት ምንም ችግር አይኖርባቸውም፣ ነገር ግን ግልባጭ እንፈልጋለን።

  • [UUWW] - Vnukovo, ሞስኮ (ሩሲያ - RU);
  • [101130Z] - በወሩ 10 ኛ ቀን, 11:30 GMT;
  • [31004MPS] - የንፋስ አቅጣጫ 310 ዲግሪ, ፍጥነት 4 ሜትር / ሰ;
  • [9999] - 10 ኪ.ሜ ወይም ከዚያ በላይ አግድም ታይነት;
  • [SCT048] - የተበታተኑ / የተበታተኑ ደመናዎች በ 4800 ጫማ (~ 1584 ሜትር);
  • [24 / 13] - የሙቀት መጠን 24 ° ሴ, የጤዛ ነጥብ 13 ° ሴ;
  • [Q1014] - ግፊት (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - የ adhesion Coefficient በሌይኑ ላይ 01 - 0,70;
  • [NOSIG] - ጉልህ ለውጦች ሳይኖሩ.

ኮድ መጻፍ እንጀምር. በመጀመሪያ ተግባራቶቹን ማስመጣት ያስፈልግዎታል ጥያቄ и ፒታፍ:

from urllib import request
import pytaf

ተለዋዋጮችን ይግለጹ እና የመግለጫ ተግባሩን ያዘጋጁ፡

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

በመስመሮቹ ላይ ልዩ ትኩረት ይስጡ ሰዓት и BECMG. TEMPO ማለት በተጠቀሰው ጊዜ ውስጥ ያለው ትክክለኛ የአየር ሁኔታ በየጊዜው ይለዋወጣል ማለት ነው። BECMG - በተወሰነው የጊዜ ክፍተት ውስጥ የአየር ሁኔታ ቀስ በቀስ ይለወጣል.

እሱ ነው መስመር፡-

TEMPO 1012/1020 -TSRA BKN020CB

ማለት፡-

  • [1012 / 1020] - ከ 12 እስከ 20 ሰዓታት ባለው ጊዜ ውስጥ (የግሪንዊች አማካይ ጊዜ);
  • [-TSRA] - ነጎድጓዳማ (TS = ነጎድጓድ) በዝናብ (RA = ዝናብ) ዝቅተኛ ጥንካሬ (የተቀነሰ ምልክት);
  • [BKN020CB] - ጉልህ (BKN = የተሰበረ)፣ cumulonimbus (CB = cumulonimbus) ከባህር ጠለል በላይ በ2000 ጫማ (610 ሜትር) ከፍታ ላይ ያለ የደመና ሽፋን።

የአየር ሁኔታ ክስተቶችን የሚያመለክቱ ብዙ ቃላት አሉ, እና እነሱን ለማስታወስ አስቸጋሪ ነው. የቲኤኤፍ ጥያቄ ኮድ በተመሳሳይ መንገድ ተጽፏል።

ኮድ ወደ ደመናው ይስቀሉ።

ጊዜ ላለማባከን የቴሌግራም ቦት አብነት ከማከማቻችን እንውሰድ ደመና-ቴሌግራም-ቦት. አስቀድሞ የተዘጋጀ መስፈርቶች .xt и ማዋቀር.ፒ ከትክክለኛው የማውጫ መዋቅር ጋር.

በኮዱ ውስጥ ስለ ሞጁሉን እንጠቅሳለን ፒታፍ, ከዚያ የእሱ ስሪት ወዲያውኑ መጨመር አለበት መስፈርቶች .xt

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)

  • መላውን ማውጫ ወደ ዚፕ መዝገብ እንጭነዋለን እና ወደ ተፈጠረ ተግባር ወደ የቁጥጥር ፓነል እንሄዳለን።
  • ግፋ አርትዕ እና ማህደሩን በኮዱ ያውርዱ።

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ

  • በፋይሉ ውስጥ ያለውን አንጻራዊ መንገድ ይሙሉ ቴሌ_ቦት (ቅጥያ .py ሊቀር ይችላል) እና የመጨረሻ ነጥብ ተግባር (ከላይ ባለው ምሳሌ, ይህ ዋና).
  • ክፍል የአካባቢ ተለዋዋጮች ተለዋዋጭ ጻፍ ቶከን እና የተፈለገውን የቴሌግራም ቦት ምልክት ይመድቡ።
  • ግፋ አስቀምጥ እና ዘርጋ, ከዚያም ወደ ክፍሉ ይሂዱ ቀስቅሴዎች.
  • ማብሪያው እናስቀምጠዋለን HTTP ጥያቄጥያቄውን ለህዝብ ለማቅረብ።

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
ለህዝባዊ ተግባር ጥሪ ዩአርኤል አለን። የቀረው ብቻ ነው። የድር መንጠቆ ያዘጋጁ. የእኛን ቦት ያግኙ @SelectelServerless_bot በቴሌግራም እና ቦትዎን በትእዛዙ ያስመዝግቡ፡-

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

ውጤት

ሁሉም ነገር በትክክል ከተሰራ, የእርስዎ ቦት ወዲያውኑ መስራት ይጀምራል እና የአሁኑን የአቪዬሽን የአየር ሁኔታ ዘገባ በመልእክተኛው ውስጥ ያሳያል.

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ
እርግጥ ነው, ኮዱ ሊሻሻል ይችላል, ነገር ግን አሁን ባለው ሁኔታ እንኳን በጣም ትክክለኛውን የአየር ሁኔታ እና ትንበያ ከታመነ ምንጭ ለማወቅ በቂ ነው.

ሙሉውን የኮዱን ቅጂ በእኛ ውስጥ ማግኘት ይችላሉ። በ GitHub ላይ ማከማቻዎች.

በጣም ትክክለኛው የአየር ሁኔታ ትንበያ፡ ለቴሌግራም ቦት በደመና ተግባራት ላይ

ምንጭ: hab.com

አስተያየት ያክሉ