CentRed

Da raspibo.
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Centred
Centralino di controllo avvisi (segnalazioni e allarmi)
Repository: https://github.com/raspibo/CentRed.git

Revisione 2023 07 12 (luglio)

Al momento ho terminato una nuova installazione ed il sistema non e` nella rete della "level1", dovro` anche aggiornare il repository "git"

lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye
  • Ho dovuto modificare istruzioni cgi<->html negli script python
  • Non ho al momento riconfigurato nessun invio mail (causa problemi autenticazione gmail da linea di comando, che chiede il rinnovo del token settimanalmente)
  • Non ho configurato XMPP, perche` sono sempre meno i server a disposizione
  • Neanche SIP ho configurato, per cui non ho ancora testato asterisk

Revisione 2019 07 28 (luglio)

  • Riviste ed aggiornate queste istruzioni
  • L'installazione di Asterisk da` errore, ma poi tutto sembra funzionare

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

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 python3-redis
pip3 install 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 CentRed
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-available/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 systemctl 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/.htpasswd
echo -n ":" >> /var/www/.htpasswd
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 -va var/www/ /var/
chown www-data:www-data /var/www/*.html
chown www-data:www-data -R /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