Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Waxaa jira adeegyo badan oo bixiya macluumaadka cimilada, laakiin midkee ayaa tahay inaad ku kalsoonaato? Markii aan inta badan bilaabay baaskiil wadida, waxaan rabay in aan helo macluumaadka ugu saxsan ee ku saabsan xaaladaha cimilada meesha aan raacayo.

Fikradayda ugu horeysay waxay ahayd inaan ururiyo xarun yar oo cimilo oo DIY ah oo leh dareemayaal oo aan ka helo xogta. Laakin ma aanan "dib u soo saarin giraangiraha" oo waxaan doortay macluumaadka cimilada ee loo isticmaalo duulista madaniga ah il xog la xaqiijiyay, oo ah METAR (Warbixinta Aerodrome METeorological) iyo shaqo (TAF - Saadaasha hawada hawada ee Terminal). Duulimaadyada, nolosha boqolaal qof ayaa ku xiran cimilada, sidaas darteed saadaasha waa sida ugu macquulsan.

Macluumaadkan waxa lagu baahiyaa XNUMX/XNUMX cod garoon kasta oo casri ah oo qaabaysan ATIS (Adeegga Macluumaadka Terminalka Toos ah) iyo VOLMET (laga soo bilaabo Faransiis. vol - duul iyo météo - cimilada). Midka kowaad wuxuu bixiyaa macluumaadka ku saabsan cimilada dhabta ah ee garoonka diyaaradaha, kan labaadna wuxuu bixiyaa saadaasha 24-30 saacadood ee soo socda, maaha kaliya garoonka diyaaradaha, laakiin sidoo kale kuwa kale.

Tusaale ahaan hawlgalka ATIS ee garoonka Vnukovo:

Tusaale ahaan sida VOLMET uga shaqeyso garoonka diyaaradaha ee Vnukovo

Dhib ma leh in aad qaadato iskaanka raadiyaha ama transceiver adiga mar kasta oo u dhiganta qiyaasta u dhiganta, waxaanan rabay in aan ku dhex abuuro bot Telegram taas oo, marka la gujiyo badhan, ay kuu ogolaato inaad hesho saadaal la mid ah. Waa ugu yaraan wax aan macquul ahayn in loo qoondeeyo server gaar ah kan, iyo sidoo kale u dirida codsiyada Raspberry gurigaaga.

Sidaa darteed, waxaan go'aansaday inaan u isticmaalo adeega dhabarka Tilmaamaha Cloud Selectel. Tirada codsiyada waxay noqon doontaa mid aan waxtar lahayn, sidaas darteed adeegga noocan oo kale ah wuxuu noqon doonaa mid bilaash ah (sida ku cad xisaabinta, waxay noqon doontaa 22 rubles 100 codsi).

Diyaarinta dhabarka

Abuur shaqo

In guddiga xakamaynta my.selectel.ru fur aragtida Madal daruureed oo samee mashruuc cusub:

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Ka dib marka mashruuca la abuuro, tag qaybta Functions:

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Riix badhanka Abuur shaqo una bixi magaca la rabo:

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Kadib markaad riixdo Abuur shaqo waxaan yeelan doonaa matalaad shaqada la abuuray:

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Kahor intaadan bilaabin abuurista koodka Python, waxaad u baahan doontaa inaad ku abuurto bot Telegram. Ma qeexi doono sida tan loo sameeyo - waxaa jira tilmaamo faahfaahsan saldhigga aqoonta. Waxa ugu weyn ee annaga noo ah waa calaamadda bot la abuuray.

Diyaarinta koodka

Waxaan u doortay Maamulka Badweynta iyo Hawada Qaranka (NOAA) sidii isha xog la isku halayn karo. Wakaaladan sayniska ayaa cusboonaysiisay xogta wakhtiga dhabta ah ee serverkeeda qaab TXT ah.

Isku xirka si aad u hesho xogta METAR (u fiirso kiiska):

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

Kiiskeyga, garoonka ugu dhow waa Vnukovo, koodka ICAO waa UUWW. Tagitaanka URL-ka la sameeyay waxay ku siin doontaa kuwan soo socda:

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

