Cómo usar ssh para indicar de forma remota a un sistema Ubuntu 16.04 que emita alertas audibles sin usar incron

Cómo usar ssh para indicar de forma remota a un sistema Ubuntu 16.04 que emita alertas audibles sin usar incron

Breve: La pregunta es si debo modificar mi sistema Ubuntu 16.04 para realizar una tarea, o si existe una manera más sencilla.


Se trata de un sistema complejo de ordenadores que implica una combinación de lenguajes y sistemas operativos.

Después de configurar el sistema primario Ubuntu 16.04 para que la planta solar hable, según:

16.04 LTS Cómo hacer que el sistema anuncie la hora al final de la hora con eSpeak

EXTRACTO: Usoespeak

sudo apt-get update
sudo apt-get install espeak

El siguiente paso es encontrar una manera para que los sistemas remotos de registro de datos (8 pantallas, generadas principalmente por escritorios Ubuntu 16.04 y un Rpi3B) ordenen al sistema de control primario Ubuntu 16.04 que emita alertas verbalmente.

Todos ejecutan programas Python para registrar y enviar datos al sistema de control Prime Ubuntu para archivarlos, manipular imágenes y cargarlos en el servicio de alojamiento web.

Los gráficos de datos actuales se crean en el sistema Prime Ubuntu 16.04 utilizando montagepara Imagemagickformatear los gráficos que se pueden ver aquí: https://www.SDsolarBlog.com/montage


Para recibir alertas de voz, el primer intento fue que simplemente usaran scppara actualizar un archivo en un directorio y que el sistema Ubuntu detectara el cambio en un archivo y respondiera ejecutando un script que espeakanuncia, por ejemplo, que un nivel bajo existe una condición de voltaje. Todos los sistemas utilizan inicios de sesión sin contraseña RSA, por lo que realizar la copia es sencillo.

La herramienta de referencia para monitorear cambios de archivos y directorios es incron- que es similar cronexcepto que se activa según los eventos del sistema de archivos en lugar del reloj.

Aquí está la información sobre el uso incron:

Monitorear la actividad de archivos y directorios con incron

EXTRACTO:

Comience con la instalación incrony inotify-toolsen el sistema de control Ubuntu 16.04.**

sudo apt-get update
sudo apt-get install incron
sudo apt-get install inotify-tools
sudo apt-get autoremove

luego use incrontab -epara configurar una entrada simple como esta:

/home/me/alarms IN_CREATE /home/me/alarms/saylow24

/home/me/scripts/saylow24donde están los contenidos de

#!/bin/bash
espeak "Low Voltage on 24"
sleep 10
espeak "Low Voltage on 24"

...para que el registrador de datos interior Ubuntu 16.04 pueda ordenar a la consola Prime que emita una alerta de voz cuando el banco de baterías de 6 kWh caiga por debajo de un voltaje umbral.


Luego comencé a configurar un script similar para el registrador de datos externo para el sistema de posicionamiento de paneles solares, que tiene su propio panel fotovoltaico y batería separados. Los días nublados lo matan.


En ese punto me detuve y me pregunté si realmente quería agregar la complejidad adicional de usar el incrondemonio en la consola Ubuntu 16.04. Prefiero que las cosas sean simples.

Pregunta: ¿Existe una forma más sencilla de hacer esto sin tener que realizar cambios importantes en Ubuntu?

Respuesta1

incronfunciona bien: detecta el archivo scpo incluso el touchde un archivo y activa el bashscript. Sin embargo, no es necesario utilizar un demonio dedicado sólo para detectar una señal que rara vez se utiliza. Usarlo incrones como sacar un mazo para aplastar una mosca, aunque sea el "estilo Ubuntu". Otros pueden necesitarlo pero yo no.


Spoiler: todo lo que necesitas es agregar una sola línea de código Python:

os.system("ssh me@prime ' ( /home/me/alarms/saylow12 ) ' &")

El resto de esta respuesta explica cómo se usa y puede ser TL;DR a menos que sea ingeniero de sistemas.

Los registradores de datos ejecutan programas Python para recoger entradas de unidades Nano USB/serie que realizan lecturas de temperatura y voltaje.

La mayoría están en computadoras de escritorio Ubuntu y el que está afuera es un Rpi3 de bajo consumo que funciona con un panel solar más pequeño separado y una batería de 12 V que se comparte con el sistema de posicionamiento del panel solar.

Todos usan programas Python para leer los datos en serie de los nanomicrocontroladores que leen temperaturas y voltajes, agregan la fecha y la hora a cada punto de datos y luego los guardan en los archivos de datos diarios en los sistemas Linux.


