CentRed

Da raspibo.
Progetto
CentRed
Centralino di controllo avvisi (segnalazioni e allarmi)
code repository

Centralino di gestione avvisi e allarmi

Si occupa di avvisare l'utilizzatore attraverso messaggi di posta elettronica, telefonate VOIP e chat (XMPP), di avvisi e allarmi dell'impianto domotico (?) e/o degli apparati che gli inviano messaggi opportunamente predisposti.

Tabella di riferimento del messaggio da inviare: https://github.com/raspibo/CentRed/wiki/Tabella-avvisi.

Ad oggi questa centralina e` usata da
Thermo
Centralina livello 1


Indice

Installazione

Distribuzione: Raspbian (Debian) versione 9, codename "stretch".

Setup

Al primo avvio la nuova SD Card ha visualizzato una schermata di "Resizing file system" (o qualcosa di simile), seguito da un riavvio del sistema.

SSH nella nuova release non e` attivato di default, prima di proseguire l'ho attivato:

sudo su
raspi-config
5 Interfacing options
P2 SSH Enable

.. e visto che ero qui, ho configurato anche qualcos'altro:

password
hostname <centred>
locale <en>
timezone <rome>
keyboard layout <en-US>
wifi country <it> # anche se non la usero`

Visto che ho aggiornato tanta roba, ho riavviato il sistema.

Upgrade

sudo su
apt-get update
apt-get upgrade
reboot # perche` ha aggiornato anche i pacchetti del kernel

Installazione pacchetti

sudo su
apt-get install nginx fcgiwrap redis-server asterisk festival festvox-ita* python3-dnspython python3-pip git
pip3 install redis pyxmpp2

Configurazione

Per prima cosa, meglio avere gia` sottomano il repository git per copiare files e configurazioni, da utente normale, effettuamo una clonazione di questo repository:

mkdir git
cd git
git clone https://github.com/raspibo/CentRed.git
cd CentrRed
IMPORTANTE
Tutti i comandi visualizzati nella fasi successive sono riferiti alla directory in cui ci si trova ora, cioe`: "/home/pi/git/CentRed"

Crontab

Va bene che sia da utente, non servono permessi particolari:

crontab -e

Inseriamo questa riga alla fine del file:

10 7 * * 0 redis-cli hmset msg:redis:alive:$(date +\%Y\%m\%d\%H\%M\%S) type "alert" desc "Messaggio ciclico di centralina in funzione" value "on" um "" date "$(date +\%Y/\%m/\%d\ \%H:\%M:\%S)" > /dev/null

Riga che una volta a settimana ci inviera` un messaggio che la centralina e` in funzione.

Asterisk

Per editare i successivi files dovrete essere "root", quindi:

sudo su
/etc/asterisk/extensions.conf
Aggiungete queste righe in fondo al file
[centred]
exten => _X.,1,Answer()
exten => _X.,n,Wait(1)
exten => _X.,n,Playback(alarm)
exten => _X.,n,Wait(1)
exten => _X.,n,Hangup()
/etc/asterisk/sip.conf
Aggiungete queste righe in fondo al file
; Configurazione di un interno del PBX
[2001]                          ; numero identificativo dell'interno (il numero della linea telefonica)
; Turn off silence suppression in X-Lite ("Transmit Silence"=YES)!
; Note that Xlite sends NAT keep-alive packets, so qualify=yes is not needed
secret=NC2001                   ; password in chiaro (può essere anche cifrata con MD5)
type=friend                     ; la configurazione tipica per un telefono è friend, altrimenti con user per una linea solo ricevente, peer per un trunk verso l'esterno
regexten=1234                   ; When they register, create extension 1234
context=centred
callerid="CentRed" <2001>       ; i dati di presentazione della linea visualizzati nel display di chi riceve la chiamata
host=dynamic                    ; This device needs to register
;directmedia=no                 ; Typically set to NO if behind NAT
disallow=all
;Configurazione del tipo di compressione della fonia
;allow=gsm                      ; GSM consumes far less bandwidth than ulaw - formato compresso che risparmia banda
allow=alaw                      ; il tipo di codec da usare per la chiamata alaw è senza compressione, è adatto ad esempio su lan
;mailbox=1234@default,1233@default      ; Subscribe to status of multiple mailboxes
registertrying=yes ; Send a 100 Trying when the device registers.

Nginx

Copiare i nuovi files di configurazione dal repository ed eliminare il web server configurato di default:

sudo su
cp etc/nginx/sites-available/mysite /etc/nginx/sites-available/
ln -s /etc/nginx/sites-enabled/mysite /etc/nginx/sites-enabled/
cp etc/nginx/myfastcgi.conf /etc/nginx/
rm /etc/nginx/sites-enabled/default

Abbiamo effettuato tutte le operazioni come "root", ma assicuratevi che il proprietario sia corretto, se non lo e`:

sudo su
chown root:root -R /etc/nginx/

Potreste gia` riavviare il web server, ma non abbiamo ancora completato, riavvieremo il sistema alla fine di tutto, ma se volete:

sudo sytemctl restart nginx

dovrebbe funzionare.

Nel web server e` attiva (in configurazione) l'autenticazione, per completarla dovete creare il file "/var/www/.htaccess" in questo modo (sostituite USERNAME col vostro nome o altro):

sudo su
echo -n "USERNAME" >> /var/www/.htpassw
echo -n ":" >> /var/www/.htpasswdd
openssl passwd >> /var/www/.htpasswd
chown www-data:www-data /var/www/.htpasswd
chmod 600 /var/www/.htpasswd

Redis

Potete fare come ho fatto io, oppure modificare tutto nel file di configurazione, dovrebbe essere possibile stando a quel che ho letto.

sudo su
/etc/redis/redis.conf
Solo commentato la linea (dovrebbe essere la 61)
#bind 127.0.0.1

Ancora pero` l'accesso da remoto non e` possibile, si deve modificare un'altro parametro e renderlo permanente (quello che scrivevo dovrebbe essere possibile nel file di configurazione):

redis-cli
127.0.0.1:6379> CONFIG SET protected-mode no
OK
127.0.0.1:6379> CONFIG REWRITE
OK
127.0.0.1:6379> quit
Importante
Non ho impostato nessuna password, quindi non esponete questo pc/raspberry alla rete esterna.

CentRed (www)

Ho messo tutti i files/script nella directory del web server.

Li copiamo dal repository e settiamo il giusto proprietario:

sudo su
cp -varpu var/www/ /var/
chown www-data:www-data /var/www/*.html
chown www-data:www-data /var/www/cgi-bin/
Nota
I permessi sono 755, quindi i files sono eseguibili da chiunque.

Avvio

Ovviamente all'avvio del sistema la nostra centralina deve avviarsi da sola, ho scelto di eseguire il programma dal "classico" file:

/etc/rc.local
Ho aggiunto le seguenti righe prima della "exit 0"
# Start "CentRed"
DAEMON_NAME=centred  # senza .py
PID=`ps -e -o pid,cmd | grep "$DAEMON_NAME[.]py" | awk '{ print $1 }'`
if [ $PID ]
        then
                echo "Non si e\` avviato \"$DAEMON_NAME\", oppure era gia\` avviato:"
                echo "Actual PID is: $PID"
        else
                echo "Avvio $DAEMON_NAME .."
                #su pi -c "python3 /var/www/cgi-bin/centred.py &"
                python3 /var/www/cgi-bin/centred.py &  # deve essere 'root'
                # .. e un messaggio a se stesso quando si [ri]avvia
                sleep 2  # un po` di ritardo
                redis-cli -h centred hmset msg:alert:level1:$(date +\%Y\%m\%d\%H\%M\%S) type "alert" desc "Avvio centralino allarmi CentRed" value "on" um "" date "$(date +\%Y/\%m/\%d\ \%H:\%M:\%S)"
                cd /
fi

Start/Reboot & Configure

E` il momento di riavviare il sistema.

Se tutto e` andato bene, dovrebbe essere gia` funzionante, rimane da configurarlo.

Da browser aprite l'indirizzo http://centred:8080 (o "localhost:8080" o usate l'indirizzo IP), alcune voci non funzioneranno, altre pagine andranno proprio in errore, basta inserire i dati corretti e nel giusto ordine.

  1. Per primo, inserite gli account di posta elettronica e XMPP, inserendo il vostro username/password ed eventuali parametri del server (tipo smtp.gmail.com porta 567).
  2. Inserite i destinatari dei messaggi, sono previsti inserimenti per destinatari di mail, XMPP e sip.
  3. Ora si possono associare gli elenchi ai tipi di messaggi, cioe`, dove dev'essere inviato il messaggio alarm piuttosto che alert ...

Pagina principale

Pagina principale e menu:

Centred-Messaggi.png


Sono visibili i normali messaggi di controllo di funzionamento di se stessa e della centralina Thermo.

I messaggi non ancora confermati sono inviati a cadenze cicliche e per un massimo di volte, dipendente dalla configurazione.

Ovviamente, una volta confermati, non sono piu` inviati e permangono visualizzati nella pagina fino a scadenza (configurazione).

Prima configurazione

Ed anche unica, normalmente ;)

Il database NoSQL Redis utilizzato, non e` configurabile perche` DEVE risiedere nella stessa macchina.

Nota
Non sono riuscito a parametrizzare tutte le configurazioni

Configurazione accounts

Mail

Inserite le credenziali per l'invio/uso della posta elettronica, questo e` l'indirizzo che servira` per inviare le mail delle segnalazioni della centralina

Centred-ConfiguraMail.png

XMPP

Inserite le credenziali per l'invio/uso del protocollo XMPP, servira` per inviare le segnalazioni della centralina.

Centred-ConfiguraXMPP.png

Configurazione liste destinatari

Aggiungete gli indirizzi dei destinatari dei messaggi delle varie segnalazioni della centralina:

Centred-ListaMail.png

Centred-ListaXMPP.png

Centred-ListaSIP.png

Configurazione destinazioni allarme

Per ogni tipologia di segnalazione, si deve indicare a quali liste e` da inviare:

Centred-SelezioneListeMessaggiAllarme.png

Centred-SelezioneListeMessaggiAllerta.png

Configurazione

I parametri di controllo ed invio degli avvisi:

Centred-Configurazione.png


Riferimenti

https://github.com/raspibo/CentRed.git

https://github.com/raspibo/CentRed/wiki

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti