Formia - LT - Italy - JN61TG
iz0fiu@gmail.com

Canale Telegram per immagini meteo

Fun with everyone, Fun everywhere. Enjoy

Canale Telegram per immagini meteo

Nel mio precedente articolo, abbiamo parlato della possibilità di poter ricevere le immagini dai satelliti NOAA con un Raspberry, una chiavetta RTL-SDR e una antenna dedicata.

Nel mio caso, le nuove immagini automaticamente decodificate, venivano caricate in FTP verso il mio sito internet per renderle pubbliche. Sono disponibili a questo indirizzo internet

Ma visto che non ci accontentiamo mai, perchè non pubblicare le stesse immagini su un canale Telegram? Approfittando delle precedenti esperienze maturate sull’utilizzo di Telegram, ho creato uno script automatico che invia, appena si crea un nuovo file *.png all’interno della cartella weather del Raspberry, in FTP su iz0fiu.it appunto e su un canale telegram dedicato ( NOAAchannel ).

Spiegheremo passo passo tutta la procedura per automatizzare il tutto. Dobbiamo lavorare con i bot e i canali di Telegram, ma senza strapparci i capelli procediamo a configurare l’automatismo.

In primis, apriamo Telegram e cerchiamo @BotFather. Per chi non lo conoscesse, e’ un Bot di telegram che serve per creare Bot personalizzati. Inseriamo /newbot per creare il nostro Bot personalizzato. Possiamo inserire il nome e quant’altro richiesto dal sistema.

Alla fine della procedura, il Bot ci lascerà un codice univoco identificativo per il nostro Bot personale. Ad esempio, sarà simile a questo: 123456789:abcdefghiklmnopqrstuvz.

Andiamo sempre su Telegram, premiamo sulla matita in basso, creiamo un nuovo canale. Personalizziamolo a nostro piacere, con nome e foto profilo.

Torniamo sul nostro Raspberry, creiamo un file upload.py e inseriamo il nostro codice:

import glob, ftplib, os, telepot

from time import time, sleep
latest_file_MCIR_new = "0"
latest_file_MSA_new = "1"
#h=os.path.getctime
bot = telepot.Bot('KEYBOT')
while 1 :
    list_of_files_MCIR = glob.glob('/home/pi/weather/*-MCIR.png')
    list_of_files_MSA = glob.glob('/home/pi/weather/*-MSA.png')

    latest_file_MCIR = max(list_of_files_MCIR, key=os.path.getctime)
    latest_file_MSA = max(list_of_files_MSA, key=os.path.getctime)

    if latest_file_MCIR_new != latest_file_MCIR:
        sz_MCIR = os.path.getsize(latest_file_MCIR)
        if sz_MCIR > 500000:
            bot.sendPhoto(YourChannelTelegram, photo=open(latest_file_MCIR, 'rb'))
            latest_file_MCIR_new = latest_file_MCIR
            sleep(60)
    if latest_file_MSA_new != latest_file_MSA: 
        sz_MSA = os.path.getsize(latest_file_MSA)
        if sz_MSA > 500000:
            bot.sendPhoto(YourChannelTelegram, photo=open(latest_file_MSA, 'rb'))
            latest_file_MSA_new = latest_file_MSA
            sleep(20)
            session = ftplib.FTP('IP','USERNAME','PASSWORD')
            file = open(latest_file_MSA ,'rb')                  # file to send
            session.storbinary('STOR latest_file_MSA.png', file)     # send the file
            file.close()                                    # close file and FTP
            session.quit()
    sleep(500)

Qui una spiegazione del codice e’ di dovere. Per far funzionare l’invio delle immagini su Telegram, useremo la libreria telepot. La installeremo con il seguente codice:

sudo apt update
sudo apt install python-pip
sudo pip install telepot

Il codice creato esegue un upload FTP sul proprio spazio Web, sito o qualsivoglia. Ovviamente, lato spazio web, va’ configurata una cartella e un accesso FTP. Ogni hosting ha le sue configurazioni, quindi non mi dilungo piu’ di tanto.

Eseguendo il codice upload.py, lo script legge ogni 500 secondi la cartella weather e cerca di trovare un nuovo file PNG. Quando viene trovato, invia il file via FTP e sul canale telegram.

Canale Telegram appunto. Il problema è trovare l’ID del canale da aggiungere allo script.

Il metodo più veloce è aprire il canale da browser web, in alto nella barra degli indirizzi troverete un numero negativo. Quello è il vostro ID del canale. Questo ID va aggiunto nel codice sopra riportato alla voce bot.sendPhoto, ma con il 100 davanti. Ad esempio, se il vostro ID è -15405678 deve essere inserito -10015405678.

Alla fine della procedura, avviate il vostro file python e dovreste vedere una nuova notifica nel vostro canale telegram. Se non dovesse funzionare, aggiungete nel canale il vostro bot come amministratore del canale. Così può avere accesso alla pubblicazione delle foto.

Buon divertimento, se ci sono domande o chiarimenti ( nel poco tempo a disposizione ) cercherò di aiutarvi.

##EDIT: il file upload.py e’ stato modificato. E’ stato aggiunto il check della dimensione del file. Ho notato che in determinate condizioni, con decodifica errata o con poco segnale, si creavano file piccoli che mandavano in crash il sistema, inviando ogni minuto sempre lo stesso file. Facendo un check su file oltre i 500Kb il problema si risolve

Rispondi