So verwenden Sie SSH, um einem Ubuntu 16.04-System per Fernzugriff zu signalisieren, akustische Warnungen auszugeben, ohne Incron zu verwenden

So verwenden Sie SSH, um einem Ubuntu 16.04-System per Fernzugriff zu signalisieren, akustische Warnungen auszugeben, ohne Incron zu verwenden

Kurz: Die Frage ist, ob ich mein Ubuntu 16.04-System ändern sollte, um eine Aufgabe zu erfüllen, oder ob es einen einfacheren Weg gibt.


Dabei handelt es sich um ein komplexes Computersystem mit einem Mix aus Sprachen und Betriebssystemen.

Nach der Einrichtung des Ubuntu 16.04 Primärsystems für die Solaranlage geht es wie folgt weiter:

16.04 LTS Wie man das System mit eSpeak dazu bringt, die Uhrzeit zu jeder vollen Stunde anzusagen

AUSZUG: Verwendungespeak

sudo apt-get update
sudo apt-get install espeak

Der nächste Schritt besteht dann darin, eine Möglichkeit zu finden, wie die Remote-Datenprotokollierungssysteme (8 Bildschirme, die größtenteils von Ubuntu 16.04-Desktops und einem Rpi3B generiert werden) dem primären Ubuntu 16.04-Steuerungssystem den Befehl geben können, Warnungen verbal auszusprechen.

Auf allen laufen Python-Programme zum Protokollieren und Senden von Daten an das Prime Ubuntu-Steuerungssystem zur Archivierung, Bildbearbeitung und zum Hochladen zum Webhosting-Dienst.

Aktuelle Datendiagramme werden auf dem Prime Ubuntu 16.04-System erstellt und zum Formatieren der Diagramme verwendet, montagedie Imagemagickhier angezeigt werden: https://www.SDsolarBlog.com/montage


Um Sprachwarnungen zu erhalten, bestand der erste Versuch darin, sie einfach scpzum Aktualisieren einer Datei in einem Verzeichnis zu verwenden. Das Ubuntu-System erkannte die Änderung an einer Datei und reagierte mit der Ausführung eines Skripts, das espeakbeispielsweise meldete, dass eine Unterspannung vorliegt. Alle Systeme verwenden passwortlose RSA-Anmeldungen, sodass das Kopieren einfach ist.

Das bevorzugte Tool zum Überwachen von Datei- und Verzeichnisänderungen ist incron– das ähnlich ist, cronaußer dass es auf Basis von Dateisystemereignissen und nicht der Uhr ausgelöst wird.

Hier sind die Informationen zur Verwendung incron:

Überwachen Sie die Datei- und Verzeichnisaktivität mit Incron

AUSZUG:

Beginnen Sie mit der Installation incronauf inotify-toolsdem Ubuntu 16.04-Steuerungssystem.**

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

Verwenden Sie dann, incrontab -eum einen einfachen Eintrag wie folgt einzurichten:

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

/home/me/scripts/saylow24wobei die Inhalte von

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

…so kann der Ubuntu 16.04-Datenlogger für den Innenbereich der Prime-Konsole befehlen, einen Sprachalarm auszugeben, wenn die 6-kWh-Batteriebank unter eine Schwellenspannung fällt.


Dann begann ich, ein ähnliches Skript für den externen Datenlogger für das Solarpanel-Positionierungssystem einzurichten, das über ein eigenes separates PV-Panel und eine eigene Batterie verfügt. Bewölkte Tage sind für dieses System ein Killer.


An diesem Punkt hielt ich inne und fragte mich, ob ich die zusätzliche Komplexität, die die Verwendung des Daemons auf der Ubuntu 16.04-Konsole mit sich bringt, wirklich hinzufügen wollte incron. Ich bevorzuge es, wenn die Dinge einfach sind.

Frage: Gibt es eine einfachere Möglichkeit, dies zu tun, ohne größere Änderungen an Ubuntu vornehmen zu müssen?

Antwort1

incronfunktioniert einwandfrei – es erkennt das scpoder sogar eine toucheiner Datei und löst das bashSkript aus. Es ist jedoch nicht erforderlich, einen dedizierten Daemon zu verwenden, nur um ein selten verwendetes Signal zu erkennen. Die Verwendung incronist wie das Auspacken eines Vorschlaghammers, um eine Fliege zu erschlagen, auch wenn dies die „Ubuntu-Methode“ ist. Andere benötigen es möglicherweise, aber ich nicht.