Safka koowaad waa waqtiga hadda ee saadaasha ee Greenwich Mean Time. Sadarka labaad waa koobitaanka cimilada dhabta ah. Duuliyayaasha duulista madaniga ah dhib kuma yeelan doonaan inay fahmaan macnaha xariiqan, laakiin waxaan u baahanahay sharaxaad:

  • [UUWW] - Vnukovo, Moscow (Ruushka - RU);
  • [101130Z] - maalinta 10-aad ee bisha, 11:30 subaxnimo GMT;
  • [31004MPS] - jihada dabaysha 310 darajo, xawaaraha 4 m/s;
  • [9999] - muuqaal toosan 10 km ama ka badan;
  • [SCT048] - daruuro kala firdhiyey/kala firdhiyey oo 4800 cagood (~ 1584m);
  • [24/13] - heerkulka 24 ° C, barta sayaxa 13 ° C;
  • [Q1014] - cadaadiska (QNH) 1014 hectopascals (750 mm Hg);
  • [R01/000070] - isku-dhafka adhesion ee haadka 01 - 0,70;
  • [NOSIG] - iyada oo aan isbeddel weyn lahayn.

Aan bilowno qorista koodka barnaamijka. Marka hore waxaad u baahan tahay inaad soo dejiso shaqooyinka codsi и pytaf:

from urllib import request
import pytaf

Sheeg doorsoomayaasha oo diyaari shaqada goynta:

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

Aan u gudubno TAF (kiis sidoo kale waa muhiim).

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

Sida tusaalihii hore, aan eegno saadaasha garoonka 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

Aynu si gaar ah fiiro gaar ah u yeelano khadadka WAQTIGII и BECMG. TEMPO waxay ka dhigan tahay in cimilada dhabta ah inta lagu jiro muddada la cayimay ay isbeddeli doonto xilliyo. BECMG - cimiladu si tartiib tartiib ah ayey isu bedeli doontaa muddo cayiman gudaheed.

Taasi waa, khadka:

TEMPO 1012/1020 -TSRA BKN020CB

Macnaheedu waa:

  • [1012/1020] - inta u dhaxaysa 12 iyo 20 saacadood (Waqtiga celceliska Greenwich);
  • [-TSRA] - onkod (TS = onkod) oo leh roob (RA = roob) xooga hoose (calaamadaha laga jaray);
  • [BKN020CB] - muhiim ah (BKN = jabay), cumulonimbus (CB = cumulonimbus) daruuraha 2000 cagood (610 mitir) oo ka sarreeya heerka badda.

Waxaa jira erayo aad u badan oo loogu talagalay ifafaalaha cimilada, xusuustoodana way adagtahay. Koodhka codsiga TAF waxa loo qoray si la mid ah.

Soo dejinta koodka daruuraha

Si aan waqti u lumin, aan ka soo qaadanno kaydkayaga bot template bot telegram daruur-telegram-bot. Waxaa jira horudhac loo sii diyaariyay shuruudaha.txt и dejinta.py oo leh qaab-dhismeedka hagaha saxda ah.

Maadaama koodka aan geli doono moduleka pytaf, ka dibna noociisa waa in isla markiiba lagu daro shuruudaha.txt

pytaf~=1.2.1

  • Aan u gudubno tafatirka bot/tele_bot.py. Waxaan ka saarnaa dhammaan waxyaabaha aan loo baahnayn oo ku darnaa koodkayaga.

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)

  • Waxaan ku xireynaa tusaha oo dhan galka kaydka ZIP waxaana aad tagnaa guddiga kantaroolka shaqada la abuuray.
  • Riix Isbedel oo la soo deg kaydka koodka.

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha

  • Buuxi jidka qaraabada ah ee faylka tele_bot (kordhinta .py waxaa laga yaabaa inaan la cayimin) iyo shaqada dhamaadka (tusaale ahaan tan la siiyay ugu weyn ee).
  • qaybta Doorsoomayaasha deegaanka qor doorsoome Token oo u qoondee calaamadda bot telegram ee la doonayo.
  • Riix Keydi oo fidi, ka dib waxaan aadeynaa qaybta kiciya.
  • Waxaan dhignay furaha Codsiga HTTPin codsiga loo gudbiyo dadweynaha.

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Hadda waxaan haynaa URL si guud loogu waco hawsha. Waxa soo haray waa habayn webhook. Soo hel botkayaga @SelectelServerless_bot gudaha Telegram oo ku diwaangeli botkaaga amarka:

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

natiijada

Haddii wax walba si sax ah loo sameeyo, bot-kaagu isla markiiba wuxuu bilaabi doonaa inuu shaqeeyo oo uu si toos ah u soo bandhigo warbixintii cimilada ee ugu dambeysay ee fariinta.

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha
Dabcan, koodhka waa la hagaajin karaa, laakiin xitaa xaaladdiisa hadda waa ku filan tahay in la ogaado cimilada ugu saxsan iyo saadaasha ilo lagu kalsoon yahay.

Waxaad ka heli doontaa nooca buuxa ee koodkayaga kaydka GitHub.

Saadaasha cimilada ugu saxsan: bot for Telegram ee hawlaha daruuraha

Source: www.habr.com

Add a comment