Vi ricordate che qualche tempo fa ho messo su un sistema per la videosorveglianza di casa usando il Raspberry Pi, il programma motion e gestibile da Twitter? Se no, qui potete trovare tutte le informazioni.
Visto che Twitter è una piattaforma che mi è sempre piaciuta appena sopra la sufficienza ho scoperto questa cosa dei bot di Telegram e ho pensato: “perché non cambiare la gestione del sistema?”
Partiamo dall’inizio: cos’è un bot?
Un bot (è il diminutivo di “robot”) è un progamma che, se sollecitato con appositi comandi, compie alcune azioni. La piattaforma di Telegram propone un sistema di bot ben documentato e incredibilmente facile da utilizzare. E, detto tra noi, il fatto che la gestione dei bot sia fatta tramite un bot chiamato TheBotfather la cui icona è questa
la cosa è ancora più divertente.
Ok, torniamo seri e vediamo come fare il progetto. Per tutta la parte di motion andate a rileggervi i post vecchi, non cambia nulla (soprattutto la prima e seconda parte).
Per creare il bot su Telegram (e poter interagire in un secondo momento) dovete avere un account sulla piattaforma, se non ce l’avete createvelo che è una validissima alternativa gratis e aperta ad Whatsapp. La guida per creare il bot è veramente semplice. Una volta scelto il nome lo create e vi mettete da parte il codice univoco (non va divulgato!) del vostro nuovo amico.
Seguendo le istruzioni della documentazione di Telegram potete assegnare un’icona al vostro amato bot e la lista dei comandi, così da semplificare la gestione del bot e scrivere pochissimo con la tastiera del telefono. Una cosa estremamente comoda dei bot è che possono proporre delle tastiere personalizzate in modo da dare i comandi con un solo tap, con questo nuovo sistema basta un tap per accendere il sistema, spegnerlo o conoscerne lo stato, anche se fa freddo e avete le dita ghiacciate, non è più necessario scrivere strani comandi.
Adesso installate la libreria Python telepot nel vostro sistema, in modo da poter operare con pochissimi comandi e far funzionare come si deve il vostro bot.
Come la volta scorsa, ci sono alcuni file da creare:
- tvcc.py, il cuore del sistema, con la logica del bot e le funzioni per accendere, spegnere e controllare il sistema (avviato al boot del sistema)
- avvisa_movimento.py, che vi manda un messaggio quando viene rilevato un movimento (avviato dal sistema motion)
- invia_foto.py, che vi invia tutte le foto della rilevazione del movimento man mano che vengono generate (avviato dal sistema motion)
- tvcc.conf, il file di configurazione con tutte le opzioni necessarie per farlo funzionare nel vostro ambiente.
Tutti i sorgenti li trovate nel repository di Github, il codice è abbondantemente commentato in modo che possiate adattarlo in base alle vostre necessità.
Prima di iniziare ricordatevi la lista della spesa:
- Raspberry Pi Modelli A+, B, B+, B+2 (non va bene lo zero perché non ha il connettore della videocamera)
- Videocamera IR (per vedere anche al buio)
- Illuminatore IR (la videocamera non vede al buio, ma vede la luce infrarossa)
- Una scatola per il Raspberry e la videocamera (inutile dire che deve essere ben ferma, se no tutto il sistema va a pallino)
- Un alimentatore per il Raspberry
- Una scheda SD, che senza il Raspberry è inutilizzabile.
Ciao, figata ! Avrei bisogno di un consiglio, sto facendo la stessa cosa ma vorrei che il bot mi mandasse in automatico un messaggio quando qualcuno preme il pulsante di casa (un push button collegato gpio), nessun problema per lo script per la foto ma come rendo tutto automatico? Grazie!
Ciao Marco,
per la cosa che serve a te (potresti intercettare il campanello, in effetti) devi avviare un servizio fatto con Python che monitori lo stato del GPIO che ti interessa, quando cambia lo stato allora fai partire il messaggio (metti un controllo che non faccia partire troppi messaggi se il pulsante viene premuto troppo a lungo)
Ciao, ottimo programma , lo sto usando da un po’ e funziona bene, ora l’ho modificato per usare telegram, ma c’e un piccolo problema che non sono ancora riuscito a risolvere, il bot parte, invia le immagini e i messaggi in caso di movimento, ma se invio io dei messaggi, nessuna risposta,, e nel log mi scrive questo:
“2016-08-14 20:55:20 [INF] Motion e’ partito al boot del sistema
2016-08-14 20:56:16 [INF] Sistema avviato
2016-08-14 20:56:17 [INF] Internet c’e
2016-08-14 20:56:17 [INF] IP pubblico: 2.36.138.109
2016-08-14 20:56:17 [INF] IP di LAN: 192.168.1.3
2016-08-14 20:56:19 [INF] Connessione a Telegram avvenuta! ID utente del bot: 2016-08-14 20:56:19 [INF] Comando avvio motion al boot del sistema
2016-08-14 20:56:25 [INF] Motion e’ partito al boot del sistema
2016-08-14 20:56:25 [ERR] Connessione a Telegram fallita o caduta
2016-08-14 20:56:25 [ERR] Traceback (most recent call last):
File “tvcc.py”, line 475, in
bot.notifyOnMessage(handle)
AttributeError: ‘Bot’ object has no attribute ‘notifyOnMessage’
2016-08-14 20:56:25 [ERR] Traceback (most recent call last):
File “tvcc.py”, line 475, in
bot.notifyOnMessage(handle)
AttributeError: ‘Bot’ object has no attribute ‘notifyOnMessage’
dove sto sbagliando?
Grazie!
Ciao Enrico,
vedo Bot in maiuscolo, ma Bot è l’oggetto della libreria Telepot, la variabile invece nel mio codice è minuscola, sicuro di fare riferimento all’oggetto corretto?
Questo blog è una vera fonte di ispirazione.L’ho scoperto per caso pochi mesi fa e da allora ti seguo mentre “aggeggio” con i miei raspberry 🙂
Continua così 🙂
P.S. uso Archlinux ARM
Grazie Maurizio! 🙂
Ciao Francesco, grazie per le tue guide, sono veramente ottime!!
oggi ho completato quella precedente con twitter, domani proverò a passare a telegram.
tante grazie ancora, buona serata
Ciao marco,
grazie a te per il tuo commento! Ti accorgerai che rispetto a twitter, Telegram è molto molto meglio 🙂
Ciao Francesco, come ti dicevo sto provando a passare a telegram, ma ho incontrato qualche “problemino”
innanzitutto non ho capito perchè tvcc.py non mi riesca a rilevare il mio IP di LAN, cosa che ho risolto forzandolo io
indirizzo_eth0 = ‘192.168.xx.xx’ (secondo te il formato è giusto?)
a parte questo, c’è un problema con l’id chat che mi fa terminare tvcc.py, e cioè.. considerando che io non ho altre persone con cui condividere la videosorveglianza, non so come aprire una chat da solo e ottenerne l’id.
l’unica cosa che ho fatto è quella di ottenere l’id della chat del mio bot, solo che se poi la metto in tvcc.conf succede questo quando avvio tvcc.py
File “tvcc.py”, line 426, in
bot.sendMessage(ConfigSectionMap(“Sistema”)[‘id_chat’], messaggio)
File “/usr/local/lib/python2.7/dist-packages/telepot/__init__.py”, line 408, in sendMessage
return self._api_request(‘sendMessage’, _rectify(p))
File “/usr/local/lib/python2.7/dist-packages/telepot/__init__.py”, line 397, in _api_request
return api.request((self._token, method, params, files), **kwargs)
File “/usr/local/lib/python2.7/dist-packages/telepot/api.py”, line 131, in request
return _parse(r)
File “/usr/local/lib/python2.7/dist-packages/telepot/api.py”, line 126, in _parse
raise exception.TelegramError(description, error_code, data)
telepot.exception.TelegramError: (u’Bad Request: chat not found’, 400, {u’error_code’: 400, u’ok’: False, u’description’: u’Bad Request: chat not found’})
secondo te come potrei risolvere? grazie mille per l’aiuto
Ciao Marco,
se devi parlare solo tu con il tuo bot usa il tuo ID personale e non l’id della chat, vedrai che funziona 🙂
Ciao Francesco, buona domenica. Alla fine ce l’ho fatta 🙂 il raspy e telegram comunicano!!
non ho capito come mai nonostante togliessi l’ID dalla chat mi dava lo stesso errore, ho provato per caso a mettere il mio ID utente e a metterlo anche nell’ID chat e tutto ha iniziato a funzionare. grazie mille, ottimo programma.
Grazie a te! Sono contento che sia riuscito a farlo funzionare 🙂
Salve, complimenti per il blog.
Ho seguito la sua guida precedente con Twitter e tutto funziona alla perfezione nonostante le mia conoscenza mediocre per quanto riguarda Python, non sono riuscito invece con Telegram. Non capisco le parti di codice che vanno sostituite con dati personali. Una volta creato il bot di Telegram mi accingo ad editare il file tvcc.conf ma non capisco dove inserire il token consegnatomi da Botfather . Grazie
Ciao Mario,
grazie per i complimenti 🙂
L’ID univoco che ti è stato fornito da The Botfather è nel formato [un po’ di numeri]:[un po’ di lettere maiuscole e minuscole] lo devi mettere nel file di configurazione a questa riga:
# Identificativo del bot Telegram fornito da The Botfather
# questo dato NON DEVE ESSERE DIVULGATO IN NESSUN MODO
# OBBLIGATORIO
id_bot: [un po' di numeri]:[un po' di lettere maiuscole e minuscole]
Grazie mille per la risposta, Francesco! Ora è tutto più chiaro. Tralasciando le informazioni della voce [Sistema] che mi pare di capire dai commenti non è obbligatorio inserire, non capisco se per i due file di log ( entrambi obbligatori) devo assegnare i path in cui verrà creato il nuovo file o assegnare un path con file preesistenti ( ad esempio quello in qui ho il file di log di motion) e per ultimo da dove posso ottenere l’id chat di gruppo, considerato che al momento sono solo io ad avere il controllo del bot e non altri familiari? Grazie mille per la delucidazione!
I due file di log sono differenti dal log di motion, qudndi un nuovo file
Se non crei un gruppo, devi metrtere mano al codice e sostituire gli id_chat con id_utente, che poi è il tuo, così hai il bot solo nelle tue mani
Ciao Francesco e grazie per la risposta. Ci sono arrivato con le mie forze . Ho avuto occasione anche di ascoltare il podcast ep. 21 . Veramente bello ed interessante. Mi sono sorti due problemi. Ti spiego: dal file di log tvcc mi risultava lo stesso errore che é risultato all’utente Enrico. Ho trovato soluzione sostituendo la stringa bot.notifyOnMessage(handle) con bot.message_loop(handle). Ora il bot finalmente risponde ai miei comandi. Il secondo problema a cui non ho trovato soluzione è questo: una volta dato il comando Tvcc Off il bot risponde correttamente per l’ultima volta. Quando do il comando Tvcc on motion viene avviato ma il boot non risponde più ai miei comandi. Tuttavia mi invia ancora foto ed allert. Se provo a Tvcc spento a scattare una foto col comando Now sul file di log risulta : nessun file di output. Ciao Francesco ! 🙂
Ok ho risolto anche il problema del singolo scatto su richiesta col comando “Now” aumentando raspistill -t da 1 a 1000 ( a -t 1 non generava nessun file ma già per tempi superiori al millisecondo generava immagini, ma purtroppo molto scure, forse dovute alle condizioni ambientali) Rimane il problema che dato il comando Tvcc On ( dopo aver spento con Tvcc off) il bot non risponde più ( pur continuando ad inviare foto ed alert dei movimenti.
Tutto risolto Francesco, grazie per questo tutorial! Ho persino aggiunto, dopo aver apportato qualche modifica, un tasto che permette di ottenere un video dell’area. Veramente bello! Variando event gap ( nel tuo file motion.conf è lasciato al valore di default e cioè 60) cosa accade? .
Ciao Mario,
quel tempo è il numero di secondi che lui lascia passare senza vedere movimento per definire che un evento sia concluso.
Ciao 🙂
sono nuovo e ho appena scoperto questo sito e questo articolo tramite ricerca nei motori di ricerca.
La mia unica grande domanda da novellino dopo aver letto il tuo articolo è:
quindi chiunque trova il nome del mio bot può sbirciare la mia videosorveglianza?
Attualmente non ho trovato risposta nei motori di ricerca: i risultati sono tutta roba che non centra nulla. Sigh… Grazie in anticipo per il chiarimento
Ciao Paolo,
i bot di telegram sono pubblici tutti, però se guardi nel codice, ad un certo punto c’è un controllo dove io abilito solo le persone che ho deciso e che sono indicate nel file di configurazione