Controllare il Raspberry con Telegram

postato in: Articoli, Raspberry | 19

raspberrytelegram Nei precedenti post sul Raspberry, abbiamo visto che per accedere ad esso usiamo sempre ssh, ovviamente questo non è l'unico modo per interagire con il piccolo computer, oggi ne vedremo uno nuovo e originale.


INTRODUZIONE
Tempo fa, abbiamo scritto un post su come installare Telegram sul Raspberry. Oggi sfrutteremo questo programma di messaggistica open source, che tra l'altro è un'ottima alternativa all'applicazione del signor Zuckerberg (Whatsapp per chi non lo sapesse), per comunicare con il nostro Raspberry.

Il principio di funzionamento è molto semplice, una volta installato Telegram sul Raspberry, e avviandolo con uno script in linguaggio lua, saremo in grado di interagire con esso mandandogli dei semplici messaggi, come se fosse un'utente normale. Ovviamente per fare questo, dobbiamo utilizzare due numeri di telefono, uno per il nostro telefono e uno per il Lampone.

Come avete letto qualche riga fa, il tutto è possibile utilizzando degli script scritti in linguaggio lua. Non vi preoccupate non è difficile per quello che dobbiamo fare noi, se comunque volete approfondire a questo link trovate il suo sito ufficiale.

INSTALLAZIONE E CONFIGURAZIONE
Detto questo bando alle ciance e iniziamo con l'installare Telegram sul Raspberry. La guida d'installazione la potete trovare in questo nostro post.

Una volta installato non ci resta che creare il file .lua per poter far interagire il Raspberry con noi attraverso Telegram.

Quindi posizioniamoci all'interno della directory d'installazione di Telegram (in poche parole dentro la cartella tg). Qui creiamo il nostro file action.lua, quindi apriamolo con “nano” dando il seguente comando:

 

nano action.lua

 

All'interno del file scriviamoci le seguenti righe di codice:

 

function on_msg_receive (msg)
  if msg.out then
    return
  end
  if (msg.text=='Ciao') then
    send_msg (msg.from.print_name, 'Ciao ' .. msg.from.print_name .. ':)', ok_cb, false)
  end
end

function on_our_id (id)
end

function on_secret_chat_created (peer)
end

function on_user_update (user)
end

function on_chat_update (user)
end

function on_get_difference_end ()
end

function on_binlog_replay_end ()
end

 

Una volta scritto tutto, clicchiamo “ctrl + x” e digitiamo “s” per salvare.

Intuitivamente, con questo script, nella prima funzione on_msg_receive, gli diciamo semplicemente che non appena arriva un messaggio con scritto “Ciao”, quel tenerone del nostro Raspberry ci risponde “Ciao NOME :)”.

Non ci resta altro che far partire Telegram assieme allo script per testare il tutto. Quindi diamo il seguente comando:

 

bin/telegram-cli -k tg-server.pub -W -s action.lua

 

Bene, ora dal telefono proviamo a scrivergli “Ciao”, e come per magia:

IMMAGINE CIAO

Che emozione!

Ma continuiamo a pacioccare un po', (tanto per non usare sempre il termine nerdare!).
Nel linguaggio lua c'è una funzione molto interessante ossia os.execute, che, in poche parole, ci permette di eseguire un programma o uno script nel nostro Raspberry. Per testare questa funzione, ci faremo inviare con Telegram, un file con la lista dei file all'interno della directory /etc.
Normalmente se vogliamo salvare la lista dei file presenti dentro a quella directory, da terminale basta digitare:

 

ls /etc > /home/pi/lista_file

 

e dentro la directory /home/pi verrà creata una lista dei file che ci sono in /etc. Per fare ciò con Telegram, nel nostro script, dentro alla funzione on_msg_receive, scriviamo:

 

 if (msg.text=='ls /etc') then
  send_msg (msg.from.print_name, 'Aspe un attimo, ora ti invio il file', ok_cb, false)
  os.execute('ls /etc > /home/pi/lista_file')
  send_file (msg.from.print_name, '/home/pi/lista_file', ok_cb, false)
end

 

e come di consueto, una volta salvato il file action.lua, facciamo partire Telegram, dando sempre il seguente comando:

 

bin/telegram-cli -k tg-server.pub -W -s action.lua

 

ed ecco il risultato:

immagine ls etc

immagine file etc


Da come potete notare, è uno strumento potente il controllo del Raspberry con Telegram, anche se ha qualche problema di sicurezza, perché se per esempio qualcuno ha il numero della sim del nostro Raspberry, allora può controllare anche lui il nostro computer con un semplice programma di messaggistica! Di certo non è quello che vogliamo! Infatti vi conviene fare dei controlli in più nello script, per esempio inserire una condizione all'inizio della funzione, specificando che se il numero non è quello del nostro telefono allora termini subito come nel esempio successivo:

 

if (msg.from.print_name~='My_number') then
  return
end

 

Ovviamente non dobbiamo dare nemmeno il numero alla prima persona che incontriamo.

Legandoci al post precedente, quello sull'intelligenza artificiale, potremmo fare anche un piccolo chatterbot personale, in stile Cleverbot, anche se il suo sviluppo è piuttosto complesso.

