忍者ブログ

2024-11-21(Thu)

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2015-06-03(Wed)

停電通知システム を作ろう



もし、不在時に電算室が停電になったら・・・。
UPSがあるので自動でシャットダウンするのでいいのですがやはり心配です。
そこで、停電になったらメールでお知らせするプログラム(スクリプト)の紹介です。
スクリプトはVBS。いろんな機能を寄せ集めたのでロジックに統一性がありませんがご了承ください。
まずは用意するもの
UPS:インターネットルーターの電源を確保します。停電でルーターも切れてしまってはメール通知できません。
ノートパソコン:AC駆動もバッテリー駆動もできるやつ。バッテリーも満充電にしておきましょう。
ノートパソコンは、休止状態やスリープ状態にならないようにしておきます。
以下のスクリプトをメモ帳に記述し、Power.vbs (好きな名前でいいです。)で保存します。
適当なフォルダに入れておき、vbsを実行します。
内部で動きっぱなしになります。
AC駆動になったりバッテリー駆動になったりした時点でログ(同じフォルダ内にPower.logが作成されます)に書き込まれ、
かつメールで通知します。
以下、ロジック。
--------------------------
'PC名前取得
Dim objNetwork,CmpName
Set objNetWork = WScript.CreateObject("WScript.Network")
CmpName = objNetWork.ComputerName
Set objNetWork = Nothing
'始まりのログ出力
Call SysWriter(CmpName & " Watching Start", "Power.log")
Set colMonitoredEvents = GetObject("winmgmts:")._  
    ExecNotificationQuery("Select * from Win32_PowerManagementEvent")  
Do  
    Set strLatestEvent = colMonitoredEvents.NextEvent  
        'Wscript.Echo strLatestEvent.EventType
    If  strLatestEvent.EventType = 10 Then
        strComputer = "." 
        Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\wmi") 
        Set colItems = objWMIService.ExecQuery("Select * From BatteryStatus Where Voltage > 0") 
        For Each objItem in colItems 
            'テスト用 Wscript.Echo Date() & " " & Time() & ": " & "On AC Power: " & objItem.PowerOnline 
            Call SysWriter("On AC Power: " & objItem.PowerOnline, "Power.log")
            Call SendMail(objItem.PowerOnline)
        Next
        Set objWMIService = Nothing
        Set colItems = Nothing
    End If
Loop 
Sub SysWriter(str,path)
 
    Dim fso, fi
    Set fso = CreateObject("Scripting.FileSystemObject")
 
    'ファイルを開く
    'もしも存在しない場合には作成する
    Set fi = fso.OpenTextFile(path, 8, true)
 
    fi.WriteLine (Date() & " " & Time() & ": " & str) 'ログを書き込む
    Set fi = Nothing
 
End Sub
Sub SendMail(Msg)
    Set objMail = CreateObject("CDO.Message")
    objMail.From = "送信元@gmail.com"
    objMail.To = "送信先@gmail.com"
    objMail.Subject = CmpName & " 電源確知 On AC Power:" & Msg
    objMail.TextBody = CmpName & " のAC Powerが " & Msg & " となりました。確認してください。"
    strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
    With objMail.Configuration.Fields
       .Item(strConfigurationField & "sendusing") = 2
       .Item(strConfigurationField & "smtpserver") = "smtp.googlemail.com"
       .Item(strConfigurationField & "smtpserverport") = 465
       .Item(strConfigurationField & "smtpusessl") = True
       .Item(strConfigurationField & "smtpauthenticate") = 1
       .Item(strConfigurationField & "sendusername") = "送信元@gmail.com"
       .Item(strConfigurationField & "sendpassword") = "Password"
       .Item(strConfigurationField & "smtpconnectiontimeout") = 60
       .Update
    end With
    objMail.Send
    Set objMail = Nothing
End Sub
-------------------------------------------------------------
メール通知は、CDO.Massage を使っています。
できれば送信元はgmailがいいようです。hotmail(livemail)やyahoomailでも試してみましたが、
うまくいかず、今回はgmailで新規に取得しました。
これを作っちまったということは、停電通知のメールが来たら馳せ参じなくてはいけないということですね(;O;)

拍手[0回]

PR

この記事にコメントする

Name
Title
Mail
URL
Comment
Pass
Pictgram
Vodafone絵文字 i-mode絵文字 Ezweb絵文字

Amazon

PR

情報サービス

楽天

ソフト関連

メーカー直販PC

周辺機器

ランキング

プロフィール

HN:
NORI
性別:
男性
趣味:
車でどこへでも
自己紹介:
文学部卒業ながら、ひょんなことからシステム会社に就職。
しかしながらあまりの激務に退職。もうシステム系はいやだと思っていたが、ひょんなことから企業の電算室に勤務することとなる。

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

ブログ内検索

Google
Web ブログ内

最新TB

アクセス解析