如何使用 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 系統上建立的,使用montageinImagemagick來格式化圖,可以在此處看到: https://www.SDsolarBlog.com/montage


為了獲得語音警報,第一個嘗試是讓它們簡單地使用scp更新目錄中的文件,然後讓 Ubuntu 系統檢測文件的更改並通過運行一個腳本來響應,該腳本用於espeak宣布,例如,低電壓條件存在。所有系統都使用RSA無密碼登錄,因此複製很簡單。

用於監視檔案和目錄更改的首選工具是incron- ,它與 類似,cron只是它基於檔案系統事件而不是時鐘觸發。

這是有關使用的信息incron

使用 incron 監視檔案和目錄活動

摘抄:

從在 Ubuntu 16.04 控制系統上incron安裝開始。inotify-tools

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"

……因此,當 6 kWh 電池組低於閾值電壓時,室內 ​​Ubuntu 16.04 數據記錄器可以命令 Prime 控制台發出語音警報。


然後我開始為太陽能電池板定位系統的外部數據記錄器設定一個類似的腳本,該系統有自己獨立的光伏電池板和電池。陰天是它的殺手。


那時我停下來問自己是否真的想增加incron在 Ubuntu 16.04 控制台上使用守護程式的額外複雜性。我比較喜歡事情簡單。

問題:有沒有一種更簡單的方法可以做到這一點,而無需對 Ubuntu 進行重大更改?

答案1

incron工作正常 - 它檢測文件的scp甚至 a並觸發腳本。然而,沒有必要僅使用專用守護程序來檢測很少使用的訊號。使用就像拿出大錘去拍蒼蠅,儘管這是“Ubuntu方式”。其他人可能需要它,但我不需要。touchbashincron


劇透:只需加入一行 Python 程式碼即可:

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

這個答案的其餘部分解釋了它是如何使用的,並且可能很長,除非您是系統工程師。

數據記錄器運行 Python 程序,從 USB/串行 Nano 單元獲取輸入,這些單元可讀取溫度和電壓。

大多數都在 Ubuntu 桌面上,外面的一個是低功耗 Rpi3,它由一個單獨的較小太陽能電池板和一個與太陽能電池板定位系統共享的 12V 電池供電。

它們都使用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

請注意,rereadgnuplot 中的命令會導致繪圖更新,因此當 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 設定為將警報標籤套用至主旨行中帶有警報的任何郵件

  • 我的智慧型手機對於帶有該標籤的傳入 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與問題中的文件相同。

請注意,引號是正常的撇號。

使用 & 符號是為了讓該訊號指令在 Ubuntu 母機上背景執行時不會阻止 Python 腳本。

更好的是,我現在讓它這樣做:

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 CPU 將斷電,導致太陽能電池板停止追蹤太陽。


如上所示,任意訊息訊息都可以這樣表達:

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

請注意使用連字符來表示單字空間。

由於我無法改變天氣,因此每個數據點只需要說一次。


現在,所有數據記錄器都可以在 Ubuntu 控制台上提供口頭回饋。

實施起來非常簡單,而且效果很好。


相關內容