傘忘れた。
そんな悲劇を繰り返さないため、明日のお天気を知らせるシステムを作ろうと決意したのである。
システム概要
- お天気情報を取得して、整形する
- 整形データ(お天気情報文字列)を音声に変換して、スピーカから出力する
システム構成
ハードウェア
- Raspberry Pi
- 3 Model Bで動作確認
- スピーカ
- オートパワーオン・オフ機能がついている JVC SP-A230-W ポータブルスピーカー が便利
ソフトウェア
- Open JTalk
- Python 2.7
- シェルスクリプト
- cron
利用するWebサービス(REST)
お天気情報を取得して、整形する
Weather Hacks - livedoor 天気情報 からお天気情報を取得します。
地域別のID番号を取得する
1次細分区定義表 - livedoor 天気情報 から住んでいる地域を探してIDを特定します。
例えば、東京は「130010」、大阪は「270000」、名古屋は「230010」、福岡は「400010」。
JSON形式のデータを取得して、整形する
とりあえず、東京のお天気情報を取得して、標準出力に吐き出すスクリプトを作った。
・下記を get_weather.py として保存
#!/usr/bin/python # -*- coding: utf-8 -*- import urllib import sys import json WEB_SERVICE_URL = "http://weather.livedoor.com/forecast/webservice/json/v1?city=" CITY_ID = 260010 SAVE_PATH = "/home/pi/tmp/" SAVE_FILE_NAME = "weather.json" #今日、明日、明後日を設定 SEARCH_DATA_LABEL = '明日' def download(): open_url = WEB_SERVICE_URL + str(CITY_ID) save_title = SAVE_PATH + SAVE_FILE_NAME urllib.urlretrieve(open_url,save_title) def get_weather(data_label): with open(SAVE_PATH + SAVE_FILE_NAME, 'r') as f: JSONData = json.load(f) forecasts_list = JSONData['forecasts'] for i in range(len(forecasts_list)): if forecasts_list[i]['dateLabel'].encode('utf-8') == data_label: weather = forecasts_list[i]['telop'] break return weather.encode('utf-8'); if __name__ == "__main__": download() print SEARCH_DATA_LABEL + 'の天気は' + get_weather(SEARCH_DATA_LABEL) + 'です'
スクリプト内のパラメータのうち変更して使えるのは下記とおり。
パラメータ | 設定できる値 |
---|---|
CITY_ID | 地域別のID番号 |
SAVE_PATH | JSONデータを保存するパス |
SAVE_FILE_NAME | JSONデータのファイル名 |
SEARCH_DATA_LABEL | いつの天気を取得するか。今日、明日、明後日で設定 |
整形データを音声に変換して、スピーカから出力する
【ネタ】自動おかえりシステムを作る - もみあげあしめ で使ったスクリプトを再利用する
Open JTalk のインストール
・入っていなければ実施
sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic
音声再生用スクリプト
・下記を jtalk.sh として保存
#!/bin/bash HV=/usr/share/hts-voice/mei/mei_happy.htsvoice tempfile=`tempfile` option="-m $HV \ -s 19200 \ -p 100 \ -a 0.03 \ -b 0.5 \ -fm 0.6 \ -r 0.8 \ -u 0.0 \ -jm 1.0 \ -jf 1.0 \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic \ -ow $tempfile" if [ -z "$1" ] ; then open_jtalk $option else if [ -f "$1" ] ; then open_jtalk $option $1 else echo "$1" | open_jtalk $option fi fi aplay -q $tempfile rm $tempfile
※ mei_happy.htsvoice はこちらのものを利用させていただいています。
・先ほど作成したお天気取得用のスクリプト get_weather.py と連携させる
python get_weather.py | sh jtalk.sh
これでお天気を音声で出力できます。
寝る前に通知してもらう
・cronを編集する
crontab -e
・23時40分と50分くらいに音声でお知らせしてもらう
40,50 23 * * * python /home/pi/get_weater.py | sh /home/pi/jtalk.sh
※cron使うときは絶対パスを使うほうがいいっぽい。
おわりに
オートパワーオン・オフ機能がついているスピーカーは、Raspberry Piと相性が良い。
- 出版社/メーカー: JVCケンウッド
- 発売日: 2010/11/18
- メディア: エレクトロニクス
- この商品を含むブログを見る