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

in cn •  5 years ago 

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


(图源 :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!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
  ·  5 years ago 

!thumbup
恭喜你!您的这篇文章入选 @justyy 今日 (2019-10-22) 榜单 【优秀的文章】, 回复本条评论24小时内领赏,点赞本评论将支持 @dailychina 并增加将来您的奖赏。
@justyy 是CN区的见证人,请支持他,给他投票,或者设置justyy为见证人代理。感谢!@justyy的主要贡献:https://steemyy.com

Congratulations! This post has been selected by @justyy as today's (2019-10-22) 【Good Posts】, Steem On! Reply to this message in 24 hours to get rewards. Upvote this comment to support the @dailychina and increase your future rewards! ^_^

SteemIt 工具、API接口、机器人和教程
SteemIt Tools, Bots, APIs and Tutorial



If you believe what I am doing, please consider a spare vote voting me here, thank you very much indeed.

@justyy - the author of https://SteemYY.com and I have been a Steem Witness for more than a year now.

Thank you so much for participating in the Partiko Delegation Plan Round 1! We really appreciate your support! As part of the delegation benefits, we just gave you a 3.22% upvote! Together, let’s change the world!