Centreon-en soinuzko abisuak Ollama eta Piper-en IArekin

En este post vamos a combinar varios elementos para tener notificaciones por voz en nuestro sistema de monitorización. Usaremos por supuesto la Inteligencia artificial local y segura (Ollama) para generar un texto amable y humano con la alerta de Centreon, para posteriormente reproducirla en nuestra Pantalla de 7″ gracias a Piper y una voz en perfecto español.

Beraz, esan dudana, Centeron oinarritutako monitorizazio sistema bat baduzu, jakin dezakezu alerta jaso dezakezula zerbitzu edo host monitorizatuan arazo bat dagoenean, horrela zure datu-zentroan arazo bat gertatzen den bakoitzean jakin ahal izango duzu. Aurreko post batean ikusiko genuen nola egin Centreonek sortzen dituen mezuak ‘gizatiarrago’ izan daitezen’ Ollama AI-ri esker, Ordu hartan alerta testu-formatuan bidaltzen nuen Telegramen bidez. Gaurko aldea da mezu hori gizaki batek ahotsa erabiliz bota dadin egingo dugula (Piperrari esker) eta Raspberry Pi txiki baten bozgorailuetatik irakurri dadin, nire monitorizazio 7 hazbeteko pantaila″ horretarako erabilitako.

Adibide hau audio bat litzateke:

Ah, por supuesto, oroitu post honetan ikusiko dugun guztia open source dela, tokikoa, segurua, Internetik beharrik gabe

Piper

Beraz, Piperrekin hasiko gara, esan bezala bere webgune ofiziala es un 'un sistema neuronal rápido y local de texto a voz que suena genial'. Es un TTS (Text-to-speech) que podremos instalar en la Raspberry Pi para convertir cualquier texto en audio con una variedad inmensa de voces en distintos idiomas que nos vendrán genial!

Lo más sencillo para tener Piper instalado en la Raspberry Pi, será descargándonos ya el binario compilado para nuestra arquitectura de CPU. Que lo sabremos ejecutando: 'cat /proc/cpuinfo'.

  • Para el escritorio Linux de 64-bit: amd64
  • Para la Raspberry Pi 4 de 64-bit: arm64
  • Para la Raspberry Pi 3/4 de 32-bit: armv7

Descargaros la última versión que encontréis en su GitHub, los links se quedarán obsoletos. Nos lo descargamos, descomprimimos y entramos en su directorio:

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

Bere biltegitik entrenatutako ahots-eredu bat aukeratzen dugu: https://github.com/rhasspy/piper/#voices eta gehien gustatzen zaiguna aukeratzen dugunean, ONNX eta JSON fitxategia deskargatzen dugu. Bide batez, entzun nahi badituzue nola soinatzen duten, webgune hau erabil dezakezue: https://rhasspy.github.io/piper-samples/. Venga, deskargatzen ditugu:

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

Eta jada probatu dezakegu, bi aukera izango ditugu, audio streaming-a sortu eta zuzenean Raspberry Pi-ren bozgorailuetan entzun, edo behar dugun .wav fitxategi bat sortu. Ejecutamos:

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

Y sonará algo así:

Integración con Centreon

Si queremos llamar a Piper desde una alerta de notificación, estos son los pasos que yo he seguido. Primero en la Raspberry Pi le crearemos un script al que Centreon le llame cuando haya una notificación, ejecutará este script que notificará por los altavoces de la alerta generada. El script recibirá como primera y única variable el texto que debe reproducir. Me ha quedado algo así (/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

Xehetasun batzuk ikusi ahal izango dituzue, ahotsa pixka bat moteldu dudala, eta snapclient zerbitzu batzuk gelditzen ditudala, pantaila honetatik ere musika ingurukoa entzuten baita normalean eta denbora batez gelditu behar dugula mezua entzuten den bitartean.

Script-a exekutagarri egin ondoren, Centreon Central zerbitzaritik deitu/execuzio egin beharko dugu, edo Poller batetik kasu honetan. Para ello, Centreon zerbitzariaren eta Raspberry Pi-ren artean fingerprint bat egitea beharko da, SSH bidez sar zaitezen pasahitzik galdu gabe, eta horrela script-a urrutitik exekutatuko dugu.

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

Así que en el Centreon nos logueamos como el usuario que ejecuta las cosicas en Centreon, generamos una clave privada y pública en caso de no tenerlas; luego con cat veremos la clave pública recién creada y la copiamos.

Pegamos la clave pública del Centreon Central o Poller en la Raspberry Pi en el fichero /home/pi/.ssh/authorized_keys

Y probamos a ver si conectamos desde Centreon con centreon-engine a la Raspberry Pi con un SSH::

ssh pi@DIRECCION_IP_RASPBERRY_PI

Ahora queda dar de alta los comandos en Centreon que se usarán para notificar cuando un Host o un Servicio tienen problemas. Si usamos aurreko post honetara como referencia, donde generamos ya los scripts para lanzar el mezu generado por la IA de Ollama a Telegram, pues simplement tendremos que añadirles una line al final que llame al script created en la Raspberry Pi y ya. Así recibiremos la notificación en Telegram y por los altavoces. Os dejo un resumen del script que alerta arazoak en los Hosts, esandakoa, lo importante es la última line:

#!/bin/bash

# Genera el mensaje la IA de Ollama al gusto
texto="Mesedez, sortu testu bat erabiltzailearen smartphone-era bidaliko den jakinarazpen baterako informazio erabilgarria duena. Teknologia-sistemak diren teknikarientzako testuak sortzen dituen agente pertsonal erabilgarria zara. Zure erantzunak teknikoak izan daitezke, Ez eskaini laguntza gisa, Ez ere gomendiorik eman. Zure mezua arazo motaren batean da: "$1", taldean "$2" egoeran dagoelako "$3". Ez egin ongi etorri mezurik, Ez esan Kaixo eta ez zaindu agurtu, Ez eskertu ezer ere. Erantzuna euskaraz izan behar da eta mezua laburra izan behar da."

testua_sortutakoa=$(/usr/bin/curl http://DIRECCION_IP_OLLAMA:11434/api/generate  -H "Eduki-mota: application/json" -d '{
  "model": "llama3",
  "prompt": "'"$testua"'",
  "tenperatura.": 0.1,
  "stream": false,
  "gehieneko_luzera.": 50
}' | jq -r '.erantzuna')

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

# Manda a Telegram
/usr/bin/curl -X POST -H "Eduki-mota: 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, montar la IA local y segura de Ollama, montarse Centreon…

Como siempre y por ser muy original, espero que os haya resultado de interés, que podáis aplicarlo en otro tipo de tecnologías, ideas… La verdad que Piper y Ollama en mi hogar con Home Assistant son totalmente necesarios, le dan un toque original, ahora sí que podemos empezar a llamarle poquito a poco hogar inteligente… pero eso, en otros posts, ya veremos!

Muxuak, ongi portatu!

Izenburuko mezuak

Egilea

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, ez zalantzarik izan nirekin harremanetan jartzeko, ahal duzun guztietan laguntzen saiatuko naiz, partekatu ahal dudan guztietan ;) . Dokumentuez gozatu!!!