秘密の本棚

気になることをなんでも書きます

自動でPCやスマホの壁紙変更をしてくれるアプリまとめ

壁紙に飽きることと無縁に!

毎日使っているパソコンやスマホの壁紙、だんだん見飽きてきたと思うことはないですか?今回は自動で壁紙を変更してくれるアプリケーションを紹介します。

f:id:nexusuica:20180825110739j:plain

最初は綺麗だと思っても、一週間くらいすると変えたくなったりする

Windowsの場合:Daily Picture

Microsoft検索エンジンであるBingは、トップページの背景画像が日替わりで変更されるのですが、それと同じ画像をデスクトップの背景に設定してくれるアプリケーションが「Daily Picture」です。無料アプリです。

毎日日替わりで美しい写真になってくれるのでパソコンを起動するのが楽しみになります。また、日本の祝日に合わせて画像が設定されていて、例えば成人の日には晴れ着姿の女性の写真になったりするので、季節感も感じられます。Windowsユーザーには激推ししたいです。

Macの場合:Daily Wallpaper・FreshBackMac

同様のアプリケーションがMacにも「Daily Wallpaper」という名前で用意されています。こちらもBingと同じ画像をデスクトップの背景に設定してくれます。

Daily Wallpaper - for Bing

Daily Wallpaper - for Bing

  • Chunlei Yang
  • Entertainment
  • $1.99

有料アプリなので敬遠してしまうという方は、Bingと同じではないですが一定間隔で変更してくれる「FreshBackMac」というアプリもあるようです。

Androidの場合:Daily Wallpapers from Bing

Androidの場合は以下のアプリ「Daily Wallpapers from Bing」が利用できます。広告が表示されますが無料で利用できます。壁紙の自動変更時間や、輝度を変更するなど細かい設定ができるのも特徴です。

iOSの場合:脱獄しないと不可能!!

iPhoneiPadなどのOSであるiOSでは、残念ながら自動的に壁紙を変更させることができません。ただし、以下の動画にあるように脱獄することで可能になるようです。

以上、各OSで壁紙を自動的にいい感じのものに毎日変更してくれるアプリケーションを紹介しました。これで毎日フレッシュな気持ちで作業ができますね。

気温上昇を音で通知して熱中症対策

今回やりたいこと

Google Home+Raspberry Piによるホームオートメーション第3弾。前回はゲリラ豪雨の接近を通知するシステムを作成しました。
nexusuica.hatenablog.jp
今回はNature Remo miniに入っている温度センサーを活用し、気温が高いのにエアコンが入っていない場合に注意喚起をするシステムを作ってみようと思います。
nexusuica.hatenablog.jp

必要なステップに分解する

Raspberry Piが自動的にNature Remo miniの温度センサから温度を取得してGoogle Homeに通知するまでに必要なステップは以下の3つです。

  • Raspberry PiがNature Remo miniから温度とエアコンの状態を取得
  • 条件を満たしている場合Google Homeに通知
  • 以上の処理を定期的に繰り返す

Nature Remo miniから情報を取得するにはNature Remo APIを用います。
nature.global

Raspberry PiがNature Remo miniから温度とエアコンの状態を取得

Nature Remo APIで"devices"を見ると端末の状態を、"appliances"を見ると登録している家電の状態を取得できます。

import requests
import json
import subprocess

nature_remo_token = "<アクセストークン>"
url = "https://api.nature.global"
auth_headers = {"Authorization":"Bearer "+nature_remo_token}
cmd = "/1/devices"
r = requests.get(url+cmd,headers=auth_headers)
data = json.loads(r.text)
temp = data[0]['newest_events']['te']['val']
print(temp)

cmd = "/1/appliances"
r = requests.get(url+cmd,headers=auth_headers)
data = json.loads(r.text)
airConState = data[0]['settings']['button']
print(airConState)

条件を満たしている場合Google Homeに通知

ここで作ったコマンドライン引数からGoogle Homeを喋らせられるスクリプトを利用します。温度がしきい値より高く、かつエアコンがついていないときに通知します。
nexusuica.hatenablog.jp

threshold = 26.0

if(temp>threshold and airConState=='power-off'):
    subprocess.call('node googlehome.js 部屋の温度が高いようです。エアコンをつけましょう。',shell=True)

以上の処理を定期的に繰り返す

cronを利用して定期的に実行させます。
make.bcde.jp
まだまだ暑い日もありますね。熱中症対策には気を遣いたいものです。

