Telegram parte dalle funzioni di base introdotte da WhatsApp e le estende all'infinito aprendo le porte alla programmazione di terze parti tramite le Bot API.
Anche per WhatsApp sono uscite delle API per poter interagire con le chat in automatico da progamma ma non sono ufficiali e c'é la possibilità che il servizio venga interrotto nel caso si accorgano che a chattare non è una persona ma un'applicazione.
Scoprire che è possibile telecomandare qualcosa con una applicazione che già conosciamo bene (ricordo che l'operatività di Telegram è praticamene identica a WhatsApp) ci rende molto inclini ad usarla sempre e molto recettivi a capirne le potenzialità.
Le Bot API di Telegram girano benissimo su schede Linux Embedded molto economiche come la Raspberry Pi o Arietta G25 consentendo quindi di avere una finestra sul mondo fisico dalla nostra chat su telefono.
I Bot sono programmi sviluppati da terze parti per fornire servizi aggiuntivi di ogni tipo.
Si accedono in chat semplicemente cercandoli per nome nel “Campo cerca contatti…” o tramite un link web diretto da siti tipo Telegram Bot Store.
Una volta registrato un nome di un Bot (es MyBot) è poi possibile dare l'accesso o tramite una URL tipo https://telegram.me/MyBot o tramite chat in questa forma @MyBot.
Il nome scelto per il nostro Bot, se accettato da Telegram, è univoco in tutto il mondo.
Per creare un nuovo Bot la procedura è istantanea e si fà direttamente in chat tramite https://telegram.me/BotFather o @BotFather.
Installiamo il client Telegram sul nostro PC dal sito Telegram. Il client su PC è molto più comodo del cellulare in quanto ci permette di fare cut & paste di dati tra chat e l'editor ASCII che useremo più avanti.
Vai su https://telegram.me/BotFather.
Quando appare il logo cliccaci su per aprire la chat con la lista dei comandi possibili.
Clicca su /newboot quindi inserisci il nome che hai scelto per il tuo Bot tipo MyBot ed il relativo username.
Lo username è il nome pubblico con cui il Bot sarà accessibile worldwide e deve essere avere una composizione del tipo tipo @nomescelto_bot o @NomesceltoBot.
Si riceverà una coppia ID:CHIAVE denominata Token. Questa coppia andrà usata nella nostra applicazione Python per registrarsi all’avvio del programma.
Ecco un esempio di Token:
Rispetto ad un desktop, un portatile o un server web, le schede Linux Embedded tipo la Raspberry Pi o le schede prodotte da Acme (Aria, Arietta e Acqua), dispongono anche di speciali pin su cui è possibile accedere a segnali elettrici a livello logico 0 o 1 gestiti direttamente dalla CPU.
Le più semplici di queste linee sono le GPIO ovvero le General Purpose Input Output.
Queste linee, assolutamene inadatte per pilotare direttamente qualsiasi oggetto nel mondo reale, sono molto versatili se accoppiate con un'elettronica di interfacciamento sul campo.
Vediamo ad esempio di come pilotarci una lampada a 220 volt. Prendiamo la scheda Relay Click prodotta da Mikroe e visibile qui:
Di seguito vediamone lo schema elettrico parziale di una delle due sezioni estratto da qui:
Per poter utilizzare nella vita reale una singola linea GPIO disponibile sulla Raspberry ad esempio, il segnale variabile disponibile su una GPIO tra 0 volt quando è a riposo (stato logico 0 o basso) a 3.3 volt quando è attivo (stato logico 1 o alto) serve un transistor (Q1 nello schema) che pilota un relé (REL1 nello schema) e quindi ai contatti del relé si possono attestare i cavi della fase che andrebbero direttamente alla lampadina e che in questo modo possono essere interrotti o no per accenderla o spegnerla.
Vedremo più avanti come pilotare queste linee da un Bot e di conseguenza da un messaggio Telegram.
Scarica dal sito ufficiale Raspberry l'immagine della microSD Raspbian più leggera utile per i nostri scopi.
Una volta scaricata l'immagine ISO decomprimila e segui le istruzioni dal sito ufficiale per scriverla su microSD:
Inserisci la microSD nella Raspberry, collega la rete, un monitor HDMI e una tastiera USB e dai alimentazione.
Quando appare la richiesta di login digita:
login: pi Password: raspberry
Digita il comando ifconfig per conoscere l'indirizzo IP assegnato alla Raspberry dal DHCP della tua rete.
Prova a verificare se la scheda può accedere ad internet dando ad esempio il comando:
$ sudo ping www.google.it PING www.google.it (173.194.116.152) 56(84) bytes of data. 64 bytes from fra02s28-in-f24.1e100.net (173.194.116.152): icmp_seq=1 ttl=54 time=65.9 ms 64 bytes from fra02s28-in-f24.1e100.net (173.194.116.152): icmp_seq=2 ttl=54 time=65.4 ms 64 bytes from fra02s28-in-f24.1e100.net (173.194.116.152): icmp_seq=3 ttl=54 time=66.0 ms ...
Per uscire dal comando premi ctrl + c
Da questo punto punto in poi tutte le operazioni possono essere fatte da remoto collegandosi all'indirizzo di rete assegnato.
Per evitare di dover ricollegare monitor e tastiera possiamo installare Avahi che implementa il protocollo Bonjour della Apple che consente di raggiungere la scheda da un PC sulla stessa LAN usando il nome invece che l'indirizzo IP.
Per installare Avahi/Bonjour digita i seguenti comandi:
$ sudo apt-get update $ apt-get install libnss-mdns
Una volta fatto il reboot la scheda sarà raggiungibile in rete con il nome raspberrypi.local al posto dell'indirizzo IP.
Per settare un nome diverso il file a cambiare è /etc/hostname.
Per farlo puoi usare l'editor ASCII minimale che funziona anche senza interfaccia grafica Nano.
$ sudo nano /etc/hostname
Per propagare il nuovo nome sulla LAN fare il reboot della scheda con il comando:
$ sudo reboot
Per accedere alla Raspberry da un PC remoto serve installare sul PC i seguenti tool:
Su Windows:
Su Linux:
Su Mac:
Se hai installato Avahi/Bonjour sulla Raspberry puoi accedere anche usando raspberrypi.local al posto dell'indirizzo IP.
Di default la Raspberry è configurata per la tastiera inglese, per settare il layout corretto lancia il comando:
$ raspi-config
Seleziona Generic 105-key (intl) PC quindi Italian e "default" su tutte le altre voci.
Questa operazione non è necessaria se stai usando un terminale remoto.
Python-telegram-bot è un cosidetto "wrapper", ovvero una libreria per il linguaggi di programmazione Python per interfacciarsi con le funzioni fornite da Telegram per estendere le possibilia di avere servizi di terze parti in modo semplice.
I comandi per installarlo sono:
$ sudo apt-get install python-pip $ sudo pip install python-telegram-bot
A questo punto siamo pronti per provare il codice di esempio del nostro primo Bot Telegram TanzoBot 😉.
Per fare questo abbiamo bisogno di installare sul nostro PC un client SCP per accedere da remoto ai file memorizzati sulla microSD della Raspberry.
Occorrerà installare un Network File Sharing, come Samba, sulla Raspberry Pi (vedi link a fondo pagina).
Ci servirà anche un editor ASCII per poter modificare l'esempio di base a nostro piacimento.
Su Windows:
Su Linux Ubuntu:
Su Mac:
L'immagine della microSD scaricata dal sito Raspberry è una foto dello stato dello sviluppo al momento della sua pubblicazione.
Prima di provare TanzoBot consiglio di aggiornare il tutto all'ultimo grido usando i comandi:
$ sudo apt-get update $ sudo apt-get install
E' possibile accedere ai sorgenti dei programmi si esempio dal repository GitHub:
Oppure scaricarne uno alla volta dando il seguente comando a console:
$ wget https://raw.githubusercontent.com/tanzilli/TanzoBot/master/tanzobot.py
o infine fare come fanno i veri programmatori tosti ovvero clonare l'intero repository GitHub.
Questo sistema ha il vantaggio che scarica tutti i file del progetto in un'unico comando e può tenerli allineati agli ultimi aggiornamento scaricando solo le differenze.
Per fare questo bisogna installare Git che presto scoprirete essere uno dei programmi più utili mai realizzati. Per la cronaca Git è un altro programma ideato da Linus Torvalds il creatore di Linux.
Una volta scaricati i sorgenti facciamo una copia locale di tanzobot.py e diamogli il nome che abbiamo scelto per il nostro bot. Tipo miobot.py.
Con uno degli editor ASCII che abbiamo scaricato cerchiamo questa riga in miobot.py:
updater = telegram.Updater("Inserisci qui il Token assegnato da BotFather")
inserendoci il token che ci ha assegnato BotFather al momento della registrazione di MioBot.
Salviamo e lanciamo MyBot (ex TanzoBot):
$ python mybot.py
Ora vediamo se risulta visibile da Telegram https://telegram.me/MyBot
Da console edita con l'editor ASCII nano il file wpa_supplicant.conf dando il seguente comando:
$ sudo nano /etc/wpa_supplicant//wpa_supplicant.conf
Quindi aggiungi le seguenti righe:
network={ ssid="nome del mio access point" psk="password di accesso del mio access point" }
inserendo il nome della nostra rete WiFi e la passoword di accesso.
Salva e riavvia la rete WiFi con il comando:
$ sudo ifdown wlan0 $ sudo ifup wlan0
Controlla se la wlan0 (il nome della nuova scheda di rete) ha un indirizzo di rete assegnato da DHCP con il comando:
$ sudo ifconfig
Per poter inviare foto Inserire una webcam compatibile UVC video quindi per poter inviare foto installare il programma fswebcam con il seguente comando:
$ sudo apt-get update $ sudo apt-get install fswebcam
Ringrazio Alessio Camaioni (www.eliografica.com) per il supporto nella stesura di questo articolo.
2018 Ⓒ TanzoLab