openHAB on Raspberry Pi: Appendix A

Raspberry Piの無線WiFi利用

今回はopenHABの動作とは本質的には関係ないのでおまけです。さらに手順が長くなるので2つに分けようと思います。

概略としてはこう分けようと思います。

  • WiFiドングルをデバイスとして認識
  • WPA2でアクセスポイントに接続

今回はWiFiドングルの認識をやります。

 

WiFiドングルをデバイスとして認識

Raspberry PiでWiFiを使っている人がいて、家にも1個使っていないのがあったので試そうと思いました。

デバイス認識などでとても参考になったのは以下のサイトです。

今回使ったのはWiFiドングルはこちらです。

 

(1) WiFiドングルを認識

制御のためのモジュールを入れたい。まずlsusbで現況確認します。

$ lsusb

    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.

    Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

    Bus 001 Device 004: ID 0789:0168 Logitec Corp. LAN-W150N/U2 Wireless LAN Adapter

    Bus 001 Device 005: ID 413c:2105 Dell Computer Corp. Model L100 Keyboard

ここで分かったこと

  • デバイスの名前がLAN-W150N/U2
  • IDが0789:0168

 

(2) rt2800usbをmodprobeする

(i) モジュールをつっこむ

lsmodの出力がうまくHTML化できてないけど、とりあえずmodprobeで適切なモジュールが入ったことを確認してください。

  $ sudo modprobe rt2800usb

  $ lsmod

     Module         Size Used by

     aes_generic     32497 0

     arc4             1387 2

     rt2800usb       12481 0

     rt2800lib       48137 1 rt2800usb

     crc_ccitt        1553 1 rt2800lib

     rt2x00usb       11851 1 rt2800usb

     rt2x00lib       43907 3 rt2x00usb,rt2800lib,rt2800usb

     mac80211       251866 3 rt2x00lib,rt2x00usb,rt2800lib

     cfg80211       180452 2 mac80211,rt2x00lib

     snd_bcm2835     21505 0

     snd_pcm         80650 1 snd_bcm2835

     snd_page_alloc   5347 1 snd_pcm

     snd_seq         59372 0

     snd_seq_device   6916 1 snd_seq

     snd_timer       21638 2 snd_seq,snd_pcm

     snd             57253 5 snd_timer,snd_seq_device,snd_seq,snd_pcm,snd_bcm2835

     evdev            9470 0

 

(ii) /etc/modules を編集

毎回起動時に読み込まれるようにします。私の設定ファイルはこんな感じです。

----

# /etc/modules: kernel modules to load at boot time.

#

# This file contains the names of kernel modules that should be loaded

# at boot time, one per line. Lines beginning with "#" are ignored.

# Parameters can be specified after the module name.

snd-bcm2835

rt2800usb

----

これで起動時には読み出されるはず。ここまではよかったのですが、再起動後に指定のモジュールは入るけどネットワークのデバイスがiwconfig, ifconfigでもまったく見えなくて途方にくれました。

これをなんとかするには/etc/modprobe.d/に設定を追加する必要があります。

 

(iii) /etc/modprobe.d/usb-lan.conf の作成

実はmodprobe.d以下はよくわかっておりません。でもusbのIDを見てデバイスを認識しているっぽいということで以下のようにしました。usb-lan.confの中身は以下のようになります

install rt2800usb /sbin/modprobe --ignore-install rt2800usb; /bin/echo "0789 0168" > /sys/bus/usb/drivers/rt2800usb/new_id

 

(iV) /etc/udev/rules.d/70-persistent-net.rules を修正?確認?

修正内容を失念したのですが、以下のようなものになってます。

----

# USB device 0x2019:0xed14 (usb) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:8E:DC:C9:9B", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

# USB device 0x:0x (rt2800usb) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:01:8e:dc:c9:9b", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1"

----

2行とも同じような内容に見えますね。1行消してしまってもいいかもしれません

 

(V) 再起動。

iwconfigには無事にwlan1が出現

lo no wireless extensions.

eth0 no wireless extensions.

wlan1 IEEE 802.11bgn

      ESSID:off/any Mode:Managed Frequency:2.452 GHz Access Point: Not-Associated

      Tx-Power=20 dBm

      Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on

 

まとめ

これでデバイスが認識できました。次回はwpa_supplicantとの合わせ技です

openHAB on Raspberry Pi: Vol.3

OpenHABを動かす

やっと目的のもののインストールを行います。とりあえずデモサーバーを動かしましょう。

 

1. 必要なものを揃える

公式のサイトにリリースがありますが、Nightly Build的なサーバーを私は利用しています。runtimeとdemoをまず用意しましょう。addonsは使ってみたいのですが、エラーが増えたりRaspberry Pi自体の動作が重たくなるような気がしたので別の機会に回します。

(1) 公式からダウンロード http://code.google.com/p/openhab/

  • openhab-runtime-1.1.0.zip
  • openhab-demo-1.1.0.zip

(2) Nightly Build をダウンロード https://openhab.ci.cloudbees.com/job/openHAB/

  • distribution-runtime-1.2.0.zip
  • distribution-demo-1.2.0.zip

Raspberry Pi がインターネットに接続できていれば、Raspberry Pi上で必要なアーカイブを引っ張ってきてもいいかもしれません。

 

2. 配置する

Raspberry Piのルートファイルシステムに置きます。サーバーアプリとしてどう置けばメンテナンスしやすいとかは今回は考えないことにします。

(1) /srv/openhab を作り配置します。

     # mkdir -p /srv/openhab

(2) アーカイブを解凍します

demoのアーカイブも上書きしてしまいます。

     # cd /srv/openhab

     # unzip <runtimeのアーカイブ>.zip

     # unzip <demoのアーカイブ>.zip

