foresta profonda

眠くない日はない。

Pythonで天気情報を取得する

最近、シェルスクリプトで作業効率化するのがマイブーム。
そんな折、Pythonシェルスクリプトよりもリッチ(?)なツールを作りたい願望が高まってきたので、本格的に勉強しようと思い立った。事始めとしてPythonで天気情報を取得するプログラムを書いてみた。

今回はlivedoorのWeather Hacks(気象データ配信サービス)から天気情報を取得する。
weather.livedoor.com

リクエストには地域を指定するだけで良い。
以下は神戸市の天気情報を取得する場合のリクエスト。
http://weather.livedoor.com/forecast/webservice/json/v1?city=280010

レスポンスはJSONデータで得られるので、目的のプロパティについて処理すれば良い。
forecastsプロパティには直近3日間の天気情報が含まれる。
というわけで、直近3日間の天気内容(晴れ、曇り、雨など)を表示するプログラムを書くと以下のようになった。

#!/usr/bin/env python
# coding: utf-8

import requests
import json

def get_weather():
	url = 'http://weather.livedoor.com/forecast/webservice/json/v1'
	payload = {'city': '280010'} # Kobe
	data = requests.get(url, params = payload).json()

	print(data['title'])
	for weather in data['forecasts']:
		print(weather['dateLabel'] + ':' + weather['telop'])

	return

if __name__ == '__main__':

	get_weather()

実行すると以下のようになる。

兵庫県 神戸 の天気
今日:曇り
明日:雨
明後日:雨のち晴

至極簡単。
これなら、ラズパイで毎朝SlackとかTwitterに天気を投稿するのも簡単にできる。

Gentoo LinuxでNFSマウントする

まず、cifs-utilsをインストールする必要がある。

# emerge net-fs/cifs-utils

これでマウントしようとすると以下のエラーになった。

# mount //xxx.xxx.xxx.xxx/public /mnt/nfs/
Password for hogehoge@//xxx.xxx.xxx.xxx/public: 
mount error: cifs filesystem not supported by the system
mount error(19): No such device
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

これはcifsをLinuxカーネルがサポートしていないから怒られているようだ。
以下を有効にしたカーネルでマウントするとうまくいった。

File systems  --->
   Network File Systems  --->
      CIFS support (advanced network filesystem, SMBFS successor)

Node-REDでPhilips Hueを操作する

Node-REDで組んだフロー上からPhilipsのHueを操作したくなったので試してみた。ノードは "node-red-contrib-node-hue" というのが公開されているのでコレを使う。

flows.nodered.org

インストールは以下のようにする。ローカルインストールの場合はグローバルインストールのオプション(-g)を消しておく。

$ npm install -g node-red-contrib-node-hue

インストール後、Node-REDを再起動すると、入力用のnode-hue-inと出力用のnode-hue-outが使えるようになる。パレット上に配置して設定画面を開くと、以下のようにHueのブリッジと操作したいランプを指定する。

f:id:rongon_xp:20170623222133p:plain

ブリッジのテキストボックス右にある編集アイコンを押すとIPアドレスAPIキー、あとポーリング時間を指定する画面になる。IPアドレスは自動で探してくれるようなので、ブリッジのボタンを押してAPIキーのテキストボックス横のボタンを押せばAPIキーが代入される。

次に元の画面に戻ってランプの設定を行う。ブリッジの設定直後だとランプが見つからないようだが、しばらく待つとブリッジに接続済みのランプを選べるようになるので、操作したいランプを選べば良い。

基本設定は以上。
ランプを消灯したい場合はfunctionノードで以下のようにすれば良い。

msg.payload =  {
    "on": false
};

return msg;

逆に点灯したいときは以下のようにする。

msg.payload =  {
    "on": true,
    "xy": [0.3393, 0.3316],
    "hsv": [201, 42, 100],
    "hex": "92D8FE",
    "color": "lightskyblue",
};

return msg;

これで他の機器と連携してHueを点けたり消したりできるようになった。

Linuxデバイスドライバ 第4版

オライリーLinuxデバイスドライバ 第4版が発売されるようだ。
ただし、洋書。

Amazon.co.jp: Linux Device Drivers: Jessica Mckellar, Alessandro Rubini, Jonathan Corbet, Greg Kroah-Hartman: 洋書

日本語訳されるのは当分先だろうな...

教団X

結構前になるけど「教団X」を読んだ。

https://www.amazon.co.jp/%E6%95%99%E5%9B%A3X-%E4%B8%AD%E6%9D%91-%E6%96%87%E5%89%87/dp/4087715906www.amazon.co.jp

全体的に小難しく理解するのに時間がかかるので、中盤くらいからストーリー展開に着いていけなくなった。。。

