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

다음 단계는 원격 데이터 로깅 시스템(주로 Ubuntu 16.04 데스크톱 및 Rpi3B에서 생성되는 8개 화면)이 기본 Ubuntu 16.04 제어 시스템에 음성으로 경고를 알리도록 명령하는 방법을 찾는 것입니다.

그들은 모두 Python 프로그램을 실행하여 보관, 이미지 조작 및 웹 호스팅 서비스에 업로드를 위해 Prime Ubuntu 제어 시스템에 데이터를 로깅하고 전송합니다.

현재 데이터 플롯은 여기에서 볼 수 있는 플롯 형식을 지정하기 위해 montagein을 사용하여 Prime Ubuntu 16.04 시스템에서 생성됩니다 .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 데이터 로거는 6kWh 배터리 뱅크가 임계 전압 아래로 떨어지면 Prime 콘솔에 음성 경고를 말하도록 명령할 수 있습니다.


그런 다음 별도의 PV 패널과 배터리가 있는 태양광 패널 포지셔닝 시스템의 외부 데이터 로거에 대해 유사한 스크립트를 설정하기 시작했습니다. 흐린 날은 살인자입니다.


incron그 시점에서 나는 멈추고 Ubuntu 16.04 콘솔에서 데몬을 사용하는 데 필요한 복잡성을 전혀 추가하고 싶은지 스스로에게 물었습니다 . 나는 단순한 것을 선호합니다.

질문: Ubuntu를 크게 변경하지 않고도 이 작업을 수행할 수 있는 더 쉬운 방법이 있습니까?

답변1

incron잘 작동합니다. 파일을 scp감지 하고 스크립트를 트리거합니다. 그러나 거의 사용되지 않는 신호를 감지하기 위해 전용 데몬을 사용할 필요는 없습니다. 사용하는 것은 "우분투 방식"임에도 불구하고 파리를 때리기 위해 큰 망치를 꺼내는 것과 같습니다. 다른 사람들은 필요할 수도 있지만 나는 그렇지 않습니다.touchbashincron


스포일러: Python 코드 한 줄만 추가하면 됩니다.

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

이 답변의 나머지 부분에서는 사용 방법을 설명하며 시스템 엔지니어가 아닌 이상 TL;DR일 수 있습니다.

데이터 로거는 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

gnuplot의 명령을 사용하면 reread플롯이 업데이트되어 WiFi를 통해 Windows RDP에서 로깅 시스템에 액세스할 때 화면에 실시간으로 표시됩니다.
6개의 플롯이 하나의 대형 화면에 맞습니다. 그런 다음 다른 화면에 두 개가 더 있습니다.

여기에 이미지 설명을 입력하세요

Prime Ubuntu 16.04 시스템은 15분마다 모든 플롯을 수집하고 일부 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질문과 동일합니다.

따옴표는 일반적인 아포스트로피입니다.

앰퍼샌드가 사용되므로 이 신호 명령은 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스크립트는 빠른 조치가 필요하거나 외부 Rpi3 CPU의 전력이 손실되어 태양 전지판이 태양 추적을 중단하기 때문에 경고가 10초마다 반복되도록 사용됩니다.


위에 표시된 대로 임의의 정보 메시지를 다음과 같이 말할 수 있습니다.

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

단어 공백을 표시하기 위해 하이픈을 사용하는 것에 유의하세요.

날씨를 변경할 수 없으므로 데이터 포인트당 한 번만 말하면 됩니다.


이제 모든 데이터 로거는 Ubuntu 콘솔에서 구두 피드백을 제공할 수 있습니다.

구현이 매우 간단하고 잘 작동합니다.


관련 정보