incron を使用せずに Ubuntu 16.04 システムにリモートで信号を送り、音声アラートを発するように ssh を使用する方法

incron を使用せずに Ubuntu 16.04 システムにリモートで信号を送り、音声アラートを発するように ssh を使用する方法

概要: 質問は、タスクを実行するために 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 制御システムにデータを送信し、アーカイブ、画像操作、Web ホスティング サービスへのアップロードを行っています。

現在のデータ プロットは、Prime Ubuntu 16.04 システムで、プロットをフォーマットするために montagein を使用して作成されており、次のように表示されます。Imagemagickhttps://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"

...つまり、屋内の Ubuntu 16.04 データ ロガーは、6 kWh のバッテリー バンクがしきい値電圧を下回ったときに、Prime コンソールに音声アラートを発するように指示できます。


次に、独自の PV パネルとバッテリーを備えたソーラー パネル位置調整システムの屋外データ ロガー用に同様のスクリプトを設定し始めました。曇りの日は、このシステムにとって致命的です。


その時点で私は立ち止まり、Ubuntu 16.04 コンソールでデーモンを使用するという余分な複雑さを本当に追加したいのか自問しましたincron。私は物事はシンプルな方が好きです。

質問: Ubuntu に大きな変更を加えずにこれを行うより簡単な方法はありますか?

答え1

incron問題なく動作します。ファイルのscpまたは を検出し、スクリプトを起動します。しかし、めったに使用されない信号を検出するためだけに専用のデーモンを使用する必要はありません。 を使用することは、たとえそれが「Ubuntu 方式」であっても、ハエを叩くために大ハンマーを取り出すようなものです。他の人には必要な場合もありますが、私には必要ありません。touchbashincron


ネタバレ: 必要なのは Python コードを 1 行追加することだけです:

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

この回答の残りの部分では、その使用方法を説明しますが、システム エンジニアでない限り、TL;DR になる可能性があります。

データロガーは Python プログラムを実行して、温度と電圧の読み取りを行う USB/シリアル Nano ユニットからの入力を取得します。

ほとんどは Ubuntu デスクトップ上にあり、外側にあるものは、別の小型ソーラーパネルと、ソーラーパネル位置決めシステムと共有される 12V バッテリーで動作する低電力の Rpi3 です。

これらはすべて、温度と電圧を読み取る Nano マイクロコントローラからシリアル データを読み取り、各データ ポイントに日付と時刻を追加し、Linux システムの毎日のデータ ファイルに保存するために Python プログラムを使用しています。


ログ記録プログラムは次のようになります (抜粋):

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 のコマンドによりプロットが更新され、WiFi 経由で Wi​​ndows RDP からログ システムにアクセスしたときにプロットが画面にリアルタイムで表示されることに注意してください。6
つのプロットが 1 つの大きな画面に収まります。他の 2 つは別の画面に表示されます。

ここに画像の説明を入力してください

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 システムに音声で読み上げるよう指示するには、次のように、電子メールの送信後に 1 行追加するだけです。

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

単語間のスペースを示すためにハイフンが使用されていることに注意してください。

天気は変えられないので、データポイントごとにこれを1回だけ話す必要があります。


現在、すべてのデータロガーには、Ubuntu コンソールで音声によるフィードバックを提供する手段があります。

実装が非常に簡単で、うまく機能します。


関連情報