けど、仏教脳科学にもとづいて描かれている世界観はとても印象的で、これから自分の価値観として強烈に意識づけられた表現もあった。正確な表現ではないけど、以下の点はこれからも記憶に残りそう。

・原子の集合体である「私」は日々新しい原子で入れ替わっているのに、「私」というかたちで存在し続けている
・意識より先に体は動いている。意識は「私」というドラマを見ているだけ。

分厚すぎるのでなかなか読み返す気にはならないけど、どこかでまた読み直してみたい。

広告を非表示にする

Raspberry Pi Zero + IRKit + homebridgeで家電コントロール

かなり前に購入したIRKitだが、iPhoneにインストールした公式アプリでエアコンを操作するくらいにしか使っていなかった。
(これだったらエアコン付属のリモコンで十分...)

そんななか、siriで家電コントロールという記事をしばしば見かけ、ふと思い立って自分も試してみることにした。

HomeKitとhomebridge

家電コントロールにはHomeKitをエミュレートするhomebridgeというソフトウェアを使う。

HomeKitはAppleが提唱するスマート家電用のプラットフォームのこと。HomeKit対応機器はiPhoneiPad上のHomeアプリやsiriで操作できる。

そして、homebridgeはHomeKitをエミュレートするNode.jsサーバのこと。IRKitのほかにもPhilipsのスマート照明Hueなど、様々な家電と連携するためのプラグインが公開されているので、Raspberry Piなどにインストールして運用する例がよく見られる。

環境

今回はRaspberry Pi Zeroにhomebridgeをインストールする。

自宅の家電で赤外線で操作できるのはエアコン、オーディオアンプ、そしてお掃除ロボ。こやつらをiPhoneから制御できるようにする。

また、過去の記事にもあるようにRaspberry Pi Zeroには温度センサを接続中。homebridgeのプラグインには温度を取得するものもあり、これを使うとiPhoneiPadのHomeアプリに温度を表示することもできるようだ。面白そうなので併せて試してみる。

インストール手順

というわけでまずはAvahiをインストールする。

sudo apt-get install libavahi-compat-libdnssd-dev

つぎにNode.jsをインストールする。

wget https://nodejs.org/dist/v4.0.0/node-v4.0.0-linux-armv6l.tar.gz
tar -xvf node-v4.0.0-linux-armv6l.tar.gz
cd node-v4.0.0-linux-armv6l
sudo cp -R * /usr/local/

バージョンを確認。

node -v
npm -v

いよいよhomebridgeをインストールする。

sudo npm install -g homebridge

続いてIRKitと温度取得用のプラグインをインストールする。

sudo npm install -g homebridge-irkit
sudo npm install -g homebridge-temperature-file

これでインストールは完了。

設定

具体的にhomebridgeに何をさせるかは/home/pi/.homebridge/config.jsonに設定する。
config.jsonは以下のように設定した。

{
    "bridge": {
        "name": "Homebridge",
        "username": "XX:XX:XX:XX:XX:XX", ※MACアドレス
        "port": 51826,
        "pin": "XXX-XXX-XXX" ※PIN番号
    },

    "description": "my homebridge",

    "platforms": [],

    "accessories": [
        {
            "accessory": "IRKit",
            "name": "アンプ",
            "irkit_host": "192.168.1.200",
            "on_form": {"format":"raw","freq":38,"data":[17421,9061,968,1232,968,3341,1037,1150,1150,1150,1037,3341,1037,123$
            "off_form": {"format":"raw","freq":38,"data":[17421,9061,968,1232,968,3341,1037,1150,1150,1150,1037,3341,1037,12$
        },
        {
            "accessory": "IRKit",
            "name": "ルーロ",
            "irkit_host": "192.168.1.200",
            "on_form": {"format":"raw","freq":38,"data":[6881,3458,843,843,843,2626,843,843,843,935,787,935,787,935,787,935,$
            "off_form": {"format":"raw","freq":38,"data":[6881,3458,843,843,843,2626,843,843,843,935,787,935,787,935,787,935$
        },
        {
           "accessory": "TemperatureFile",
           "name": "温度",
           "description": "The temperature sensor in the livingroom",
           "file_path": "/var/log/temperature.dat"
        }
    ]

Nexus 5xを購入

超今更だけど、Nexus 5xを購入。

f:id:rongon_xp:20161005233741j:plain

Androidの書籍執筆中のため、動作確認用として。
Amazonで30,000円なり。注文して翌日には届いて、素晴らしい。

本当は、昨晩発表されたGoogle Pixelが欲しかったんだけど、
残念ながら日本での販売は現状予定されておらず。

まぁ、常用はiPhoneだし、執筆終わったら引き出し行きになる運命のものを、
10万円近くお金出すのもビミョーなので、これでよかったのかも。

広告を非表示にする