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

-2

Brief: A questão é se devo modificar meu sistema Ubuntu 16.04 para realizar uma tarefa ou se há 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 do Ubuntu 16.04 para a usina solar, por:

16.04 LTS Como fazer o sistema anunciar o horário no topo da hora com o eSpeak

EXCERTO: use espeak

sudo apt-get update
sudo apt-get install espeak
O próximo passo é encontrar um caminho para os sistemas de registro de dados remotos (8 telas, geradas principalmente pelo Ubuntu 16.04 desktops e um Rpi3B) para comandar o sistema de controle primário do Ubuntu 16.04 para falar verbalmente os alertas.

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

Current data plots are created on the Prime Ubuntu 16.04 system using montage in Imagemagick to format the plots which can be seen here: https://www.SDsolarBlog.com/montage

Para obter alertas de voz, a primeira tentativa foi simplesmente usar scp para 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 que usasse espeak para Anuncie, por exemplo, que existe uma condição de baixa voltagem. Todos os sistemas usam logins RSA sem senha, portanto, fazer a cópia é simples.

A ferramenta go-to-tool para monitorar alterações de arquivos e diretórios é incron - que é semelhante a cron , exceto que é acionada com base em eventos do sistema de arquivos em vez do relógio.

Aqui está a informação sobre o uso de incron :

Monitore a atividade de arquivos e diretórios com o incron

EXCERTO:

Start with installing incron and inotify-tools on the Ubuntu 16.04 control system.**

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

use incrontab -e para configurar uma entrada simples como esta:

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

onde o conteúdo de /home/me/scripts/saylow24 é

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

... para que o data logger 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.

Depois comecei a criar um script semelhante para o data logger externo para o sistema de posicionamento do painel solar, que possui seu próprio painel fotovoltaico e bateria. Os dias nublados são um assassino para isso.

Nesse ponto, parei e perguntei a mim mesmo se realmente queria adicionar a complexidade extra de usar o daemon incron no console do Ubuntu 16.04. Eu prefiro que as coisas sejam simples.

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

    
por SDsolar 20.11.2017 / 17:57

1 resposta

0

incron funciona bem - ele detecta o scp ou até mesmo um touch de um arquivo e aciona o script bash . No entanto, não há necessidade de usar um daemon dedicado apenas para detectar um sinal raramente usado. Usar incron é como tirar uma marreta para golpear uma mosca, mesmo que seja o "modo Ubuntu". Outros podem precisar, mas eu não preciso.

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.

The data-loggers run Python programs to pick up input from USB/serial Nano units which do temperature and voltage readings.

Most are on Ubuntu Desktops and the one outside is a low-power Rpi3 which runs from a separate smaller solar panel and a 12V battery which is shared with the solar panel positioning system.

Todos eles usam programas em Python para ler os dados em série de microcontroladores Nano que lêem temperaturas e tensões, adicionam a data e a hora a cada ponto de dados e os salvam nos arquivos de dados diários nos sistemas Linux.

Os programas de registro se parecem com (excerto):

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 como live plots em monitores atualizados minuto a minuto. Os programas gnuplot 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

Note that the reread command in gnuplot causes the plot to update so they are displayed in real time on the screen when the logging system is accessed by Windows RDP via WiFi.
6 plots fit on a single large screen. Then two others on a different screen.

Every15minutesthePrimeUbuntu16.04systemgathersalltheplots,appliessomeImagemagicFuandsendsthemuptohttps://www.SDsolarBlog.com/montage

Direto ao ponto: Quando a voltagem está muito baixa, os programas de registro já estão configurados para enviar um alerta de email 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 as mensagens do Gmail recebidas com esse rótulo

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

Tudo o que é necessário para comandar o sistema Ubuntu é o fato de adicionar uma única linha após o envio do email, 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 ) ' &")

em que o arquivo saylow24 é o mesmo da pergunta.

Note that the quote marks are normal apostrophes.

The ampersand is used so this signal command doesn't block the Python script while it executes in the background on the Ubuntu mothership.

Melhor ainda, agora tenho que fazer isso:

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 ele aciona o programa saylow12 .

A linha adicional adicionada lá é:

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

em que o arquivo saylow12 é muito parecido:

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

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

Como mostrado acima, mensagens informativas arbitrárias podem ser pronunciadas desta maneira:

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

Note the use of hyphens to denote word spaces.

This only needs to be spoken once per data point since I can't change the weather.

Agora, todos os registradores de dados têm uma maneira de dar feedback verbal no console do Ubuntu.

Muito simples de implementar e funciona bem.

por SDsolar 20.11.2017 / 17:57