Los programas de registro se ven así (extracto):

import os
import serial
import datetime
import time

ser = serial.Serial("/dev/ttyUSB0",9600)
ser.flushInput()

while True :
    linein = ser.readline()
    if linein[:5]=="LOW V" :
        print
        os.system('echo "SUBJECT:  ALERT LOW VOLTAGE OUTSIDE" | ssmtp [email protected]')
    etc to add date/time stamp then save in CSV file

Luego producen gráficos que se muestran live plotsen monitores actualizados al minuto. Los gnuplotprogramas son muy simples:

set title "OUTSIDE 12V Battery"
set xlabel "Time"
set ylabel "Volts"
set yrange [11.5:15.5]
set grid
unset mouse
unset log
set key top left
set timestamp
set xdata time
set timefmt '%H:%M:%S'
set xtics format '%H:%M'
set style fill solid 1.0
set terminal x11
plot  15.5 lw 2 lc rgb 'navy' notitle, \
      14.5 lw 1 lc rgb 'black' t "Charger off", \
      14.4 lw 2 lc rgb 'blue' t "14.4V Charge", \
      12.7 lw 2 lc rgb 'green' t "12.7 Full", \
      12.45 lw 1 lc rgb 'black' t "Charger on", \
      12.1 lw 2 lc rgb 'black' t "12.1 V Alert", \
      "today.dat" using 2:15 skip 2 with boxes lw 1 lc rgb 'gray' t "Charger", \
      "today.dat" using 2:8 skip 2 with lines lw 1 lc rgb 'red' t "Battery"
pause 15
reread

Tenga en cuenta que el rereadcomando en gnuplot hace que el gráfico se actualice para que se muestre en tiempo real en la pantalla cuando Windows RDP accede al sistema de registro a través de WiFi.
En una sola pantalla grande caben 6 tramas. Luego otros dos en una pantalla diferente.

ingrese la descripción de la imagen aquí

Cada 15 minutos, el sistema Prime Ubuntu 16.04 reúne todos los gráficos, aplica algo de Imagemagic Fu y los envía ahttps://www.SDsolarBlog.com/montage


Al punto: Cuando el voltaje es demasiado bajo, los programas de registro ya están configurados para enviar una alerta por correo electrónico usando este código (o similar):

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp [email protected]")
  • Gmail está configurado para aplicar una etiqueta de alerta a cualquier mensaje con ALERTA en la línea de asunto.

  • Mi teléfono inteligente tiene un tono de notificación especial para los mensajes entrantes de Gmail con esa etiqueta.

  • Pero mientras trabaja cerca del sistema Ubuntu, es posible que el teléfono no esté al alcance del oído.


Todo lo que se necesita para ordenarle al sistema Ubuntu que lo diga en voz alta es agregar una sola línea después de enviar el correo electrónico, así:

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp [email protected]")

os.system("ssh me@prime ' ( /home/me/alarms/saylow24 ) ' &")

donde el archivo saylow24es el mismo que en la pregunta.

Tenga en cuenta que las comillas son apóstrofes normales.

El signo comercial se utiliza para que este comando de señal no bloquee el script de Python mientras se ejecuta en segundo plano en la nave nodriza de Ubuntu.

Aún mejor, ahora hago que haga esto:

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp [email protected]")
os.system("ssh me@prime ' ( espeak -s 100 E-Mail-Has-Been-Sent ) ' &")
os.system("ssh me@prime ' ( /home/me/alarms/saylow24 ) ' &")

Luego, para el registrador de voltaje externo es similar, excepto que activa el saylow12programa.

La línea adicional agregada allí es:

os.system("ssh me@prime ' ( /home/me/alarms/saylow12 ) ' &")

donde el archivo saylow12es muy similar:

#!/bin/bash
for i in {1..5}
do  
  espeak "Low Voltage on 12"
  sleep 10
done

Este bashscript se utiliza para que la alerta se repita cada 10 segundos porque exige una acción rápida o la CPU Rpi3 externa perderá energía, lo que provocará que los paneles solares dejen de seguir al sol.


Como se muestra arriba, los mensajes informativos arbitrarios se pueden pronunciar de esta manera:

os.system("ssh me@prime ' ( espeak High-Temp-Inside-Control-Box ) ' &")

Tenga en cuenta el uso de guiones para indicar espacios entre palabras.

Esto solo es necesario decirlo una vez por punto de datos ya que no puedo cambiar el clima.


Ahora todos los registradores de datos tienen una forma de dar retroalimentación verbal en la consola de Ubuntu.

Muy sencillo de implementar y funciona bien.


información relacionada