简介:问题是我是否应该修改我的 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 系统上创建的,使用
montage
inImagemagick
格式化可以在此处看到的图: https ://www.SDsolarBlog.com/montage
为了获得语音警报,第一个尝试是让它们简单地用于scp
更新目录中的文件,让 Ubuntu 系统检测到文件的更改并通过运行一个脚本来响应,该脚本用于espeak
宣布,例如,一个低-电压条件存在。所有系统都使用 RSA 无密码登录,所以复制很简单。
用于监视文件和目录更改的首选工具是incron
- 类似于,cron
除了它基于文件系统事件而不是时钟触发。
以下是使用信息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 进行重大更改?
incron
工作正常 - 它检测文件scp
或什touch
至文件并触发bash
脚本。然而,没有必要使用专门的守护进程来检测很少使用的信号。使用incron
就像拿出大锤来拍苍蝇,尽管它是“Ubuntu 方式”。其他人可能需要它,但我不需要。剧透:只需要添加一行 Python 代码:
这个答案的其余部分解释了它是如何使用的,除非你是系统工程师,否则可能是 TL;DR。
他们都使用 Python 程序从读取温度和电压的 Nano 微控制器读取串行数据,将日期和时间添加到每个数据点,然后将其保存到 Linux 系统中的日常数据文件中。
日志记录程序看起来像这样(摘录):
live plots
然后他们生成在监视器上显示的最新图表。这些gnuplot
程序非常简单:要点: 当电压太低时,记录程序已经设置为使用此代码(或类似代码)发送电子邮件警报:
gmail 设置为将警报标签应用于主题行中带有 ALERT 的任何消息
我的智能手机对带有该标签的 gmail 消息有特殊的通知音
但是在 Ubuntu 系统附近工作时,电话可能不在听筒之内。
命令 Ubuntu 系统发出声音所需要的只是在发送电子邮件后添加一行,如下所示:
其中文件
saylow24
与问题中的相同。更好的是,我现在可以这样做:
然后对于外部电压记录器,它是类似的,除了它触发
saylow12
程序。添加的附加行是:
文件
saylow12
非常相似的地方:使用此
bash
脚本,警报每 10 秒重复一次,因为它需要快速行动,否则外部 Rpi3 CPU 将失去电力,导致太阳能电池板停止跟踪太阳。如上所示,可以通过这种方式说出任意信息消息:
现在所有的数据记录器都可以在 Ubuntu 控制台上提供口头反馈。
实现起来非常简单,而且效果很好。