Spoiler: Sie müssen lediglich eine einzige Zeile Python-Code hinzufügen:

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

Der Rest dieser Antwort erläutert die Verwendung und ist möglicherweise nicht weiter vertieft, sofern Sie nicht Systemingenieur sind.

Die Datenlogger führen Python-Programme aus, um Eingaben von USB-/Seriell-Nano-Einheiten zu erfassen, die Temperatur- und Spannungsmessungen durchführen.

Die meisten befinden sich auf Ubuntu-Desktops und der äußere ist ein Rpi3 mit geringem Stromverbrauch, der über ein separates kleineres Solarpanel und eine 12-V-Batterie betrieben wird, die mit dem Positionierungssystem des Solarpanels gemeinsam genutzt wird.

Sie alle verwenden Python-Programme, um die seriellen Daten von Nano-Mikrocontrollern zu lesen, die Temperaturen und Spannungen ablesen, jedem Datenpunkt Datum und Uhrzeit hinzufügen und diese dann in den täglichen Datendateien der Linux-Systeme speichern.


Die Logging-Programme sehen folgendermaßen aus (Auszug):

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 plotsSie erstellen dann Diagramme, die minutengenau auf Monitoren angezeigt werden . Die gnuplotProgramme sind sehr einfach:

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

Beachten Sie, dass der rereadBefehl in Gnuplot dazu führt, dass die Diagramme aktualisiert werden, sodass sie in Echtzeit auf dem Bildschirm angezeigt werden, wenn per Windows RDP über WLAN auf das Protokollierungssystem zugegriffen wird.
6 Diagramme passen auf einen einzigen großen Bildschirm. Dann noch zwei weitere auf einem anderen Bildschirm.

Bildbeschreibung hier eingeben

Alle 15 Minuten sammelt das Prime Ubuntu 16.04-System alle Plots, wendet etwas Imagemagic Fu an und sendet sie anhttps://www.SDsolarBlog.com/montage


Auf den Punkt gebracht: Bei zu niedriger Spannung sind die Protokollierungsprogramme bereits so eingerichtet, dass sie eine E-Mail-Warnung mit diesem (oder einem ähnlichen) Code senden:

os.system("echo 'SUBJECT:  ALERT - Low Voltage on 24' >>temp")
os.system("cat temp | ssmtp [email protected]")
  • Gmail ist so eingerichtet, dass jede Nachricht mit ALERT in der Betreffzeile mit einem Warnhinweis gekennzeichnet wird.

  • Mein Smartphone hat einen speziellen Benachrichtigungston für eingehende Gmail-Nachrichten mit diesem Label

  • Aber während Sie in der Nähe des Ubuntu-Systems arbeiten, ist das Telefon möglicherweise nicht in Hörweite.


Um dem Ubuntu-System zu befehlen, es hörbar auszusprechen, müssen Sie nach dem Senden der E-Mail lediglich eine einzige Zeile hinzufügen, etwa so:

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

wobei die Datei saylow24die gleiche ist wie in der Frage.

Beachten Sie, dass die Anführungszeichen normale Apostrophe sind.

Das Et-Zeichen wird verwendet, damit dieser Signalbefehl das Python-Skript nicht blockiert, während es im Hintergrund auf dem Ubuntu-Mutterschiff ausgeführt wird.

Noch besser, ich lasse es jetzt Folgendes machen:

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

Beim Außenspannungslogger verhält es sich ähnlich, nur dass dieser das saylow12Programm auslöst.

Die dort hinzugefügte zusätzliche Zeile lautet:

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

wobei die Datei saylow12sehr ähnlich ist:

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

Dieses bashSkript wird verwendet, damit der Alarm alle 10 Sekunden wiederholt wird, da schnelles Handeln erforderlich ist. Andernfalls verliert die externe Rpi3-CPU an Leistung, was dazu führt, dass die Solarmodule aufhören, der Sonne zu folgen.


Wie oben gezeigt, können beliebige Informationsmeldungen folgendermaßen ausgesprochen werden:

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

Beachten Sie die Verwendung von Bindestrichen zum Kennzeichnen von Wortzwischenräumen.

Dies muss nur einmal pro Datenpunkt gesprochen werden, da ich das Wetter nicht ändern kann.


Jetzt verfügen alle Datenlogger über eine Möglichkeit, mündliches Feedback über die Ubuntu-Konsole zu geben.

Sehr einfach zu implementieren und es funktioniert gut.


verwandte Informationen