Si tratta di un semplice gestore per un BOT di Telegram che interagisce con le camere IP (ad esempio quelle di un sistema di videosorveglianza casalingo) e preleva le loro immagini .jpg da una cartella sul file system locale inviandole quindi ad uno o più account Telegram.
Le immagini vengono spedite in chat man mano che vengono create sul file system: il modulo whatchdog
è infatti in ascolto su una cartella locale. Mentre il modulo telepot
si occupa di gestire il BOT.
In questo modo è possibile farsi spedire le immagini di una camera, magari acquisita a valle di un movimento o di un rumore, direttamente su una chat dedicata su Telegram.
Potete scaricare l'ultima release dello script da qui.
![un esempio di architettura per l'utilizzo dello script](https://github.com/alexscarcella/MyIPCameraBot/blob/master/resources/MyIPCameraBot.png?raw=true "un esempio di architettura per l'utilizzo dello script" {width=354px height=754px})
In questo modo è possibile farsi spedire le immagini di una camera, magari acquisita a valle di un movimento o di un rumore, direttamente su una chat dedicata su Telegram.
/help
: elenco comandi (questo!)/jpg
: ti invio le immagini JPG di tutte le camere/motion
: imposto il motion detection/night
: imposto la modalita' nottuna (infrarosso)/status
: ti dico come sto
Per far funzionare correttamente lo script del bot è necessario installare alcuni moduli Python aggiuntivi:
- telepot: Python framework for Telegram Bot API - v10.2
- watchdog: Filesystem events monitoring. Python API and shell utilities to monitor file system events - v0.8.3
- requests: Non-GMO HTTP library for Python, safe for human consumption - v2.12.3
- Pillow: Pillow is the friendly PIL fork by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and Contributors.
Potete installare i moduli usando pip.
$ sudo pip install watchdog
$ sudo pip install telepot
$ sudo pip install requests
$ sudo pip install Pillow
Se volete aggiornare i moduli esistenti, usate il comando sudo pip install <module> --upgrade
. Verificate comunque la compatibilità delle versioni. Per maggiori informazioni visitate il blog CCWorld.it.
E' necessario creare il file di configurazione MyIPCameraBot_config.py
da mettere nella stessa cartella dello script python. Potete editare e rinominare il file di esempio MyIPCameraBot_config.example
:
si tratta ancora di un files di configurazione grossolano (di fatto è un file python, quindi attenti alla sintassi).
Il file è diviso in tre differenti sezioni:
- BASIC CONFIGURATION: qui ci sono i valori di configurazione base dello script. Tra cui il Token segreto di Telegram, o la cartella sul file system locale da cui prelevare le immagini.
- CHAT USER: qui vengono definiti gli utenti con cui il Bot è abilitato ad interagire. Al momento, e vista la natura dell'applicazione, non è prevista una procedura di sottoscrizione.
- CAMERE CONFIGURATION: qui sono definite le camere con i loro parametri per al raggiungibilità nella rete locale. La cosa importante è conoscere le URL di configurazione di ogni vostro modello di camera. In genere tutte le camere IP prevedono delle API va HTTP (oppure sniffate il traccifo, come ho fatto io, e ricavate i parametri in POST).
Sia gli utenti che le camere sono definiti attraverso un Dictionary di Python: ricordatevi quindi di aggiungerli rispettivamente alle variabili users
e camere
.
Ad esempio:
# fil#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# ------------------- BASIC CONFIGURATION -------------------------------------
# -----------------------------------------------------------------------------
# inserite qui il Token segreto del BOT Telegram
TELEGRAM_BOT_TOKEN = "fffffffffffffffffffffffffffffffffff"
# path completo della cartella contenente le immagini (un esempio:)
IMAGES_PATH = "/Volumes/images/cctv"
# l'intervallo di tempo minimo (in secondi) che deve trascorrere da un messaggio ed il successivo
# the minimum time interval (in seconds) that must pass from one message and the next
SEND_SECONDS = 5
# tempo necessario all'invio delle immagini di tutte le camere prima del time-out
# time required to send images of all cameras before the time-out
SEND_ONDEMAND_TIMOUT = 8
# log file path (5 files in rotation)
LOG_FILENAME = '/Volumes/dati/alessandroscarcella/Dropbox/Documenti DropBox/Developer/PythonGIT/MyIPCameraBot/MyIPCameraBot.log'
# -----------------------------------------------------------------------------
# ------------------- CHAT USERS ----------------------------------------------
# -----------------------------------------------------------------------------
# user 01
user01 = dict()
user01['name'] = 'Mario'
user01['telegram_id'] = '111111111'
user01['push'] = True
# user 02
user02 = dict()
user02['name'] = 'Alice'
user02['telegram_id'] = '22222222'
user02['push'] = False
users = (user01, user02)
# -----------------------------------------------------------------------------
# ------------------- CAMERAS CONFIGURATION -----------------------------------
# -----------------------------------------------------------------------------
# camera 01
camera01 = dict()
camera01['id'] = 'ingresso'
camera01['model'] = 'D-Link DCS-932LB'
camera01['ip'] = '127.0.0.2'
camera01['port'] = '80'
camera01['user'] = 'user'
camera01['pwd'] = 'pwd'
camera01['url_jpg'] = '/image/jpeg.cgi'
camera01['url_motion_detection'] = '/motion.cgi?MotionDetectionEnable={0}&ConfigReboot=no'
camera01['url_night_mode'] = '/daynight.cgi?DayNightMode={0}&ConfigReboot=0'
# camera 02
camera02 = dict()
camera02['id'] = 'garage'
camera02['model'] = 'D-Link DCS-932LB'
camera02['ip'] = '127.0.0.3'
camera02['port'] = '80'
camera02['user'] = 'user'
camera02['pwd'] = 'pwd'
camera02['url_jpg'] = '/image/jpeg.cgi'
camera02['url_motion_detection'] = '/motion.cgi?MotionDetectionEnable={0}&ConfigReboot=no'
camera02['url_night_mode'] = '/daynight.cgi?DayNightMode={0}&ConfigReboot=0'
camere = (camera01, camera02)
E' possibile usare come modello il file MyIPCameraBot_config.example
(da editare e rinominare).
Nel caso in cui si volesse inviare i messaggi ad un solo utente, è possibile configurare la sezione users
nel seguente modo:
# user 01
user01 = dict()
user01['name'] = 'Mario'
user01['telegram_id'] = '111111111'
user01['push'] = True
users = (user01, None)
Il dictionary users
deve avere almeno due elementi, per cui è necessario inserire un utente fittizio nullo (None
).
Se volete far girare MyIPCameraBot come un servizio in background potete creare un file UNIT. Seguite le seguenti istruzioni:
Create il nuovo file MyIPCameraBot.service
nella cartella /lib/systemd/system/
(potete usare l'editor nano)
Inserite le seguenti righe:
[Unit]
Description=MyIPCameraBot CCTV Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python /home/pi/Documents/MyIPCameraBot.py # sostituite con il percorso corretto
[Install]
WantedBy=multi-user.target
Sostituite il percorso dello script python dell'esempio in alto con il percorso corretto Salvate il file, chiudete l'editor di testo. Assegnate i necessari diritti di esecuzione al file tramite il comando:
sudo chmod 644 /lib/systemd/system/MyIPCameraBot.service
Per far partire il servizio al boot digitate (è sufficiente una sola volta):
sudo systemctl daemon-reload
sudo systemctl enable MyIPCameraBot.service
sudo reboot
Qualche comando utile per gestire il servizio (si faccia eventualmente riferimento alla documentazione della vostra distro Linux):
- check status:
sudo systemctl list-units -t service | grep MyIPCameraBot
- start
sudo systemctl start MyIPCameraBot.service
- stop
sudo systemctl stop MyIPCameraBot.service
- reload config:
sudo systemctl reload MyIPCameraBot.service