Infine vi ricordo che se non avete ancora un Raspberry, potete acquistare qui un Raspberry Pi 2 B.

CONCLUSIONI
Concludendo, oggi abbiamo visto un altro modo per utilizzare il nostro piccolo computer, e se siete a corto di idee per un nuovo progetto con il Raspberry allora continuate a seguirci!

 

FONTI:
- Immagini Joel Garia;

Dottore in Informatica. Da sempre appassionato di Linux, reti informatiche, sicurezza e, in modo amatoriale, all'elettronica. Il mio intento è quello di trasmettere le mie conoscenze ad altri appassionati.

19 risposte

  1. Grazie mille per i suoi consigli..
    Adesso che controllo il mio rpi 3 come posso inviare un commando seriale bluetooth del tipo "AF 01 03 DF" ad un relè anche esso bluetooth?

    • Daniele Scanu - Blogger

      Figurati e dammi pure del tu:) comunque una cosa del genere non l'ho mai provata, ma dovrebbe esserci qualche modulo che permette di fare questo, ad esempio in Python, dovresti dare un'occhiata in rete.

  2. FrancescoFdd5

    C'é un modo per tenere sempre attivo il servizio di telegram

    • Daniele Scanu - Blogger

      Certamente, quando fai partire il servizio, aggiungi aggiungi il seguente carattere "&" così: bin/telegram-cli -k tg-server.pub -W -s action.lua &
      In questo modo il servizio parte in background, e rimane attivo fino al riavvio del raspberry.

      • FrancescoFdd5

        Posso fare in modo di inviare foto, video o file al mio raspberry e lui automaticamente le mette in una cartella?

        • Daniele Scanu - Blogger

          Sicuramente si, dovresti controllare le varie API e il codice da poter utilizzare nello script. Fossi in te controllerei a questo link https://github.com/vysheng/tg se ci sono possibili soluzioni, ad esempio funzioni da utilizzare proprio per questo scopo. Facci sapere;)

          • Augusto

            Ciao Grazie per il suggerimento precedente, purtroppo però non riesco ad attivarlo in background, appena premo invio mi va si chiude il processo, hai altre idee?

          • Daniele Scanu - Blogger

            Esattamente cosa non riesci ad eseguire? Cosa vuoi attivare in background?

      • "bin/telegram-cli -k tg-server.pub -W -s action.lua &" subito dopo appena premo invio va in stopped

        • Daniele Scanu - Blogger

          Hai usato "--disable-liblua" durante la compilazione? Se si ricompila omettendo quest'opzione e assicurati di aver installato liblua. Per esserne sicuro installa queste librerie:

          sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev

          Ossia tutto l'essenziale per il corretto funzionamento di Telegram.

  3. Giorgio Rizzo

    Ho installato Telegram su Raspberry come da tuo sito. Complimenti; tutto funziona perfettamente con i comandi da smartphone. Ora vengo al punto: se faccio una copia (clonazione) della micro sd e la inserisco in un'altra raspberry, che succederebbe se le due schede funzionassero allo stesso momento? I comandi da smartphone sarebbero ricevuti da tutte e due oppure si creerebbe qualche problema di compatibilità? Ancora complimenti e grazie di tutto.

    • Daniele Scanu - Blogger

      Wow hai fatto una domanda davvero interessante ahaha. Secondo me funzionerebbe ancora, senza nessun problema, poiché dovrebbe fregarsene di altre istanze di telegram. Un problema che potrebbe sorgere è che magari una determinata funzione verrebbe eseguita due volte. Non ti resta che testare, e facci sapere perché ci ha veramente incuriosito il quesito:)

      • Giorgio Rizzo

        Ho sperimentato: quando le due schede sono in funzione nello stesso momento, i comandi dati da Telegram dallo smartphone restano congelati. Non funzionano. Appena però ne escludi una, spegnendola, tutti i comandi dati in precedenza, vengono eseguiti a "raffica" (letteralmente) in pochi secondi. La prova è stata eseguita con Raspberry Pi2 e Pi3 in contemporanea. Anche con comandi diversificati sul file action.lua. Penso che mi farò vivo con un altro probema tra poco... Ancora grazie.

        • Daniele Scanu - Blogger

          Bene, interessante, non pensavo venissero "congelati", ma pensavo che comunque una delle due schede eseguisse qualcosa.

  4. ciao,
    grazie per i tuoi preziosi consigli, fin'ora ho sperimentato il tutto con successo, ora però mi sono arenato su una questione: come posso far inviare un messaggio quando mi si chiude un contatto sulla GPIO? Esiste qualche API da poter utilizzare?
    Posso richiamare il LUA solo all'occorrenza?

    Grazie in anticipo,
    Michele.

  5. Ciao,
    grazie per l'articolo molto interessante.
    Come posso modificare on_msg_receive per fare in modo che alla ricezione di un messaggio possa salvarlo su un file?
    Grazie per ora!
    Alessio

    • Daniele Scanu - Blogger

      Ciao Alessio, io farei così, senza andare a maneggiare i file:

      os.execute("echo \"" .. msg.text .. "\" >> /path_file")

      In questo modo salvi il testo del messaggio su un file utilizzando i comandi Unix.

Lascia un commento