Raspberry Piで室内の温度や湿度を測定していますが、 外の温度も分かると色々うれしいということで 気象庁が出してくれている外気温を取得して同時に表示できるようにしてみました。
気象庁のデータ
昨年気象庁のホームページがリニューアルされて、 記録されたデータや天気予報などがJAON形式で取得できるようになったことが発見されました。
まじかよ気象庁公式の天気予報APIができてるぞ、感激して大声で泣いちゃったhttps://t.co/2HQumqjel8
— Torishima (@izutorishima) February 24, 2021
その後、これの仕様として、継続的な提供を約束するものではないが、 規約に準拠して利用する限りは使っても良いものだ、とのお達しが出ました。
一番伸びてるのはこれかしら。仕様の継続性や運用状況のお知らせを気象庁はお約束していないという意味で、APIではないと申し上げざるを得ないのですが、一方で政府標準利用規約に準拠してご利用いただけます。 https://t.co/QLuhI4DNDv
— TOYODA Eizi (@e_toyoda) February 24, 2021
ということで、これを使いたいと思います。
アメダスのデータ
今回は実際に計測されたアメダスのデータでなるべく最新のものがほしいです。
データは
https://www.jma.go.jp/bosai/amedas/data/map/<YYYYMMDDHH>0000.json
というURLで取れて、1時間毎に新しいデータが作られる様です。 分、秒に関しては今のところ0000しかない模様。
https://www.jma.go.jp/bosai/amedas/data/map/20220101120000.json
とかで過去のデータもとれます。 ただし、この形式で取れるのは10日くらい前までのようです。(上のものはリンク切れ)
これをとってみると
"44132":{"pressure":[1002.4,0],"normalPressure":[1005.2,0],"temp":[29.1,0],"humidity":[73,0],"snow":[null,5],"snow1h":[0,6],"snow6h":[0,6],"snow12h":[0,6],"snow24h":[0,6],"sun10m":[0,0],"sun1h":[0.0,0],"precipitation10m":[0.0,0],"precipitation1h":[0.0,0],"precipitation3h":[0.0,0],"precipitation24h":[0.0,0],"windDirection":[11,0],"wind":[1.2,0]}
みたいなデータの集まりが入ってます。
この最初が場所のIDで、temp
とかhumidity
とかで気温や湿度が取れます。配列の1つ目が値で二つ目は良くわからず。。。temp
とかだと必ず?0。
場所のIDは
https://www.jma.go.jp/bosai/amedas/const/amedastable.json
で見ることができます。
"44132":{"type":"A","elems":"11111111","lat":[35,41.5],"lon":[139,45.0],"alt":25,"kjName":"東京","knName":"トウキョウ","enName":"Tokyo"}
とかで、東京が44132
です。
lat
、lon
が緯度経度なのでおそらく観測点の場所だと思いますが、東京、大阪などはありますが、基本的には市町村の名前があります。あと成田国際空港とか空港もちらほら。
この中から自分の住んでる場所のIDを見つけて、アメダスのデータからそのIDEAの情報を抜き出します。
1時間おきに新しい情報が提供されますが、12時のデータは12時ちょうどに出るわけではなく、大体10分~20分くらいたったあとに提供されてます。 また、ファイルができた最初の段階では1つの観測点データだけが入ったようなデータになってることもあり、しばらく経ってから取得する必要があります。
Pythonで取得する
amedastableで取得できるエリアコードの中身に 名前のタイプとして、
kjName
: 漢字(e.g. 東京)knName
: カナ(e.g. トウキョウ)enName
: ローマ字(e.g. Tokyo)
の3種類があるので好きなものを使って取得できます。
あとはこのコードを使って
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
みたいな感じでとってあげれば
$ amedas.py
気温: 25.3℃, 湿度: 72%
$ amedas.py Naha
気温: 31.2℃, 湿度: 92%
$ amedas.py Sapporo
気温: 24.1℃, 湿度:5792%
$ amedas.py 那覇 kjName
気温: 31.2℃, 湿度: 92%
$ amedas.py Tokyo enName 20220615010000
気温: 15.2℃,湿度: 95%
といった感じで各地の気温、湿度が取得できます。
3番目の引数で時間を指定してますが、指定がないときは現在時刻、 ただし、上にも書いたように、時間が更新された直後だと取れない場合もあるのでその場合は1時間前の情報をとってくるようにしています。
あとはこれを適宣必要な情報取れるようにしてRaspberry Pi上で適時動かすだけ。
Raspberry Pi上での運用
こんなスクリプトを用意して
/opt/bin/以下に設置。
別途
1 2 |
|
といった感じのファイルを用意。
これを systemdで実行します。
raspi_setup/amedas.service at main · rcmdnk/raspi_setup
raspi_setup/amedas.timer at main · rcmdnk/raspi_setup
amedas.service, amedas.timerを/etc/systemd/system/の下に設置。
その後、
$ sudo systemctl enable amedas.timer
とすれば、5分おきにデータを取得して/opt/var/amedasに書き出してくれます。
これを別途、1分おきに見に行ってLCDに表示するものを動かしておけばLCD上に表示してくれるようになります。
Outの部分がamedasからとったもの。