自宅PCやサーバのHDD容量を監視して、逼迫してきたら、LINE通知に24H自動通知しています。
処理の流れとしては、
- WIndowsタスクで一定期間で監視スクリプトを実行
- 監視スクリプトで要通知となればLINE通知にPOSTする
- そうでなければなにもしない(スルー)
これを24時間365日行っています。
ここでは、上記の「LINE通知にPOSTする」部分について、その方法と注意点について紹介しようと思います。
「 WIndowsタスクで一定期間で監視スクリプトを実行」部分については、本ブログの関連ページを参照してください。
かなり説明を端折ってますので、初心者の方はネットでいろいろ調べてみてください。
紹介内容とポイント
- ①LINE通知への通知方法。少なくとも2種類ある。それぞれ長所短所があるので用途により使い分けるとよい
- ②LINE通知に直接通知を投げる
- ③LINE通知にIFTTT経由で通知を投げる
- ④まとめ
③④については、「LINE通知の直接トリガーとIFTTT経由のトリガーについて(その2)」を参照してください。
①LINE通知への通知方法
LINE通知に至る方法には、他にもいろいろ紹介されているかも知れませんし、自分で独自にそうしたサービスを作ることも可能ですが、ここでは比較的簡単に導入しやすいと思われる方法を紹介します。
- 監視対象機器からLINE通知に、直接、通知を投げる
- 監視対象機器からLINE通知に、IFTTT経由で、通知を投げる
特に監視対象機器などなくて、単にTwitter等のネットサービスからLINE通知に通知したい場合は、IFTTT経由の方法を参照してください(後述するURLにPOSTするスクリプトも不要です)。
※ここの紹介では方法の比較がひとつのポイントですので、一方の方法のみであれば他ブログのページの方が導入しやすいかも知れません。
直接通知の特長
- ほぼリアルタイムで通知が来る。他サービスを経由しないので、ほぼリアルタイムに通知できます。応用例を思いつきませんが、監視対象からの通知にすばやく反応したい場合有用かもしれません。
- LINE通知専用のアクセストークンを取得して使用しないと通知できないので、安全
IFTTT経由通知の特長
- 特別な知識やノウハウが必要ありません。監視対象機器からの通知を処理する場合でも、リアルタイム性を求めないならこちらで十分だと思われます。ただし結構タイムラグがあります(下記例の場合28分)。
- LINE通知のアクセストークンを取得する必要がありません。ただしIFTTTのトークンは必要です。
②LINE通知に直接通知を投げる
監視対象機器(ここでは自宅PCとします)から「LINE Notify」(LINE通知)サービスにアクセスします。やり方は、ひとことでいうと、LINE通知専用アクセストークンを入手して、それを使ってURLにPOSTするだけです。それだけで普段使っているLINEに通知が来ます。
たとえば、こんな感じです。
※背景画像は東京市ヶ谷にあるポケストップ
ひとつ目の通知が直接通知。二つ目の通知はIFTTT経由通知。同時刻にPOSTしていますが、到着に28分間のタイムラグがありました。IFTTT経由通知の場合は処理が遅いのではなく、ある時点でまとめて処理しているだと推察します。
powershellのコード例
以下PowerShellのコード例を示します。ここでは、LINE通知をする監視対象機器を自宅PC(Windows)としているのと、監視処理を同じくPowershellで書いてWindowsタスクから起動しています。
MacOSやLINUXサーバの場合は、「curl」コマンド等を使って同様に実装可能と思います。
LINE_trig.ps1
Add-Type -AssemblyName System.Web
Set-Variable -Name 'TOKEN_LINE' -Value <アクセストークンの文字列>
echo ("※LINEへ通知イベント発火 at " + $Now)
$oXmlHttp = New-Object -Com Msxml2.XMLHTTP.3.0
$URL = "https://notify-api.line.me/api/notify"
#コマンドライン引数(パラメータ)の取得
If ($Args.Length -eq 1){
$a1 = [SYstem.Web.HttpUtility]::UrlEncode($Args[0])
$a1 = "message=" + $a1
}else{
echo "Error:引数が多すぎます"
exit
}
$oXmlHttp.Open("POST", $URL, $false)
$oXmlHttp.setRequestHeader("Authorization","Bearer $TOKEN_LINE")
$oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
$oXmlHttp.Send($a1)
If ($oXmlHttp.Status -eq 200){
echo "正常に送信できました"
echo [SYstem.Web.HttpUtility]::UrlDecode($URL)
}Else{
$responseText = $oXmlHttp.responseText()
echo "Error returnCode: $responseText"
}
下記コマンドをWindowsのコマンドプロンプトで実行します
LINE_trig.ps1 "ディスク逼迫 at MyPC(残量 649)"
※通知内容の変更を容易にするため、上記スクリプトに引数をひとつ渡すようにしています。
※24H監視する場合はWindowsタスクへの登録が必要です。
R.参考
関連する記事・ページ
LINE通知の直接トリガーとIFTTT経由のトリガーについて
LINE通知の直接トリガーとIFTTT経由のトリガーについて(その2)
自宅PCをスマホでリモート管理(タスク管理編)
PCをリモート管理する1手法
【コードサンプル】Windowsタスクへの登録例
【コードサンプル】heartbeat.ps1 – 心音確認 PowerShell Script
【コードサンプル】1時間タスクのScript例
【コードサンプル】24時間タスクのScript例
【コードサンプル】hbJob.bat – Windows Bat Script
【コードサンプル】プロセスモニタのScript例
【コードサンプル】IFTTT経由でLINE通知するScript例
【コードサンプル】ネット転送量モニタ
お世話になったリンク
LINE Notifyでたのでちょっと試してみる。ついでにGithub Enterpriseのwebhookを通知するやつを作ったぞ!!
※東京市ヶ谷のポケストップ「ビーナス」
以上です。