ブラウザのJavaScriptをONにしてアクセス願います

北海道電力NW停電情報をLINEに通知する
Total Access: 7797423


北海道電力NW停電情報をLINEに通知する

北海道電力NW公式でも こちら のようなLINE配信サービスがあって,これは Messaging API によるものです.当該APIは従量課金制でメッセージ通数に応じて北海道電力に課金請求されるためと思いますが,1ユーザあたり最大4箇所までしか配信を受け取れないってことで,保安法人や管技の方のように管内全域の供給支障事故,短時間停電事故を知りたい人にとっては正直使い物になりません.
ということで,代用機能を Notify API を利用して組むことで実現させます.北海道以外の他電力会社の停電情報ページについてはソースまで詳しく見たことはありませんが,当然同様な事が可能です.

例えば,保安法人・管技の方の持ち事業場に設置した遠隔絶縁監視装置から停電の通報だとか,または停電と復帰を1~2回繰り返す場合だとか,そういう場合は電力会社側の供給支障事故あるいは再閉路成功事故なんかのケースも多いわけですが,北海道電力NWの場合だと5分毎に停電情報が提供されるようになってるので情報更新されたら下図のようにLINEに通知させることを考えます.

とりあえず,ここでは,

という感じで,teiden-info.hepco.co.jp/short_outage01.html(石狩地域の停電情報) のページをcURLコマンドでウェブスクレイピング→情報が更新されたらLINEにプッシュ のように動かします.コード的には,

<?php
// ------------------------------------------------------------
// 石狩の短時間停電を通知
// ------------------------------------------------------------
  $url = "teiden-info.hepco.co.jp/short_outage01.html";
  $conn = curl_init();
  curl_setopt($conn, CURLOPT_URL, $url);
  curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
  $res =  curl_exec($conn);
  curl_close($conn);

	$a = strpos($res, '<td class="text_left">');
	$newtime = substr($res, $a+22, 16);

	//------- 前回時間読み込み -------
	$filename = './rec-sp.log';
	$fp = fopen($filename, 'r');
	$lasttime = fgets($fp);
	echo $lasttime.'<br>';
	fclose($fp);
	//--------------------------------

  // ------------------------------------------------------------
  // LINE Notify 送信処理
  // ------------------------------------------------------------
	if($newtime != $lasttime){
		if(strpos($newtime,"ja") === false){
			define('LINE_API_URL', 'https://notify-api.line.me/api/notify');
			define('LINE_API_TOKEN', '発行したAPIトークン');
			post_message("\n石狩 過去の停電情報が更新(再閉路事故含む)\nhttps://tinyurl.com/ynwk7tf4");
		}
	}
// ------------------------------------------------------------
// ------------------------------------------------------------
// LINE送信ファンクション
// ------------------------------------------------------------
  function post_message($message)
  {
      $data = array(
                          'message' => $message,
                       );
      $data = http_build_query($data, '', '&');
      $options = array(
          'http' => array(
              'method' => 'POST',
              'header' => 'Authorization: Bearer '.LINE_API_TOKEN."\r\n"
                        ."Content-Type: application/x-www-form-urlencoded\r\n"
                        .'Content-Length: '.strlen($data)."\r\n" ,
              'content' => $data,
          ),
      );
      $context = stream_context_create($options);
      $resultJson = file_get_contents(LINE_API_URL, false, $context);
      $resutlArray = json_decode($resultJson, true);
      if ($resutlArray['status'] != 200) {
          return false;
      }
      return true;
  }
  // ------------------------------------------------------------
  // 最新の発生時間を保存
  // ------------------------------------------------------------
	$file_handle = fopen( "./rec-sp.log", "w");
		fwrite($file_handle, $newtime);
		fclose($file_handle);
?>

以上を,cron で1分毎に動かしてチェックしに行き,停電があればLINEに配信されます.

一方で,短時間停電のみならず供給支障事故も通知を受けたいなら,同様に今度は https://teiden-info.hepco.co.jp/promotion_bureau01.html のページをスクレイピングしてやって同じようにLINE Notify APIに投げてやるようにするだけです.

石狩エリアであっても千歳や恵庭,南区には受け持ち事業場が無いので情報不要ってことなら,それらを無視するようにコーディングしてやれば良いだけで自分の欲しい情報だけ取得可能です.IFをネストしてやったり,適当にやってください.


以上,Web上のデータを常に監視して,変化したらLINEで通知を受け取る仕組みは色々応用が利くわけですが,自宅サーバまたはホスティングでサーバを保有していないユーザは GAS を使う手もあります.cronのように1分毎に定期的に実行するような事も可能です.
何より,最もポピュラーでビギナー向けのJavaScriptベースの言語で記述していくため,多少技術のあるユーザなら特に予備知識も無しにすぐにコードが書けるという点も手軽です.

HOME へ戻る



提供:北海道電力ネットワーク㈱ 北海道電気管理技術者協会 札-459号
長谷川電気管理事務所(長谷川博)