ニュージーランド周遊の旅⑫:テカポで世界一の星空を眺める

前の記事:ニュージーランド周遊の旅⑪:マウント・クックで氷河を見ながらハイキング!

星空保護区に指定されたテカポへ

 マウントクックからテカポへは、プカキを左にに見ながら進んでいきます。ミルキーブルーの湖はどこから見ても美しいですね。プカキ湖の南岸からは、小さいながら氷河を抱くマウントクックの姿を見ることができました。

f:id:nexusuica:20180823111840j:plain

ミルキーブルーのプカキ湖を左手に進む

f:id:nexusuica:20180823111841j:plain

プカキ湖の南岸からはマウントクックも見える

プカキ湖を後にしてしばらく進むとテカポに到着します。テカポは世界の中でも星空が特によく見える場所として有名で、星空保護区に指定されて光害に厳しい規制が敷かれています。世界中から星空を見ようと観光客が集まっていて、宿泊施設を取るのがかなり難しいです。このテカポに二泊して天体観測のチャンスを狙います。

昼間はテカポスプリングスでくつろぐ

テカポは天体観測にはもってこいの場所なのですが、逆に昼間にやることがあまりありません。唯一テカポスプリングスという温浴施設があり、ここで温かいプールに浸かってのんびりすることができます。

以前ご紹介したクライストチャーチ近郊にあるハンマースプリングスほど大規模ではありませんが、3種類の温度のプールがあって好みに合わせて入ることができますし、軽食も購入して食べることができます。

f:id:nexusuica:20180823111843j:plain

テカポスプリングスから見るテカポ湖も見事なミルキーブルー

「湖畔」の大人気のサーモン丼は予約推奨

テカポにはレストランが何軒かあるのですが、そのうち日本でとても有名なのが日本料理店の「湖畔」です。ここのサーモン丼がとてもおいしいと評判です。

初日に訪問したところ予約でいっぱいだと入店を断られてしまい、翌日の予約を取りました。

入店しさっそくサーモン丼を注文。日本人の従業員が多く非常に簡単です(笑)。ほどなくして運ばれてきたのはサーモン丼と味噌汁、そして漬物。小皿があるのも日本料理の特徴ですね。

肝心の味の方は、サーモンの刺身がプリプリで、一週間以上生魚を食べていなかった僕には非常に美味しく感じました。ご飯とお味噌汁、漬物も落ち着く味で、日本に帰って美味しいものを食べるのが楽しみなりました(笑)。

f:id:nexusuica:20180823111845j:plain

お味噌汁があるのが何より嬉しい

サーモン丼を食べ終わったら近くの土産物店を物色。アルパカのぬいぐるみがあまりにもキュートだったので購入しました。本物のアルパカの毛からできていて、触り心地はふっかふかです。

f:id:nexusuica:20180823112349j:plain

なんとアルパカの毛でできている

南半球の星座を探せ!

日も暮れて、いよいよ天体観測の時間。街中は街灯があるので、車で少し離れたキャンプ場に行き、そこで天体観測をしました。せっかく南半球に来たのですから、南十字星などここでしか見られない星座を見て帰りたいですよね。簡易的な三脚を立てて、20秒ほど露光して撮影してみました。

f:id:nexusuica:20180823111836j:plain

南十字星と天の川が肉眼でもくっきり見える

この日はやや雲も出ていましたが、雲がないところはおびただしい数の星を肉眼で見ることができました。これほど美しい星空は今まで見たことがなかったです。

f:id:nexusuica:20180823114353j:plain

オリオン座だが、見え方にどこか違和感がある

オリオン座が出ていたのでこれも撮影してみましたが、南半球なので上下反対になっています。これも面白い発見でした。キャンプ場の芝の上に寝っ転がって満点の星を見ながら少し考え事をする、そんな贅沢な時間を過ごすことができました。

帰国

テカポからクライストチャーチは車で3時間ほど。空港近くでレンタカーを返却し、シャトルバスで空港まで向かいます。クライストチャーチから日本に直行便はないので、いったんオークランドを経由します。

クライストチャーチからオークランドへの国内線が40分ほど遅れ、もともとかなり短い乗り継ぎがバタバタしてしまいましたが、無事ニュージーランド航空の羽田行きの便に乗ることができました。

f:id:nexusuica:20180823111847j:plain

ニュージーランドにお別れを告げる

