どせいたんさき。

ナスダヨー

Screenlets でデスクトップにアメッシュを表示する

最近自転車通学にしたので雨の様子はとても気になるところです.東京近郊の雨の様子を知るために役立つサイトの 1 つに東京アメッシュがあります.各地の降水量をモニターして 5 分おきに画像を更新してくれるという素晴らしいサイトです.でもどうせならデスクトップに表示していつでも確認できるように……ということで気晴らしも兼ねて簡単なスクリプトを書いてみました.


やっていることはとても簡単で次のようなものです.

  1. cron で 5 分ごとに東京アメッシュから画像をダウンロードする
  2. ダウンロードした画像を Imagemagick を使って地図画像に重ねあわせる
  3. Screenlets の Picframe をつかってデスクトップに表示する


ダウンロード & 画像合成をやってくれるスクリプトは次のようなものを書きました.仮に amesh.sh としましょう.このスクリプトとは別途に map.gif, msk.gif が必要になります.それぞれ東京アメッシュで背景となる地形画像と県名や県境などを表示している画像です.何とかして手に入れましょう.どちらも 770x480px のサイズで用意しています.このスクリプトを実行するとこのディレクトリに amesh.gif という画像ファイルができます. msk.gif はきちんと透過 gif になっていることを確認しないと悲しいことになるので注意しましょう.保存したスクリプトに実行権限を与えるのも忘れずに.

#!/bin/bash

## start up
ROOTDIR="/Your/Root/Directory/for/amesh/"
cd ${ROOTDIR}

## map file name
OUT_FILE=${1:-"amesh.gif"}
MAP_NAME="map.gif"
AME_NAME="mesh.gif"
MSK_NAME="msk.gif"
SOURCE_URL="http://tokyo-ame.jwa.or.jp/mesh/100/"

## generate image name
DATE=`date +%Y%m%d`
HOUR=`date +%H`
MINUTE=`date +%M | awk '{printf "%02.0f", int($1/5)*5}'`

IMG_NAME="${DATE}${HOUR}${MINUTE}.gif"

## fetch and composite image
wget -q "${SOURCE_URL}${IMG_NAME}"
if [ -f ./${IMG_NAME} ];
then 
  convert -geometry 770 ${IMG_NAME} ${AME_NAME}
  convert ${MAP_NAME} ${MSK_NAME} -composite \
    \( ${AME_NAME} -modulate 100,50,100 \) -composite  ${OUT_FILE}
  rm ${IMG_NAME}
else
  echo "$0: Cannot Fetch ${IMG_NAME}" >&2
  exit 1;
fi

このスクリプトを cron を使って 5 分おきに起動します.端末上で crontab -e と打つと crontab の設定画面が立ち上がるのでごにょごにょと書き込みます.タイムラグも考えて 1, 6, 11, ..., 56 分にスクリプトが走るようにしました.

# m h  dom mon dow   command
1-56/5 * * * * /path/to/the/amesh/amesh.sh >/dev/null 2>&1

なお現在 cron に設定されているサービスを確認するためには crontab -l とコマンドを打ちます.


Screenlets から Picframe を起動します.起動時に自動で起動するように設定をしておきましょう.


起動したらとりあえずオプションを開いて設定をします.すべてのワークスペースで表示,位置固定,最下層に固定,などにチェックをしておけばいいと思います.あとは Picframe のタブで amesh.gif を表示するように設定すれば完了です.表示される画像の更新には少しタイムラグがありますが,気になるときは Screenlets をダブルクリックすれば勝手に更新してくれるようです.

そんなわけでデスクトップの隅っこにこんな感じで表示しています.