(3) 簡易な設定をします。と言ってもopenhab.cfgを作るだけです。

     # cd /srv/openhab

     # cp openhab_default.cfg openhab.cfg

(4) 動作を確認する

このopenHABのRuntimeサーバーは起動までに若干時間がかかります。

起動時の負荷は大きめですがすこし待てば安定します。

     # cd /srv/openhab

     # sudo ./start.sh

     ※ 確認だけなので実行権限等はあまり考えていません。

     ※ 起動時の負荷はかなり大きくて startx して使っていたりするとまったくGUIが動かないと感じることもあるかもしれません。

 

まとめ

とりあえずDemoサーバーを動かすことはできました。startx はしないほうがいいと思います。端末用にRasberry Piをもう1台買った方がいいはずです。

openHAB on Raspberry Pi : Vol.2

Oracle JVMの導入

前の記事で Oracle JVM のために Soft-float Debian “wheezy” をあえて選択しました。今回はOracle JVMを導入します。

以下のサイトがすごく参考になりますからご覧ください。

http://www.oracle.com/technetwork/articles/java/raspberrypi-1704896.html

 

1. Oracle から必要なものをとる。

Java Embeddedはこちらです。

http://www.oracle.com/technetwork/java/embedded/overview/getstarted/index.html

ここから以下のものを落とします。2つ用意したのはバグ・性能・openHABのアドオンの要求などがあったためです。

とにかく使ってみたい場合は片方で充分です。ただ "ARMv6/7 Linux - Headless EABI, VFP, SoftFP ABI, Little Endian" という種類のtarballを落としましょう。

 

2. Javaの設置

私は /opt 以下にtarballを解凍して、このよう配置しています。

  • /opt/ejre1.6.0_38 
  • /opt/ejre1.7.0_10

このままだとパスが面倒なのでupdate-alternativesで選びやすくしておきます。

# update-alternatives --install /usr/bin/java java /opt/ejre1.6.0_38/bin/java 1600

# update-alternatives --install /usr/bin/keytool keytool /opt/ejre1.6.0_38/bin/keytool 1600

# update-alternatives --install /usr/bin/java java /opt/ejre1.7.0_10/bin/java 1700

# update-alternatives --install /usr/bin/keytool keytool /opt/ejre1.7.0_10/bin/keytool 1700

これでひとまずOK

$ update-alternatives --display java

と実行するとこんな出力がでます。

    java - manual mode

    /opt/ejre1.6.0_38/bin/java - priority 1600

    Current 'best' version is '/opt/ejre1.7.0_10/bin/java'.

私は諸般の事情で1.6の方を使用しています。

 

3. Javaの動作確認

これを実行します

$ java -version

こんな感じになります。

    java version "1.6.0_38"

    Java SE Embedded Runtime Environment (build 1.6.0_38-b05, headless)

    Java HotSpot(TM) Embedded Client VM (build 20.13-b02, mixed mode)

まとめ

難しい点はなかったと思います。

ダウンロードしてくるJVMを間違えなければ大丈夫です

openHAB on Raspberry Pi : Vol.1

 Section 1: Raspberry PiでLinuxが動くようにする

特に難しいことはないです。ただ次のステップでOracle JVMを使いたいことを忘れずに。

ここに書いてあることは以下のサイトをリライトしているに過ぎません。

 

1. Raspberry Piの公式にLinuxをダウンロード

Oracle JVMを使うときは、性能はあまり出ないけどSoft-float Debian “wheezy”を使いましょうということです。

いちおう、以下のコマンドでファイルがぶっ壊れていないかを確認します。

# sha1sum 2012-08-08-wheezy-armel.zip

この出力を上記のウェブサイトのハッシュと確認してください。問題ないような解凍します。

# unzip 2012-08-08-wheezy-armel.zip

得られるのはddイメージです。2012-08-08-wheezy-armel.img だと思います。

 

2.SDカードを用意

Class4の4GBがおすすめらしいです。インストールに成功して最初のLinux起動時に「ルートファイルシステムが入っているパーティションを広げる処理をするか?」と聞かれたりもします。

# df -h

を実行して何がどこマウントされちゃってるのかを確認します。私の場合は/dev/sdb〜でしたので、以降そのように仮定します。もしもカードリーダーに挿した段階でmountされていたらumountしてください。

 

3.イメージの焼き込み

こんなコマンドを実行し待ちます。ただ起動するSDカードはこれでできます。

 # dd bs=4M if=~/2012-08-08-wheezy-armel.img of=/dev/sdb

最近は4GB以上のSDカードも増えています。その場合はrootfsのパーティションをgpartedなどで拡げてください。以下のURLが参考になるはずです。

さらに次のOracle JVMをインストールする時にも参考にします。


4.まとめ

今回の作業は特に問題ないと思います。ただ最後に少しだけふれた、rootfsの入ったパーティションを拡げるとLinuxが起動しなくなることもあるので、そうしたらやり直しましょう。

気が向いたら起動する様子を動画でアップしたいと思います。

openHAB on Raspberry Pi : Preface

端緒

以前から気になっていたRaspberry Piを購入しました。

そして以前から気になっていたopenHABをこいつの上で動かそうと思います。

 

戦略

次のような感じでいきます。

  • Section 1. Raspberry PiでLinuxが動くようにする
  • Section 2. Section 1.で動いたLinuxOracleJavaが動くようにする。
  • Section 3. Section 1,2.のもとでopenHABが動くようにする。
  • Appendix A. Section 1.で動いたLinuxでRaspberry PiでWiFiを使う
  • Appendix B. openHABで制御される側を考える・作る
  • Appendix C. 次のことを考える

今回のまとめ

とりあえずここまでは忘れないうちにまとめる。今週中かなぁ。

詳しいことは次回から