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

Как использовать 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 кВт·ч падает ниже порогового значения.


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


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

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

решение1

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


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

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

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

Регистраторы данных запускают программы 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 [email protected]')
    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 [email protected]")
  • gmail настроен на применение метки оповещения ко всем сообщениям с ALERT в строке темы

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

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


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

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

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

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

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

А еще лучше, теперь я заставляю его делать вот это:

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

Для внешнего регистратора напряжения все аналогично, за исключением того, что он запускает программу 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.

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


Связанный контент