Como usar o ssh para sinalizar remotamente um sistema Ubuntu 16.04 para emitir alertas sonoros sem usar o incron

Como usar o ssh para sinalizar remotamente um sistema Ubuntu 16.04 para emitir alertas sonoros sem usar o incron

Breve: A questão é se devo modificar meu sistema Ubuntu 16.04 para realizar uma tarefa ou se existe uma maneira mais fácil.


Este é um sistema complexo de computadores, envolvendo uma mistura de linguagens e sistemas operacionais.

Após configurar o sistema primário Ubuntu 16.04 para a usina solar falar, conforme:

16.04 LTS Como fazer o sistema anunciar a hora no início da hora com eSpeak

EXCERTO: Useespeak

sudo apt-get update
sudo apt-get install espeak

o próximo passo é encontrar uma maneira para os sistemas de registro de dados remotos (8 telas, geradas principalmente pelos desktops Ubuntu 16.04 e um Rpi3B) comandarem o sistema de controle primário do Ubuntu 16.04 para emitir alertas verbalmente.

Todos eles estão executando programas Python para fazer o registro e enviar dados ao sistema de controle Prime Ubuntu para arquivamento, manipulação de imagens e upload para o serviço de hospedagem web.

Os gráficos de dados atuais são criados no sistema Prime Ubuntu 16.04 usando montagein Imagemagickpara formatar os gráficos que podem ser vistos aqui: https://www.SDsolarBlog.com/montage


Para obter alertas de voz, a primeira tentativa foi fazer com que eles simplesmente usassem scppara atualizar um arquivo em um diretório e fazer com que o sistema Ubuntu detectasse a alteração em um arquivo e respondesse executando um script usado espeakpara anunciar, por exemplo, que um baixo condição de tensão existe. Todos os sistemas usam logins RSA sem senha, portanto, fazer a cópia é simples.

A ferramenta ideal para monitorar alterações de arquivos e diretórios é incron- que é semelhante, cronexceto pelo fato de ser acionada com base em eventos do sistema de arquivos em vez do relógio.

Aqui estão as informações sobre como usar incron:

Monitore a atividade de arquivos e diretórios com incron

EXCERTO:

Comece instalando incrone inotify-toolsno sistema de controle Ubuntu 16.04.**

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

em seguida, use incrontab -epara configurar uma entrada simples como esta:

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

onde o conteúdo de /home/me/scripts/saylow24está

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

... para que o registrador de dados interno do Ubuntu 16.04 possa comandar o console Prime para emitir um alerta de voz quando o banco de baterias de 6 kWh cair abaixo de uma tensão limite.


Então comecei a configurar um script semelhante para o registrador de dados externo do sistema de posicionamento do painel solar, que possui seu próprio painel fotovoltaico e bateria separados. Os dias nublados são um assassino para isso.


Nesse ponto, parei e me perguntei se realmente queria adicionar a complexidade extra do uso do incrondaemon no console do Ubuntu 16.04. Prefiro que as coisas sejam simples.

Pergunta: Existe uma maneira mais fácil de fazer isso sem precisar fazer grandes alterações no Ubuntu?

Responder1

incronfunciona bem - detecta scpou até mesmo um toucharquivo e aciona o bashscript. No entanto, não há necessidade de usar um daemon dedicado apenas para detectar um sinal raramente usado. Usar incroné como pegar uma marreta para golpear uma mosca, mesmo que seja o "jeito Ubuntu". Outros podem precisar, mas eu não.


Spoiler: basta adicionar uma única linha de código Python:

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

O restante desta resposta explica como ela é usada e pode ser TL; DR, a menos que você seja um engenheiro de sistemas.

Os registradores de dados executam programas Python para captar entradas de unidades Nano USB/serial que fazem leituras de temperatura e tensão.

A maioria está em desktops Ubuntu e o que está fora é um Rpi3 de baixo consumo que funciona a partir de um painel solar menor separado e uma bateria de 12 V que é compartilhada com o sistema de posicionamento do painel solar.

Todos eles usam programas Python para ler os dados seriais dos microcontroladores Nano que leem temperaturas e tensões, adicionam a data e hora a cada ponto de dados e depois os salvam nos arquivos de dados diários nos sistemas Linux.


Os programas de registro são assim (trecho):

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

Eles então produzem gráficos que são exibidos live plotsem monitores atualizados a cada minuto. Os gnuplotprogramas são muito 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

Observe que o rereadcomando no gnuplot faz com que o gráfico seja atualizado para que sejam exibidos em tempo real na tela quando o sistema de registro for acessado pelo Windows RDP via WiFi.
6 gráficos cabem em uma única tela grande. Depois, outros dois em uma tela diferente.

insira a descrição da imagem aqui

A cada 15 minutos o sistema Prime Ubuntu 16.04 reúne todas as plotagens, aplica alguns Imagemagic Fu e envia parahttps://www.SDsolarBlog.com/montage


Ao ponto: Quando a tensão está muito baixa, os programas de registro já estão configurados para enviar um alerta por e-mail usando este código (ou similar):

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp [email protected]")
  • O Gmail está configurado para aplicar um rótulo de alerta a qualquer mensagem com ALERT na linha de assunto

  • Meu smartphone tem um tom de notificação especial para mensagens recebidas do Gmail com esse marcador

  • Mas ao trabalhar perto do sistema Ubuntu, o telefone pode não estar ao alcance da voz.


Tudo o que é necessário para comandar o sistema Ubuntu e falar de forma audível é adicionar uma única linha após o envio do e-mail, assim:

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 ) ' &")

onde o arquivo saylow24é o mesmo da pergunta.

Observe que as aspas são apóstrofos normais.

O e comercial é usado para que este comando de sinal não bloqueie o script Python enquanto ele é executado em segundo plano na nave-mãe do Ubuntu.

Melhor ainda, agora faço o seguinte:

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 ) ' &")

Então, para o registrador de tensão externo, é semelhante, exceto que aciona o saylow12programa.

A linha adicional adicionada é:

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

onde o arquivo saylow12é muito semelhante:

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

Este bashscript é usado para que o alerta se repita a cada 10 segundos porque exige uma ação rápida ou a CPU Rpi3 externa perderá energia, o que fará com que os painéis solares parem de rastrear o sol.


Conforme mostrado acima, mensagens informativas arbitrárias podem ser faladas desta forma:

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

Observe o uso de hífens para denotar espaços de palavras.

Isso só precisa ser falado uma vez por ponto de dados, pois não posso alterar o clima.


Agora todos os registradores de dados têm uma forma de fornecer feedback verbal no console do Ubuntu.

Muito simples de implementar e funciona bem.


informação relacionada