RaspberryPiを使って現在の天気を教えてくれるものを作る

  • 7
    いいね
  • 0
    コメント

はじめに

研究室生活をしていてよくあることが、今雨降っているのかわからない!!
研究室の窓から外を見ても、わからない。というかブラインドあるから窓から見るのもめんどくさい。
ということで、現在の天気を簡単に教えてくれるものがあればいいなって思って作り始めました。

喋らせる

RaspberryPiを使って喋らせる方法はここを参考にしました。
適当にsay.shを作成し、用意しておきました。

$ ./say.sh テスト

上記コマンドで喋るようにします。

天気を調べる

上の記事では天気を調べるのにopenweathermapを使用していますが、知りたいのは現在の天気なのでこれでは駄目です。
そこでtenki.jpのアメダス観測には10分毎の観測データがあるのでこれを取得して喋らせることにします。

ここはスクレイピングを用いて必要なデータを持ってきます。今回は直近の時間と降水量を取得することにしました。

<?php
    # DOMやXPathの準備
    $dom = new DOMDocument;
    @$dom->loadHTMLFile('http://www.tenki.jp/amedas/5/26/51106.html');
    $xpath = new DOMXPath($dom);

    $weatherData = [];

    // アメダス実況から直近のデータを取得する
    $node = $xpath->query('//table[@class="amedas_table_entries"]')->item(0);
    // 各種データを取り出す。
    $time = $xpath->query('.//td[position()=2]',$node)->item(0);
    $precipitation = $xpath->query('.//td[position()=4]',$node)->item(0);
    $weatherData[] = [
        'time'                      => substr_replace($time->nodeValue,"時",2,1),
        'precipitation'     => $precipitation->nodeValue,
    ];

    var_dump($weatherData);

    // say.shを用いて喋らせる
    $command = '/home/pi/Documents/say.sh '.$weatherData[0]['time'].'分時点の降水量は'.$weatherData[0]['precipitation'].'です';
    exec($command);
?>

loadHTMLFileのURLを別の県にすれば、その県の直近の降水量を入手できるはずです。

遠隔から天気を喋らせる

いい方法が思いつきません。誰か教えてください

現在は下の方法で喋らせていますが、研究室の各員の端末からパスワードなしで喋らせたいなぁ
もしくはボタンをつけるか....

$ ssh pi@raspberrypi.**** "php weather.php"

 参考にしたところ

Webスクレイピング

PHPネイティブのDOMによるスクレイピング入門

今回の発想元

引っ越し祝いに大きめのエジプト神像を送りつけられたのでラズパイを仕込んで喋れるようにした

RaspberryPiでスピーカーを使う際の注意点

Raspberry Pi | 合成音声をUSBスピーカーから出力したい!(ハマったポイント)