Как использовать ssh для удаленного оповещения системы Ubuntu 16.04 о звуковых сигналах без использования incron

Вкратце: вопрос в том, должен ли я модифицировать свою систему Ubuntu 16.04, чтобы выполнить задачу, или есть более простой способ.


Это сложная система компьютеров, включающая в себя сочетание языков и операционных систем.

После настройки основной системы Ubuntu 16.04 для солнечной системы, чтобы говорить, согласно:

16.04 LTS Как заставить систему объявить время в верхней части часа с помощью eSpeak

ВЫДЕРЖКА: Использование espeak

sudo apt-get update
sudo apt-get install espeak

затем следует найти способ для удаленных систем регистрации данных (8 экранов, генерируемых в основном рабочими столами Ubuntu 16.04 и Rpi3B), чтобы дать команду основной системе управления Ubuntu 16.04 устно высказывать оповещения.

Все они используют программы Python для ведения журналов и отправки данных в систему управления Prime Ubuntu для архивирования, обработки изображений и загрузки в службу веб-хостинга.

Текущие графики данных создаются в системе Prime Ubuntu 16.04 с использованием montage в Imagemagick отформатировать графики, которые можно увидеть здесь: https://www.sdsolarblog.com/montage


Чтобы получить голосовые оповещения, первой попыткой было просто использовать их scp обновить файл в каталоге и заставить систему Ubuntu обнаружить изменение в файле и ответить, запустив скрипт, который использует espeak объявить, например, что существует состояние низкого напряжения. Все системы используют логин без пароля RSA, поэтому копирование просто.

Инструмент для отслеживания изменений файлов и каталогов: incron - который похож на cron за исключением того, что он запускается на основе событий файловой системы вместо часов.

Вот информация об использовании incron:

Мониторинг активности файлов и каталогов с помощью incron

ВЫПИСКА:

Начните с установки incron а также inotify-tools в системе управления Ubuntu 16.04.**

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

затем используйте incrontab -e установить простую запись, например, так:

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

где содержимое /home/me/scripts/saylow24 являются

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

... так что внутренний регистратор данных Ubuntu 16.04 может дать команду консоли Prime выдать голосовое оповещение, когда батарея 6 кВтч падает ниже порогового напряжения.


Затем я начал устанавливать аналогичный сценарий для внешнего регистратора данных для системы позиционирования солнечной панели, которая имеет свою отдельную фотоэлектрическую панель и батарею. Облачные дни убивают за это.


В этот момент я остановился и спросил себя, действительно ли я хочу добавить дополнительную сложность использования incron демон на консоли Ubuntu 16.04 вообще. Я предпочитаю, чтобы все было просто.

Вопрос: Есть ли более простой способ сделать это без внесения серьезных изменений в Ubuntu?

1 ответ

Решение

incron работает нормально - он обнаруживает scp или даже touch файла и вызывает bash скрипт. Тем не менее, нет необходимости использовать выделенный демон только для обнаружения редко используемого сигнала. С помощью incron это все равно что вынимать кувалду, чтобы ударить муху, хотя это и есть "путь Ubuntu". Другим это может понадобиться, но мне это не нужно.


Спойлер: Все, что нужно, это добавить одну строку кода Python:

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

Остальная часть этого ответа объясняет, как он используется, и может быть TL;DR, если вы не системный инженер.

Регистраторы данных запускают программы Python для получения данных от USB/ последовательных устройств Nano, которые измеряют температуру и напряжение.

Большинство из них находятся на настольных компьютерах Ubuntu, а один снаружи представляет собой Rpi3 с низким энергопотреблением, который работает от отдельной меньшей солнечной панели и 12-вольтовой батареи, которая используется совместно с системой позиционирования солнечной панели.

Все они используют программы Python для считывания последовательных данных с микроконтроллеров Nano, которые считывают температуру и напряжение, добавляют дату и время к каждой точке данных, а затем сохраняют их в ежедневных файлах данных в системах Linux.


Программы регистрации выглядят так (отрывок):

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 myemail4@gmail.com')
    etc to add date/time stamp then save in CSV file

Затем они создают графики, которые отображаются как live plots на мониторах с точностью до минуты. gnuplot программы очень простые:

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

Обратите внимание, что reread Команда в gnuplot приводит к обновлению графика, поэтому они отображаются в режиме реального времени на экране, когда к системе регистрации подключается Windows RDP через WiFi.
6 графиков помещаются на одном большом экране. Затем два других на другом экране.

Каждые 15 минут система Prime Ubuntu 16.04 собирает все графики, применяет некоторое количество Imagemagic Fu и отправляет их на https://www.sdsolarblog.com/montage.


Кстати, когда напряжение слишком низкое, программы регистрации уже настроены на отправку оповещения по электронной почте с использованием этого кода (или аналогичного):

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp myaddress@gmail.com")
  • Gmail настроен на применение метки оповещения к любому сообщению с ALERT в строке темы.

  • В моем смартфоне есть специальный тональный сигнал для входящих сообщений Gmail с этим ярлыком

  • Но во время работы рядом с системой Ubuntu телефон может не оказаться в пределах слышимости.


Все, что нужно для того, чтобы система Ubuntu произнесла это вслух, - это добавление одной строки после отправки письма, например, так:

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp myaddress@gmail.com")

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

где файл saylow24 так же, как в вопросе.

Обратите внимание, что кавычки - это нормальные апострофы.

Используется амперсанд, поэтому эта сигнальная команда не блокирует скрипт Python, пока он выполняется в фоновом режиме на материнском корабле Ubuntu.

Даже лучше, теперь я должен сделать это:

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

Тогда для внешнего регистратора напряжения он аналогичен, за исключением того, что он запускает saylow12 программа.

Добавленная дополнительная строка:

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

где файл saylow12 очень похоже:

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

это bash Используется сценарий, чтобы предупреждение повторялось каждые 10 секунд, потому что оно требует быстрых действий, иначе внешний процессор Rpi3 потеряет мощность, из-за чего солнечные панели перестают отслеживать солнце.


Как показано выше, произвольные информационные сообщения можно произносить следующим образом:

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

Обратите внимание на использование дефисов для обозначения пространств слов.

Об этом нужно говорить только один раз для каждой точки данных, поскольку я не могу изменить погоду.


Теперь у всех регистраторов данных есть возможность дать устную обратную связь на консоли Ubuntu.

Очень прост в реализации и работает хорошо.


Другие вопросы по тегам