Alertes sonores de Centreon amb la IA d'Ollama i Piper

En aquest post vam combinar diversos elements per tenir notificacions per veu en el nostre sistema de monitoratge. Usarem per suposat la Intel·ligència artificial local i segura (Ollama) per generar un text amable i humà amb l'alerta de Centreon, per posteriorment reproduir-la a la nostra Pantalla de 7″ gràcies a Piper i una veu en perfecte espanyol.

Així que el que s' ha dit, si tens un sistema de monitoratge basat en Centreon sabràs que pots rebre alertes quan hi hagi un problema en un Servei o Host monitoritzat, així t'assabentaràs de qualsevol problema en la teva data. En un post passat veiem com fer que els missatges que genera Centreon siguin més 'humans’ gràcies a la IA d'Ollama, en aquella ocasió manava l'alerta en format text per Telegram. Avui la diferència és que farem que el missatge sigui reproduït per una veu humana (gràcies a Piper) i sona pels altaveus d'una petita Raspberry Pi, que utilitzo en mi Pantalla de 7″ de monitoratge.

Aquest seria un exemple d'àudio:

Ah, per suposat, recordar que tot el que veurem en aquest post és open source, local, assegurança, sense necessitat d' Internet

Piper

Comencem per tant amb Piper, que com diuen en el seu web oficial és un 'un sistema neuronal ràpid i local de text a veu que sona genial'. És un TTS (Text-to-speech) que podrem instal·lar a la Raspberry Pi per convertir qualsevol text en àudio amb una varietat immensa de veus en diferents idiomes que ens vindran genial!

El més senzill per tenir Piper instal·lat a la Raspberry Pi, serà descarregant-nos ja el binari compilat per a la nostra arquitectura de CPU. Que ho sabrem executant: 'cat /proc/cpuinfo'.

  • Per a l'escriptori Linux de 64-bit: amd64
  • Per a la Raspberry Pi 4 de 64-bit: arm64
  • Per a la Raspberry Pi 3/4 de 32-bit: armv7

Descarregar-vos l'última versió que trobeu al seu GitHub, els links es quedaran obsolets. Ens ho descarreguem, descomprimim i entrem en el seu directori:

wget https://github.com/rhasspy/piper/releases/download/v1.2.0/piper_armv7.tar.gz tar zxfv piper_armv7.tar.gz cd piper

Triem un model de veu entrenada del seu repositori: https://github.com/rhasspy/piper/#voices i quan triem la que més ens agradi ens descarreguem el fitxer ONNX i el JSON. Per cert si voleu escoltar-les per veure com sonen, usar aquesta web: https://rhasspy.github.io/piper-samples/. Vingui, ens els descarreguem:

wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/es/es_ES/sharvard/medium/es_ES-sharvard-medium.onnx?download=true -O es_ES-sharvard-medium.onnx wget https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/es/es_ES/sharvard/medium/es_ES-sharvard-medium.onnx.json?download=true.json -O es_ES-sharvard-medium.onnx.json

I podem provar-ho ja, tindrem dues opcions, crear l'streaming d'àudio i escoltar-lo pels altaveus de la Raspberry Pi directament, o generar un fitxer .wav per al que necessitem. Executem:

echo 'Hola, esto es un ejemplo de una frase.' | ./piper --model es_ES-sharvard-medium.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -

I sona una cosa així:

Integració amb Centreon

Si volem trucar a Piper des d'una alerta de notificació, aquests són els passos que jo he seguit. Primer a la Raspberry Pi li crearem un script al qual Centreon li cridi quan hi hagi una notificació, executarà aquest script que notificarà pels altaveus de l' alerta generada. L' script rebrà com a primera i única variable el text que ha de reproduir. M'ha quedat una cosa així (/home/pi/piper/alerta_piper.sh):

#!/bin/bash cd /home/pi/piper rm alerta.wav echo $1 | ./piper --model es_ES-sharvard-medium.onnx --length_scale 1.1 --output_file alerta.wav systemctl stop snapclient aplay alerta_inicio.wav aplay alerta.wav aplay alerta_fin.wav systemctl start snapclient

