AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 978479
Accepted
SDsolar
SDsolar
Asked: 2017-11-21 08:57:48 +0800 CST2017-11-21 08:57:48 +0800 CST 2017-11-21 08:57:48 +0800 CST

如何使用 ssh 远程向 Ubuntu 16.04 系统发出信号以在不使用 incron 的情况下发出声音警报

  • 772

简介:问题是我是否应该修改我的 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 控制台发出语音警报。


然后我开始为太阳能电池板定位系统的外部数据记录器设置一个类似的脚本,该系统有自己的独立光伏电池板和电池。阴天是它的杀手。


那时我停下来问自己是否真的想增加在incronUbuntu 16.04 控制台上使用守护程序的额外复杂性。我更喜欢简单的事情。

问题:有没有一种更简单的方法可以做到这一点,而不必对 Ubuntu 进行重大更改?

scripts
  • 1 1 个回答
  • 686 Views

1 个回答

  • Voted
  1. Best Answer
    SDsolar
    2017-11-21T08:57:48+08:002017-11-21T08:57:48+08:00

    incron工作正常 - 它检测文件scp或什touch至文件并触发bash脚本。然而,没有必要使用专门的守护进程来检测很少使用的信号。使用incron就像拿出大锤来拍苍蝇,尽管它是“Ubuntu 方式”。其他人可能需要它,但我不需要。


    剧透:只需要添加一行 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
    

    请注意,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 设置为将警报标签应用于主题行中带有 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脚本,警报每 10 秒重复一次,因为它需要快速行动,否则外部 Rpi3 CPU 将失去电力,导致太阳能电池板停止跟踪太阳。


    如上所示,可以通过这种方式说出任意信息消息:

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

    注意使用连字符来表示单词空间。

    每个数据点只需要说一次,因为我无法改变天气。


    现在所有的数据记录器都可以在 Ubuntu 控制台上提供口头反馈。

    实现起来非常简单,而且效果很好。


    • 0

相关问题

  • 如何在 Nautilus 中管理保存的完整网页及其目录(例如 n.html 和 n_files)

  • 如何每 5 秒运行一次脚本?

  • 如何将必须从其自己的目录中运行的程序添加到面板或主菜单?

  • 如何编写 shell 脚本来安装应用程序列表?

  • Mac OS X Automator 的替代品?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve