构思一个掉电自动关闭程序的功能

构思一个掉电自动关闭程序的功能

某程序异常关闭后会导致数据异常,重新更新数据需要大量的时间,所以保证不间断的电源供应非常必要。


(图源 :pexels.com)

在机房环境中一般会有冗余的电源供应,一般来讲几乎不用担心掉电问题,可是如果放到家里的电脑上允许,使用市电网络,那么电源问题就是要考虑的问题了。

一般来讲,最简单的方式是使用UPS,这样可以应对大部分突发断电故障,留给我们足够的时间来正常关闭电脑。

但是如果恰巧我们停电时不在家并且停电持续的时间比较长,那么UPS电源耗尽存储电量的后果也是电脑关机。

那么有没有办法在停电时自动关闭程序呢?亦即让程序正常退出,这样来电时我们就可以重新启动程序了。

硬件构思

我想到的一个可行貌似可行的办法就是使用一个Arduino 去检测市电,电脑通过串口连接Arduino并定期(比如2分钟一次)检测市电掉电事件,如果发生市电停电,则给程序发送关闭信号(SIGINT)。

这样做的前提之一是市电断掉后,我们的电脑还可以工作一小段时间(比如十分钟或者半个小时),这样一则让Arduino可以工作,二则市电断掉后,要有足够的时间来处理SIGINT信号等,所以UPS还是必须品。

至于Arduino检测市电断电事件就应该很简单了,在市电上插一个USB充电器(就用普通的USB2.0 Type A接口的充电器就好),这样的充电器输出电压是5V。


(图源: https://en.wikipedia.org/wiki/USB_hardware#Connectors)

Arduino与电脑USB连接,将Arduino与USB充电器共地,然后任意模拟口连接USB的正5V就行,当然为了Arduino的安全可以考虑在USB+5V和模拟口之间串联个220欧姆的电阻,这样一个简易的电压测量装置的硬件就搞定了。

Arduino 程序

至于代码就更简单喽,用官方的AnalogReadSerial示例就可以啦。

当然了,我们可以再加一些调整,比如修改读取间隔,或者加上断电报警等功能。

电脑程序

对于电脑端而言,我们需要一个读写串口并根据情况给其它程序发送信号的程序。

理论上无论用C还是用Python都可以实现,Python读写串口可以用pySerial,Github地址和参考文档如下:

https://github.com/pyserial/pyserial
https://pythonhosted.org/pyserial/index.html

看起来应该很简单。

发送信号,理论上可以用os.kill功能,据说Windows下可能没法用,但是我计划用Linux,应该问题不大。

嗯,暂时就想到这吧,至于什么时间弄出来,就不好说啦,毕竟一直以来我都是空想家,不是实干家。😀

相关链接


Vote For Me As Witness
https://steemit.com/~witnesses type in oflyhigh and click VOTE

Vote @oflyhigh via Steemconnect
Thank you!

This page is synchronized from the post: ‘构思一个掉电自动关闭程序的功能’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×