羽田空港に朝6時頃到着し、10泊13日のニュージーランドへの旅行はこれで終わり。南島を中心にレンタカーでたっぷり回ることができ、かなり充実したものになりました。日本の冬はどこも寒いので、南半球で過ごしやすい夏を過ごすのも一つの選択肢になりました。またいつかニュージーランドに行って、今度はゆっくり滞在したいと思います。

 

最初から読むにはこちらから。

nexusuica.hatenablog.jp

雨雲の接近をGoogle Homeに通知する

今回やりたいこと

Raspberry PiGoogle Homeによるオートメーション第2弾。前回はパソコンの起動をさせました。
nexusuica.hatenablog.jp
今回は、ゲリラ豪雨の発生が予測されたら、前もって洗濯物が取り込めるようにGoogle Homeで通知する仕組みを作ってみたいと思います。

必要なステップに分解する

Raspberry Piが天気情報を取得して、Google Homeにしゃべらせるまでに必要なステップは、以下の4つです。

  • Raspberry PiYahoo! 気象情報APIを用いて降水量予測を取得
  • 雨が降り出しそうかどうかを判定
  • 雨が降り出しそうならGoogle Homeに通知する
  • 以上の手順を一定間隔で繰り返す

今回は降水予測のソースはYahoo!気象情報APIを用いることにしました。
developer.yahoo.co.jp
天気の情報を取得できるサービスはいくつかありますが、Yahoo!は雨雲レーダーで各地点の5分毎の降水量を予測しており、このデータを用いれば局地的なゲリラ豪雨も前もって通知できそうです。

Yahoo! 天気情報APIを用いて降水量予測を取得

まずはRaspberry PiAPIを叩かせて情報を取得します。アプリケーション登録を済ませれば、GETメソッドを呼ぶだけです。

import requests
import json
import subprocess
location = "<経度>,<緯度>"
appid = "<appid>"
url = "https://map.yahooapis.jp/weather/V1/place"

payload = {'coordinates':location, 'appid':appid, 'output':'json', 'interval' : '5'}
r = requests.get(url,params=payload)
data = json.loads(r.text)
data = data['Feature'][0]['Property']['WeatherList']['Weather']
print(data)

こうすると、指定した経度・緯度における現在から60分後までの降水量の予測データが取得できます。

雨が降り出しそうかどうかを判定

取得したデータをもとに、「雨が降り出しそうか」を判定します。今回は、「60分以内に0ミリより大きい降水量が予測され、かつ前回の情報取得時に降水が予測されていなかった」ことを基準とします。外部ファイルに降水が予想されているかどうかを記録しておけば、これを簡単に実現できます。

rain = False
for x in data:
    if x['Rainfall']>0:
        rain = True
pastRainState = False
try:
    fin = open('rain_state','rt')
    line = fin.read()
    fin.close()
    if line == 'True':
        pastRainState = True;
except FileNotFoundError:
    print('File not found.')
    fin = open('rain_state','wt')
    fin.write('False')
    fin.close()
print(str(rain)+' '+str(pastRainState))
if rain and (not pastRainState):
    fout = open('rain_state','wt')
    fout.write('True')
    fout.close()
    <ここにGoogle Homeに降水を通知する処理>
if (not rain) and pastRainState:
    fout = open('rain_state','wt')
    fout.write('False')
    fout.close()

雨が降り出しそうならGoogle Homeに通知する

次に、降水が予測された場合にGoogle Homeに音声で通知させます。まず、Raspberry PiからGoogle Homeに喋らせるためにはgoogle-home-notifierのインストールが必要です。以下の記事に従ってセットアップします。
qiita.com
そして、コマンドライン引数に喋らせる内容を入れれば喋ってくれるようなプログラムを書きます。

const googlehome = require('google-home-notifier');
const language = 'ja';
googlehome.device("<Google Homeのデバイス名>", language);
googlehome.ip("<Google HomeのIPアドレス>");
message = process.argv[2];
googlehome.notify(message, function(res) {
      console.log(res);
});

こうすれば、あとは先ほどの降水判定のプログラムのところで

subprocess.call('node googlehome.js まもなく雨が降り出します。',shell=True)

とすれば、pythonからJavaScriptを動かしてGoogle Homeを喋らせることができます。

以上の手順を一定間隔で繰り返す

以上のプログラムでは、一回天気情報を取得して降水を判定するだけです。あとはこれを定期的に実行して、天気を監視させます。これにはcronを使います。以下の記事を参考に、さきほどのpythonプログラムを10分毎に実行させるように設定しました。
make.bcde.jp
これですべて完了です。ゲリラ豪雨のときも通知してくれれば安心ですね。