Alguns detalls que veureu és que li alentiu un poquet la veu, i que aturo uns serveis de snapclient, ja que des d'aquesta pantalla també sol sonar música ambiental i per aturar-la temporalment mentre sona el missatge.

Després de fer l'script executable, haurem d'anomenar-lo/executar-lo des del servidor de Centreon Central, o des d'un Poller si és el cas. Per a això, caldrà fer un fingerprint entre el servidor de Centreon i la Raspberry Pi, perquè pugui accedir per SSH sense demanar credencials, i d'aquesta manera executarem l'script en remot.

el seu centreon-engine ssh-keygen -t rsa cat /var/lib/centreon-engine/.ssh/id_rsa.pub ssh-rsa AAA... ySHsfu0 = centreon-engine@os-poller-osit

Així que al Centreon ens lloguem com l'usuari que executa les cosiques a Centreon, generem una clau privada i pública en cas de no tenir-les; després amb cat veurem la clau pública recent creada i la copiam.

Enganxem la clau pública del Centreon Central o Poller a la Raspberry Pi al fitxer /home/pi/.ssh/authorized_keys

I provem de veure si connectem des de Centreon amb centreon-engine a la Raspberry Pi amb un SSH::

ssh pi@DIRECCION_IP_RASPBERRY_PI

Ara queda donar d'alta els comandaments a Centreon que es faran servir per notificar quan un Host o un Servei tenen problemes. Si fem servir aquest post anterior com a referència, on generem ja els scripts per llançar el missatge generat per la IA d'Ollama a Telegram, doncs simplement haurem d'afegir-los una línia al final que cridi a l'script creat a la Raspberry Pi i ja. Així rebrem la notificació a Telegram i pels altaveus. Us deixo un resum de l'script que alerta problemes als Hosts, el que s' ha dit, l'important és l'última línia:

#!/bin/bash

# Genera el missatge la IA d'Ollama al gust text="Per favor, genera un text per a una notificació que serà enviada a l'smartphone de l'usuari amb informació útil. Ets un agent personal útil que genera text per a tècnics de sistemes. Les teves respostes poden ser tècniques, no t'ofereixis com a ajuda, ni des recomanacions. El missatge que has de dir és sobre un problema de tipus: "$1", a l' equip "$2" ja que és a l'estat "$3". No saluts, no diguis Hola i no t'acomiades, ni des les gràcies per res. La resposta ha de ser en Espanyol i el missatge ha de ser breu."

texto_generado =$(/usr/bin/curl http://DIRECCION_IP_OLLAMA:11434/api/generate -H "Content-Type: application/json" -d '{
  "model": "crida3",
  "prompt": "'"$text"'",
  "temperature": 0.1,
  "stream": false,
  "max_length": 50
}' | jq -r '.response')

texto_generado_sin_comillas ='echo "$texto_generado" | sed 's/\"//g'`

# Manda a Telegram
/usr/bin/curl -X POST -H "Content-Type: application/json" -d '{
  "chat_id": "ID_CHAT_TELEGRAM",
  "text": "'"$texto_generado_sin_comillas"'"
}' "https://api.telegram.org/botTOKEN_BOT_TELEGRAM/sendMessage"

# Alerta en la Raspberry Pi con Piper por los altavoces
ssh pi@DIRECCION_IP_RASPBERRYPI "sudo /home/pi/piper/alerta_piper.sh \"$texto_generado_sin_comillas\""

¡Y chimpún! Ya lo tenemos listo, script creado y el que tenga dudas tiene en los posts anteriores cualquier dato que necesite para crear el Comando, darlo de alta en Centreon, muntar la IA local i segura d'Ollama, muntar-se Centreon…

Com sempre i per ser molt original, espero que us hagi resultat d'interès, que podeu aplicar-lo en un altre tipus de tecnologies, idees… La veritat que Piper i Ollama a la meva llar amb Home Assistant són totalment necessaris, li donen un toc original, ara sí que podem començar a anomenar-li poquet a poca llar intel·ligent… però això, en altres posts, ja veurem!

Abraçades, portar-vos bé!

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!