CSK.Blog--个人原创Weblog

Linux下监控的Santak MT-500pro系列UPS信息

程序源代码请点击文章标题进入完整阅读模式获取

这段时间一直在"筹建"以前提到过的智能化家庭系统(IHES)。前不久购买并配置了500G的RAID 1存储阵列服务器,为了保证数据安全,同时又购买了Santak MT-500pro智能型UPS。

这里说智能型可能不是很专业,其实就是说该UPS提供了相关的接口允许从服务器上读取出UPS的相关状态信息。比如:

外部交流供电电压、负载端电压、负载功率、蓄电池电压等信息

不过,其实最需要关心的就是希望能够在发生断电情况下ups能即时告知。以便服务器机组能在UPS逆变供电实效前自动关机。毕竟不可能让我24小时监控家中服务器状况。

以上可以算是背景介绍了,现在面临的问题是,这个品牌的UPS虽然在官方提供了相关的监控和管理软件Winpower。不过使用后,存在许多不足:

  1. 程序采用java (1.14) 开发,甚至连与ups通讯的部分也完全采用java
  2. 该程序实现上十分低效,监控目模块间通讯需要采用java rmi
  3. 没有命令行接口,可制订性差

当然这些问题不是所有人都会抱怨的,不过目前考虑到家里的中央服务器还采用P3 CPU, 512mb内存,以及没有安装X Server环境。纯命令行下WinPower完全无法工作。同时采用java的实现虽然从厂家角度降低了porting成本,不过绝对是一个低效的实现。我测试过仅仅开启了Winpower中的监控模块,java进程就消耗了近20Mb的资源。同时还不考虑低效的实现(我逆向工程过其class文件,实现很糟糕)。仅仅为了监控ups信息而做出如此的资源消耗实在不值得。

另一方面,如果选用APC品牌的UPS,linux下则有现成的Apcupsd。当然东西都买下了,后悔也没用。于是,我实现一个满足我需求的ups监控程序。这里提供一个原形程序的代码以及整个整个制作过程的叙述。支持的型号是Santak MT-500pro。不过我相信通过源代码以及按照我的制作思路,其他型号也很容易做出对应的程序。原形程序是纯命令行的,很容易用bash shell写一个断电后一定时间内控制服务器自动关机的daemon脚本。

下面是制作介绍部分,没兴趣看得话代码在文章末尾给出了,请自行编译使用。Windows版本的也可以很容易修改而成。

MT-500pro的相关信息:

毕竟不是给人家做广告,这里什么技术参数就不给了。

该UPS采用串口(COM)提供自身的状态信息。串口的通讯采用2400bps速率,目前已知的状态信息有如下2种形式:

  • "#220.0 004 12.00 50.0\r"
  • "(231.4 231.0 231.4 011 50.1 13.9 25.0 00001001\r"

这里先暂时不介绍相关的通讯协议。在上面的状态信息中,第一条应当为该UPS的标准参数(即正常情况下理论值)。这几个数据每次都是固定不变的。其含义依次为:

<输出(或输出电压)> <未知> <蓄电池电压> <输出(或输入)频率>

而第二项则为当前UPS的实际数据,这也是我需要关心的内容。其可能含义依次为:

<外部电压> <内部电压(具体未知)> <输出电压> <负载率%> <电源工作频率(Hz)> <蓄电池电压> <UPS机内温度(摄氏度)> <状态标志>

这里需要对状态标志做下介绍,因为我在逆向分析时无法重现所有可能情况,这里只给出我知道的几个标志位:

00001001
|     +--- UPS输出关闭位
+--------- 外部供电失效位

虽然只知道2个标志位含义,不过我想应该足够了,最高位表示当前交流供电是否异常,如果为1就表示断电了。UPS输出关闭位有效则表示当前UPS没有工作。

知道这些格式信息后,下面的问题就是如何知道相关的请求代码,即通讯协议。

监听串口通讯:

我曾想过通过把Winpower逆向工程来研究通讯协议,毕竟java 1.5以前的class文件可以很容易被反汇编(应该说是反代码)。不过后来放弃了,这里就不多说了...

目前采用的办法是监听串口的通讯。这里介绍一个相对使用什么本机COM1与COM2对接等方法简单多得手段。在Windows平台下可以采用一款叫做HHD Free Serial Port Monitor的免费软件。或者Sysinternal上也提供了相关工具。他们都通过hook IOCTRL函数来截获COM的通讯内容。

使用这类工具,开启Winpower后,相关的通讯协议也一目了然。其实根本不能算协议,十分的简单:

 Request: 2009-2-7 20:00:19.95264 (+0.9013 seconds)

  46 0D                                             F.

 Answer: 2009-2-7 20:00:19.01264 (+0.0601 seconds)

  23 32 32 30 2E 30 20 30 30 34 20 31 32 2E 30 30   #220.0 004 12.00
  20 35 30 2E 30 0D                                  50.0.

 Request: 2009-2-7 20:00:20.97364 (+0.8913 seconds)

  51 31 0D                                          Q1.

 Answer: 2009-2-7 20:00:20.03364 (+0.0601 seconds)

  28 32 32 35 2E 39 20 32 32 35 2E 39 20 30 30 30   (225.9 225.9 000
  2E 30 20 30 30 30 20 30 30 2E 30 20 31 33 2E 38   .0 000 00.0 13.8
  20 32 35 2E 30 20 30 30 30 30 31 30 31 31 0D       25.0 00001011.

 

因此,上面提到的2组信息分别对应的请求数据为:

"F\r"

"Q1\r"

Linux下的轻量级监控程序:

有了上面的分析结果后,很容易的就能自己编写一个监控程序。为了各位方便,我提供一个简单的原形程序。用法如下:

# ./upsread [port name]

如果忽略了port name,则默认采用/dev/ttyS0。 程序会先输出第一项UPS信息,然后以1秒为间隔打印出第二项状态信息,如:

./upsread
#220.0 004 12.00 50.0
(233.9 234.3 233.9 011 50.1 13.9 25.0 00001001
(234.3 233.9 234.3 011 50.1 13.8 25.0 00001001
(234.3 234.3 233.9 011 50.1 13.9 25.0 00001001
(234.3 234.3 234.3 011 50.1 13.9 25.0 00001001

 

FlashSite V2++

很久没有更新Blog了。或许让各位觉得我不再维护这个网站,其实不然。

虽然一直没有写Blog,不过我一直在对这个网站做修改,尤其是07年出发布的Flash Site V2。当时因为经历了近2年的开发周期,因此十分急切的想把这个网站发布出来。同时也因为那时想尽快抽出时间忙学习的事情,在开发的后期有点马虎。现在看来当时发布的版本存在许多问题与不足。这些问题随着发布后使用过程中慢慢暴露,直到我也觉得忍无可忍的地步。因此从去年开始我就开始一直计划着对这个网站(确切地说是网站的运行库ReformCore)进行大规模的改善。而本文就是对之前一段时间内我对这个网站所作的修改的总结。当然,那些一直希望了解该网站实现细节或者想得到源代码的朋友也可以关注此文,因为我现在开始计划把ReformCore的部分组件开放:OpenReformCore。

直观起见,先给个目前网站的截图:

网站截图

图:改善后的SiteV2

这次修改后的版本暂称为Site V2++。主要增加了网站整体的执行效率,同时改善了浏览体验。对ReformCore的一些Bug做了修正。本文后续部分将针对部分修改部分介绍。文末将介绍这次增加的一个插件ReformUI Spy以及OpenReformCore的一些设想。

网站部分的改善

07年网站发布时,有不少批评针对当时网站背景声音过于嘈杂,同时也反映动画表现不流畅的。同时当时时间比较紧张,没有对一些细节部分处理好,比如菜单部分那些图标一直在使用着这个网站原形期间临时选取的那些图片。也有人批评说网站过于眩目。

目前改善的版本已经重新设计了首页和菜单的图标部分。同时也更换了背景图片以及背景音效。至少目前在我看来,应该不会给浏览者带来嘈杂感了,同时网站风格上也比较统一。至于批评说网站眩目花哨的,不好意思,目前看来仍旧很花哨。不过我已经将一些不必要的成分去除了,比如整个网站只有一张背景图以及一套背景音乐。

这次新采用的背景音乐已经不是之前很俗套的循环音效,循环的音效无论如何都会给人带来烦躁感。至于新背景音乐的效果还是各位亲感受下吧。网站在设计上从起初就以到背景、音乐等修饰手段不得干扰正常浏览为原则。所以音乐和背景图片与网站的浏览是不同步的,换句话说,在网速缓慢的情况下,访客可以先进行网站内容的浏览,而背景图片和音乐会在后台加载完毕后才得以呈现。因此如果想体验新的音效的话可能需要等待一段时间。

对于网站的执行效率问题,其实就是针对Flash渲染效率的优化问题,这次也有很大的改善。至少目前在我看来比以前整个网站渲染速度提升了30%-40%。同时,以前进入网站是要经历的2次“嘟嘟”声的阶段也被合并在一起。

对于用户体验的提升方面,这次的修改还增加了网站高度会随浏览内容自动修正以及网站浏览的资料将与URL地址同步等功能。URL地址同步其实就是BackButton,具体效果可以尝试如下链接:http://www.csksoft.net/index_mainsite.asp#SubView%3D4%26SubSection%3Dlab%26ViewPos%3D1%26ViewType%3D2%26UID%3Dmainsite.site_data.ID75

其次是修正了网站对Webkit(如Chrome)以及Opera浏览器的兼容性。不过代价是在这2类浏览器下网站将无法使用Backbutton。

剩下的修改部分还有许多,不过基本都是一些小改动。这里还要提一下现在的ReformScript终端窗口可以改变大小了!同时支持脚本导出功能。这点将在后面的ReformCore改善部分介绍。

ReformCore的改善

ReformCore中主要对UI组件进行了大幅修改,其中主要针对XWindow部分,即类似ReformScript终端的这些窗口。

  1. 增加了Resize功能
  2. 改善了窗口层次的管理,增加了窗口聚焦的特征。

还有一些其它的UI修改,这里就不具体介绍了。如果今后ReformCore开源了,这些部分也会包含。

图:增加了动态尺寸改变特性的XWindow,以及其他的UI改动

图:修正了层级管理以及增加了窗口焦点特性

图中可以看出XWindow已经越来越像是个OS的UI了。不过毕竟有点重新发明轮子的味道,但是Flash下还真的没有啥捷径。

另外,对ReformCore的后台代码修改也展了很大的部分,不过这部分因为难以用直观的图像形式表达,就不再具体涉及。不过可以提一下开发的用于Puxos管理的Puxos Explorer。

图:Puxos Explorer

Puxos Explorer属于网站的后台管理部分,同时我目前还没有找到其他人会对此工具感兴趣的理由,因此这个工具就不公开了。Puxos因为采用了XML来保存数据,本身自然就是以树状存储的。所以可以套用文件系统的概念,自然要做UI的管理器的话,就会做成Windows Explorer那样。当然,我做的很简单...

ReformUI Spy

这次更新过程中顺便做了一个有用的小工具,ReformUI Spy。这个工具可以在网站的“创意与演示”板块找到。至于其用处,估计用过Microsoft Visual Studio中自带的Spy++的朋友应该可以猜到:用它可以察看当前Flash中任何MovieClip的信息!这个工具并非只能用于我的网站,任何AS2.0的Flash只要能够加载进此工具都可以工作。

 

 图:用ReformUI Spy 观察ReformScript窗口中TxtHolder组件的属性

 

图:鼠标拖动观察游标进行组件选取时的画面

不过因为Flash采用了sandbox的机制,不同域名下swf不能进行脚本级交互。所以想用这个工具做偷窥是不可能的了,不过用于自己作品的辅助调试应该还是大有帮助。另外,要偷窥我网站还是可以的:-)。

另一个好消息是这个工具是开源的,所以实现原理我就不说了,大家看代码。当然我相信肯定有Flash的高手已经知道这点用处。同时,为了将来开放ReformCore的考虑,这个工具的代码也可以作为ReformUI API使用的具体例子。

试用请点击:http://www.csksoft.net/index_mainsite.asp#SubView%3D4%26SubSection%3Dlab%26ViewPos%3D1%26ViewType%3D2%26UID%3Dmainsite.site_data.ID75

代码下载:http://www.csksoft.net/data/fla/reformSpy.rar

OpenReformCore

已经有不少朋友希望我公布网站全部或者部分的代码了。我也觉得有时候还是全部公布代码了比较好。毕竟如果能被其它人使用才是我工作价值的最好体现。不过考虑的下面的几个问题,我一直没有这么做:

  1. 网站自身安全性
  2. 坐享其成的使用或者盗用
  3. 本身的质量问题

对于网站自身安全性考虑应该比较好理解,尤其是后台部分。因为ReformCore还用来管理我个人信息,如果公布了代码可能会造成自身的安全隐患。我承认ReformCore安全性不好。同时,如果只公布前台,可能有些地方的代码就不好理解了。

对于第二个考虑,我想我有时也做的不好。毕竟国内盗版软件大家天天用、平时抄作业、专门有网站公布各类代码给大家直接拿去用于各类用途。大家似乎觉得这些已经没有什么了。我不介意有人用这个网站的代码拿去赚钱。如果真那样,那真是我最大的荣幸。不过我看不惯那种坐享其成式的挪用和盗用。挪用:直接将网站原封不动的用于自己作品,或者仅仅改动文字和图片。盗用:声称是自己的。说起盗用,我还记得有人真的拿我之前做的高手挑战说是自己做的。不过也说明有人认可这个...可能是我心胸狭窄吧,不过我想我们平时习以为常的这些举动真的应该吗?

好了,现在说说OpenReformCore。上面已经说明了我的态度,所以今后要公布代码,一个原则就是公布出去的代码不可能直接编译后就运行。同时后台部分可能会不公布。不过这个主要是我觉的不好意思拿出手。现在外面都采用ASP.net了,我这代码还是ASP 3.0。而根据大部分人的反应,我想他们最感兴趣的应该是ReformUI部分。因此这部分代码会最早的公布。不过既然要公布,也不是说随便打包给出链接那样简单。那样不但对别人不负责,也是对自己不负责。所以还需要作一些额外的事:写注释、例子、帮助。当然,还有版权申明(应该说是分发许可申明)。至于时间安排上,我想说得是尽量。

 

好了,我认为已经把这次改动部分值得介绍的部分写完了。总体来说,这次改动的着重点就是使得Site V2能够搞好的派上用处:发布和展示我作品的平台。希望这次改动能给浏览者带来较好的体验。同时,我又一次注意到自己不但不是学设计出生,也没有这方面天赋。既然ReformCore本质不是Site V2这个Flash网站,那么希望这次修改也能使我停止长达2年+这2个月的Flash制作中。希望今后不要再被人理解成我是专作Flash的了...

这次网站的改善也让我重新对我这个网站(www.csksoft.net)的用途有了新的理解。今后Site V2的主要职责对外将用于我作品的发布和展示,同时借助其RIA的特性,一些新的想法、需要多媒体借助的部分也将使用Site V2。而Blog将发布平时写的一些文章。包括会在各类不大不小论坛灌水的长篇大论或者平时的胡思乱想。有人觉得这2年Blog文章更新满了是啥啥的表现,其实这是不正常的。不过的确不能像以前想说什么说什么了...

分页:[«]1[»]

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)