FHEMは、Perlによるホームオートメーション用サーバーです。Armadillo-400シリーズ上でFHEMを動作させて、EnOceanセンサから取得した情報をビジュアル化する手順を紹介します。
第1章 はじめに
第2章 動作環境の構築
- 2.1. 準備
- 2.2. カーネルイメージの準備
- 2.3. ブートローダの起動デバイスの設定
- 2.4. romfs の準備 ケース1 : Debian GNU/Linux の場合
- 2.5. romfs の準備 ケース2 : Atmark Dist の場合-バイナリパッケージを使う
- 2.6. romfs の準備 ケース3 : Atmark Dist の場合-ソースコードを使う
第3章 FHEMの設定
第1章 はじめに
本HowToでは、Armadillo-400 シリーズ上でホームオートメーション用サーバーを動作させて、センサから取得した情報をビジュアル化する手順をご紹介します。実際の手順例は Armadillo-420 を使います。センサは電池不要の EnOcean 製のセンサ(温度計やドア開閉センサ etc.) を使います。ホームオートメーション サーバーには FHEM を使います。
1.1. 対象となる読者
本HowToの対象となる読者は、Linux の基本的な使い方を理解している方を想定しています。また、 開発環境に Windows を利用される場合は、Windows の基本的な使い方も理解していることを前提としています。
第2章 動作環境の構築
本章では、ホームオートメーション サーバー FHEM を動作させるために必要な環境を構築する手順をご紹介します。
第2.2章では、EnOcean製受信用USBモジュールで使用されるドライバモジュールを有効にしたカーネルイメージを作成します。第2.4章~第2.6章は、romfs の作成手順を3通りご紹介します。第2.4章ではオプション OS Debian GNU/Linux での作成手順を、第2.5章では標準 OS Atmark Dist に バイナリパッケージを使って準備する手順を、第2.6章ではソースコードからクロスビルドして準備する手順をご紹介します。FHEMに必要なパッケージ(あるいはコマンド)は、openssl や perl、perlモジュール(UART, WWW, SSL関連)、NTP サーバー、lsusb コマンド が必要ですので、それらを準備するための手順となります。番号が若い章から手順が容易なものとなっております。いずれかを選択して実行していただければ準備ができます。
2.1. 準備
作業手順に入る前に、必要なものを準備します。
2.1.1. 必要なもの
必要な機材は以下になります。
表2.1 必要な機材
機材名 | 数量 | 備考 |
---|---|---|
Armadillo-400シリーズ | 1台 | 本手順例では、Armadillo-420 を使用しました。 |
USBメモリ | 1個 | 2GB 以上 |
開発用PC | 1台 | 本手順例では、Windows 7 を使用しました。 |
Armadillo-400シリーズ 開発用DVD-ROM | 1枚 | 本HowTo作成時の最新バージョン v20140131[※1] を使用しました。 |
EnOcean製 受信用USBモジュール |
1台 | 本手順例では、USB300C を使用しました。 |
EnOcean製 スイッチ/ センサ/ コンタクト |
1台以上 | スイッチ、温度センサ、ドアの開閉センサなど |
※1 アットマークテクノ社ホームページからDVDイメージをダウンロードできます。Armadillo-420であれば、Armadillo-420のドキュメント・ダウンロードページの開発セット添付DVDイメージ(ISOファイル)の項目にあるArmadillo-400シリーズ 開発用DVD-ROMです。なお、必要なデータを個別にダウンロードすることもできます。
2.1.2. 開発環境 ATDE3 を起動
本手順では、開発環境にATDE3を使用します。『ATDEインストールガイド』の 第2章「2. Windows 上にATDE を構築する」の通りです。
- 開発PCにVMware(Workstation、Playerなど)がインストールされていない場合は、インストールする。
- 開発PCに atde3-20
xxxxxx
.zip (本手順では、DVD/atde/vmware/atde3-20120709.zip) を展開してコピーします。 - VMware Player を起動します。
- [仮想マシンを開く] をクリックして、展開したatde3-20
xxxxxx
/atde3.vmx (本手順では、atde3-20120709/atde3.vmx) を指定します。 - [再生] をクリックします。
『ATDEインストールガイド』は Version 3.0.2 2011/10/21 p.8~p.13 を参照してください。
2.1.3. ソースコードを展開
開発環境に Linux カーネルソースコードと Atmark Dist ソースコードを展開します。『Armadillo-400 シリーズソフトウェアマニュアル』の 第7章「ビルド」の手順も参照してください。
2.1.3.1. Atmark Dist ソースコードの展開
DVD-ROMから Atmark Dist のソースコードを ATDE3 に展開してコピーします。そして、展開したファイルをバージョンに依存しない atmark-dist
という名前でシンボリックリンクを作成します。下図は、実際の実行例です。
[ATDE ~]$
cd ~
[ATDE ~]$
tar -zxf /media/A400_20140131/source/dist/atmark-dist-20131122.tar.gz
[ATDE ~]$
ln -s atmark-dist-20131122 atmark-dist
[ATDE ~]$
ls -l
drwxr-xr-x 2 atmark atmark 4096 2014-02-10 23:58 Desktop lrwxrwxrwx 1 atmark atmark 20 2014-02-11 01:37 atmark-dist -> atmark-dist-20131122 drwxr-xr-x 14 atmark atmark 4096 2013-11-12 15:18 atmark-dist-20131122
図2.1 Atmark Dist ソースコードの展開
2.1.3.2. Linux カーネルソースコードの展開
DVD-ROM から Linux カーネル のソースコードを ATDE3 に展開してコピーします。atmark-dist
ディレクトリ内に、展開したフォルダ名をバージョンに依存しない linux-2.6.x
という名前でシンボリックリンクを作成します。下図は、実際の実行例です。
[ATDE ~]$
cd ~
[ATDE ~]$
tar -zxf /media/A400_20140131/source/kernel/linux-2.6.26-at18.tar.gz
[ATDE ~]$
ls
Desktop atmark-dist atmark-dist-20131122 linux-2.6.26-at[ATDE ~]$
cd atmark-dist
[ATDE ~/atmark-dist]$
ln -s ../linux-2.6.26-at linux-2.6.x
[ATDE ~/atmark-dist]$
ls -l linux-*
lrwxrwxrwx 1 atmark atmark 18 2014-02-11 02:11 linux-2.6.x -> ../linux-2.6.26-at
図2.2 Linux カーネルソースコードの展開
2.1.3.3. デフォルトコンフィギュレーションの適用
デフォルトコンフィギュレーションの設定手順は以下の通りです。
1. デフォルトの設定でコンフィギュレーションを行います。コンフィギュレーションを開始するには、下図のように make config
を実行します。
[ATDE ~/atmark-dist]$
make config
図2.3 Atmark Dist デフォルトコンフィギュレーションの開始
2. 次に、ベンダー名を尋ねられます。 AtmarkTechno
を指定します。
* Vendor/Product Selection
*
*
* Select the Vendor you wish to target
*
Vendor (3com, ADI, Akizuki, Apple, Arcturus, Arnewsh, AtmarkTechno, Atmel, Avnet, Cirrus,
…途中省略…
TI, TeleIP, Triscend, Via, Weiss, Xilinx, senTec) [SnapGear] (NEW) AtmarkTechno
defined CONFIG_DEFAULTS_ATMARKTECHNO
図2.4 Atmark Dist デフォルトコンフィギュレーション1 : ベンダー名の指定
3. 次に、プロダクト名を尋ねられます。Armadillo-420
を指定します。
*
* Select the Product you wish to target
*
AtmarkTechno Products (Armadillo-210.Base, Armadillo-210.Recover, Armadillo-220.
Base, Armadillo-220.Recover, Armadillo-230.Base, Armadillo-230.Recover, Armadill
o-240.Base, Armadillo-240.Recover, Armadillo-300, Armadillo-420, Armadillo-420.W
LAN-AWL12, Armadillo-420.WLAN-AWL13, Armadillo-440, Armadillo-460, Armadillo-500
, Armadillo-500-FX.base, Armadillo-500-FX.dev, Armadillo-810, Armadillo-840, Arm
adillo-9, Armadillo-9.PCMCIA, SUZAKU-V.SZ310, SUZAKU-V.SZ310-SID, SUZAKU-V.SZ310
-SIL, SUZAKU-V.SZ310-SIL-GPIO, SUZAKU-V.SZ410, SUZAKU-V.SZ410-SID, SUZAKU-V.SZ41
0-SIL, SUZAKU-V.SZ410-SIL-GPIO, SUZAKU-V.SZ410-SIV) [Armadillo-210.Base] (NEW) Armadillo-420
defined CONFIG_DEFAULTS_ATMARKTECHNO_ARMADILLO_420
図2.5 Atmark Dist デフォルトコンフィギュレーション2 : プロダクト名の指定
4. 続いて、ビルド環境を尋ねられます。default
を指定します。
*
* Kernel/Library/Defaults Selection
*
*
* Kernel is linux-2.6.x
*
Cross-dev (default, arm-vfp, arm, armel, armhf, armnommu, common, h8300, host, i
386, i960, m68knommu, microblaze, mips, powerpc, sh) [default] (NEW) default
defined CONFIG_DEFAULTS_CROSSDEV_DEFAULT
図2.6 Atmark Dist デフォルトコンフィギュレーション3 : ビルド環境の指定
5. ビルドする Libc を尋ねられます。None
を指定します。これは『Armadillo-400 シリーズ ソフトウェアマニュアル』第7.1.2章「デフォルトコンフィギュレーションの適用」Armadillo-400 シリーズ では None
を選択するよう記載があったための設定です。
Libc Version (None, glibc, uC-libc, uClibc) [None] (NEW) None
defined CONFIG_DEFAULTS_LIBC_NONE
図2.7 Atmark Dist デフォルトコンフィギュレーション4 : ビルドする libc の指定
6. 次に、全ての設定をデフォルトの設定にするかどうか尋ねられます。ここでは肯定を示す y
を指定します。
*
* Kernel/Library/Defaults Selection
*
*
* Kernel is linux-2.6.x
*
Cross-dev (default, arm-vfp, arm, armel, armhf, armnommu, common, h8300, host, i
386, i960, m68knommu, microblaze, mips, powerpc, sh) [default] (NEW) default
defined CONFIG_DEFAULTS_CROSSDEV_DEFAULT
Libc Version (None, glibc, uC-libc, uClibc) [None] (NEW) None
defined CONFIG_DEFAULTS_LIBC_NONE
Default all settings (lose changes) (CONFIG_DEFAULTS_OVERRIDE) [N/y/?] (NEW) y
図2.8 Atmark Dist デフォルトコンフィギュレーション5 : 全てをデフォルトに指定
7. 最後に、残りの3項目に否定を示す n
を指定します。
Customize Kernel Settings (CONFIG_DEFAULTS_KERNEL) [N/y/?]n
Customize Vendor/User Settings (CONFIG_DEFAULTS_VENDOR) [N/y/?]n
Update Default Vendor Settings (CONFIG_DEFAULTS_VENDOR_UPDATE) [N/y/?]n
図2.9 Atmark Dist デフォルトコンフィギュレーション6 : 最後の3項目の指定
8. ここでコンフィギュレーションが行われます。終了するまで待ちます。
2.2. カーネルイメージの準備
本章では カーネルイメージを準備します。デフォルトのカーネルイメージから1点変更が必要です。それは、EnOcean受信用USBモジュールが使用するドライバモジュールがデフォルトの設定では無効になっているため、有効にする必要があります。
2.2.1. menuconfig : USB FTDI Single Port Serial Driver の有効化
1. atmark-dist
ディレクトリで下図のように make menuconfig
を実行します。
[ATDE ~]$
cd ~
[ATDE ~]$
cd atmark-dist
[ATDE ~/atmark-dist]$
make menuconfig
図2.10 カーネルイメージのコンフィギュレーションの開始
2. まずは、Linux カーネルコンフィギュレーションを開始させるために、Kernel/Library/Defaults Selection
と Select
を選択してから Enter キーを押します。
図2.11 Atmark dist コンフィギュレーション1
3. 次に、Customize Kernel Settings
を選択して SPACE キー を押して *
を付けます。その後に、Exit
を選択して Enter キーを押します。
図2.12 Atmark dist コンフィギュレーション2
4. さらに、次の画面でも Exit
を選択して Enter キーを押すと、次の画面が表示されます。 Yes
を選択して Enter キーを押します。
図2.13 Atmark dist コンフィギュレーション3
5. いったん端末画面に戻った後、下のような設定画面が表示されます。ここからが Linux カーネルのコンフィグレーションとなります。まず、Device Drivers --->
と Select
を選択して Enter キーを押します。
図2.14 Linux カーネルコンフィギュレーション1
6. 次に、[*] USB support --->
(*
が付いていること) と Select
を選択して Enter キーを押します。
図2.15 Linux カーネルコンフィギュレーション2
7. さらに、<*> USB Serial Converter support --->
(*
が付いていること) と Select
を選択して Enter キーを押します。
図2.16 Linux カーネルコンフィギュレーション3
8. さらに、<*> USB FTDI Single Port Serial Driver
(*
が付いていること) と Exit
を選択して Enter キーを押します。
ここで有効にしたドライバモジュールが EnOcean製受信用USBモジュールで使用されます。
図2.17 Linux カーネルコンフィギュレーション4
9. その後、Exit
を 選択して Enter キーを押すを 3 回繰り返すと、下図のように新しいカーネルコンフィギュレーションを保存するかを尋ねられます。Yes
を選択して Enter キーを押します。
図2.18 Linux カーネルコンフィギュレーション5
10. ここで Linux カーネルのコンフィギュレーションが行われます。終了するまで待ちます。
2.2.2. ビルド
Atmark Dist 一式をビルドします。一式をビルドするには atmark-dist ディレクトリ内で下図のように、make
を実行します。このビルドで Linux カーネルソースコードも一緒にビルドされます。ビルドが終了すると、下図のように (atmark-dist/images) にカーネルイメージと romfs イメージが生成されます。なお、ここで生成された Atmark Dist の romfs (ルートファイルシステム) は本HowToでは使用しません。後ほど、FHEM の動作環境に必要なバイナリを追加したものを使用します。
[ATDE ~/atmark-dist]$
make
[ATDE ~/atmark-dist]$
ls images/
linux.bin linux.bin.gz romfs.img romfs.img.gz
2.2.3. ロード場所に設置
本手順ではカーネルイメージは ATDE3 の tftp サーバーから Armadillo に渡します。/var/lib/tftpboot/
に linux.bin
を圧縮したイメージである linux.bin.gz
を置きます。
『Armadillo-400 シリーズ ソフトウェアマニュアル』第8.1章 「TFTP サーバーに配置する」を参照してください。
[ATDE ~]$
sudo cp -v images/linux.bin.gz /var/lib/tftpboot/
[sudo] password for atmark: `images/linux.bin.gz' -> `/var/lib/tftpboot/linux.bin.gz'
図2.20 カーネルイメージをロード場所に設置
これで、カーネルイメージの準備は終了です。
2.3. ブートローダの起動デバイスの設定
Armadillo を保守モードで起動した後、ブートローダー Hermit-At にカーネルイメージとルートファイルシステムに対して、それぞれにロードする場所を指定します。
この下図はカーネルイメージをロードする場所を指定します。TFTP ブートを指定して、IP アドレスは サーバー (ATDE3) が 192.168.10.103 で、クライアント (Armadillo) が 192.168.10.172 の場合の実行例です。
hermit>
setbootdevice tftp 192.168.10.172 192.168.10.103 --kernel=linux.bin.gz
図2.21 ブートデバイスの指定
次に、下図のように romfs (ルートファイルシステム) のロード先に USBストレージ (/dev/sda1
) を指定します。
hermit>
setenv console=ttymxc1,115200 root=/dev/sda1 noinitrd rootwait
図2.22 romfs (ルートファイルシステム) の指定
2.4. romfs の準備 ケース1 : Debian GNU/Linux の場合
Debian GNU/Linux では パッケージ管理コマンドを使って必要なパッケージをインストールすれば FHEM は動作します。本章では、その手順をご紹介します。なお、romfs 作成の手順は『Armadillo-400 シリーズソフトウェアマニュアル』の 第8.2章「ストレージに配置する」と同様です。
2.4.1. オプション OS Debian GNU/Linux の起動
起動する手順は以下になります。
1. ここでは、パーティション1つで ext3 にフォーマットされたUSBメモリに、下図のようにコマンドを実行して Debian GNU/Linux 用の romfs を展開して書き込みます。
[ATDE ~]$
sudo -i
[sudo] password for atmark:[ATDE ~]#
[ATDE ~]#
for N in 1 2 3 4 5 a4x0; do gzip -cd /media/A400_20140131/debian/debian-lenny-armel-${N}.tgz | (cd /media/disk/; tar xf -); done;
図2.23 Debian GNU/Linux romfs を USB メモリに書き込み
2. 次を確認してから、電源を投入します。そうすると、Debian GNU/Linux で Armadillo が起動します。
- JP2がオープンになっていること。
- ACアダプタが接続されていること。
- USBには本章で準備したUSBメモリのみ挿入されていること。
- ATDE3とネットワーク接続できること。
- インターネットに接続できること。
- シリアルが作業用PCと接続できていること。
3. 下のようにログイン画面が表示されたら、root
を入力します。
Debian GNU/Linux 5.0 debian ttymxc1
debian login: root
図2.24 Debian GNU/Linux ログイン
これで、Debian GNU/Linux が起動しました。
2.4.2. パッケージ管理ツールのデータベースの更新
まずはじめに、apt-get update
を実行して、パッケージ管理ツール apt-get
のデータベースを更新します。
[darmadillo /]#
apt-get update
図2.25 パッケージ管理ツールのデータベースの更新
2.4.3. FHEM に必要なパッケージのインストール
必要なパッケージをインストールします。下の画面中の、--reinstall
は再インストールを意味します。パッケージは既にDebian GNU/Linux にインストール済みですが、次章でここでダウンロードしたパッケージを使うため、わざとを指定しています。次章を実行しない場合は、再インストールを指定しているコマンドは実行する必要ありません。
[darmadillo /]#
apt-get -y --reinstall install perl-base
[darmadillo /]#
apt-get -y --reinstall install perl
[darmadillo /]#
apt-get -y install libio-socket-ssl-perl
[darmadillo /]#
apt-get -y install libdevice-serialport-perl
[darmadillo /]#
apt-get -y install libwww-perl
[darmadillo /]#
apt-get -y --reinstall install libusb-0.1-4
[darmadillo /]#
apt-get -y install openssl
[darmadillo /]#
apt-get -y install ntp
[darmadillo /]#
apt-get -y install usbutils
図2.26 必要なパッケージをインストール
2.4.4. FHEM パッケージのダウンロードとインストール
FHEM公式サイトから最新版の deb パッケージをダウンロードして、インストールします。下図の実行時の最新版は ver.5.5 でした。ダウンロードには wget
コマンドを使い、インストールには dpkg -i
コマンドを使います。
[darmadillo /]#
wget http://fhem.de/fhem-5.5.deb
[darmadillo /]#
dpkg -i fhem-5.5.deb
図2.27 FHEM パッケージのダウンロードとインストール
上記の手順で終了です。Debian GNU/Linux の場合はこの手順だけで、FHEM が起動します。再起動後も自動で起動します。
2.5. romfs の準備 ケース2 : Atmark Dist の場合-バイナリパッケージを使う
本章では、前章でダウンロードした deb パッケージのバイナリを使用して標準 OS Atmark Dist 上で FHEM を動作させる手順を紹介します。なお、deb パッケージの取得方法はインターネットからダウンロードすることも可能ですが、今回はより確実な方法として前章の手順でダウンロードされた deb パッケージを使用することにします。
2.5.1. バイナリパッケージの展開
前章でダウンロードされた deb パッケージを展開します。手順は次の通りです。
1. Debian GNU/Linux romfs が書かれている USB メモリを ATDE3 の deb-packages
ディレクトリにコピーします。
[ATDE ~]$
cd ~
[ATDE ~]$
mkdir -p deb-packages/archives
[ATDE ~]$
cp -a /media/disk/var/cache/apt/archives/*.deb deb-packages/archives
[ATDE ~]$
ls deb-packages/archives
libcap1_1%3a1.10-14_armel.deb libcompress-raw-zlib-perl_2.012-1lenny1_armel.deb libcompress-zlib-perl_2.012-1_all.deb libdevice-serialport-perl_1.04-2+b1_armel.deb libedit2_2.11~20080614-1_armel.deb libfont-afm-perl_1.20-1_all.deb libhtml-format-perl_2.04-2_all.deb libhtml-parser-perl_3.56-1+lenny1_armel.deb libhtml-tagset-perl_3.20-2_all.deb libhtml-tree-perl_3.23-1_all.deb libidn11_1.8+20080606-1_armel.deb libio-compress-base-perl_2.012-1_all.deb libio-compress-zlib-perl_2.012-1_all.deb libio-socket-ssl-perl_1.16-1+lenny1_all.deb libmailtools-perl_2.03-1_all.deb libnet-libidn-perl_0.07-1+b1_armel.deb libnet-ssleay-perl_1.35-1_armel.deb libtimedate-perl_1.1600-9_all.deb liburi-perl_1.35.dfsg.1-1_all.deb libusb-0.1-4_2%3a0.1.12-13_armel.deb libwww-perl_5.813-1+lenny2_all.deb ntp_1%3a4.2.4p4+dfsg-8lenny3_armel.deb perl-base_5.10.0-19lenny5_armel.deb perl-modules_5.10.0-19lenny5_all.deb perl_5.10.0-19lenny5_armel.deb usbutils_0.73-10lenny2_armel.deb[ATDE ~]$
図2.28 Debian GNU/Linux romfs から deb パッケージを取得
2. 次に、dpkg --extract
コマンドを使用して指定したディレクトリ ~/deb-packages/romfs
にパッケージ内のインストールデータを展開し、tar
コマンドで1つにまとめておきます。
[ATDE ~]$
cd ~
[ATDE ~]$
cd deb-packages/
[ATDE ~/deb-packages]$
mkdir romfs
[ATDE ~/deb-packages]$
cd archives/
[ATDE ~/deb-packages/archives]$
for FILE in *.deb; do dpkg --extract "$FILE" ../romfs; done
[ATDE ~/deb-packages/archives]$
cd ../romfs/
[ATDE ~/deb-packages/romfs]$
tar -zcf deb-romfs.tgz *
[ATDE ~/deb-packages/romfs]$
ls
deb-romfs.tgz etc lib usr var
図2.29 deb パッケージの展開
これで、バイナリパッケージの展開は終了です。
2.5.2. romfs を作成
romfs を作成します。カーネルイメージのコンフィギュレーションで生成された romfs の中に展開したバイナリパッケージを追加します。
[ATDE ~]$
cd ~
[ATDE ~]$
cd atmark-dist/romfs/
[ATDE ~/atmark-dist/romfs]$
tar --keep-old-files -zxf /home/atmark/deb-packages/romfs/deb-romfs.tgz
[ATDE ~/atmark-dist/romfs]$
cd ../
[ATDE ~/atmark-dist/]$
make image
図2.30 Atmark Dist バイナリを romfs に 展開
romfs 内の設定ファイル password
に設定を追加します。
[ATDE ~]$
cd ~
[ATDE ~]$
cd atmark-dist/romfs/
[ATDE ~/atmark-dist/romfs]$
echo "ntp:x:101:103::/home/ntp:/bin/false" >> etc/passwd
図2.31 Atmark Dist バイナリ /etc/passwd のファイルに設定を追加
romfs 内の設定ファイル fstab
に記載されている ext2
を ext3
に変更します。
[ATDE ~]$
cd ~
[ATDE ~]$
cd atmark-dist/romfs/
[ATDE ~/atmark-dist/romfs]$
cat etc/fstab
← 変更前。 /dev/ram0 / ext2 defaults 0 1 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 sysfs /sys sysfs defaults 0 0[ATDE ~/atmark-dist/romfs]$
vi /etc/fstab
← ここで書き換えする。[ATDE ~/atmark-dist/romfs]$
cat etc/fstab
← 変更後。 /dev/ram0 / ext3 defaults 0 1 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 sysfs /sys sysfs defaults 0 0
図2.32 Atmark Dist バイナリ /etc/fstab のファイルを変更
make image
コマンドを使って romfs イメージを作成します。
[ATDE ~]$
cd ~
[ATDE ~]$
cd atmark-dist/
[ATDE ~/atmark-dist/]$
make image
図2.33 Atmark Dist バイナリ romfs を作成
2.5.3. USBメモリへの romfs の展開
romfs を USB に展開してコピーします。ここで使用する USB メモリは、Debian GNU/Linux の時と同様にパーティーションが1つで、ext3 ファイルシステムでフォーマットされているものを使用します。
[ATDE ~]$
sudo -i
[sudo] password for atmark:[ATDE ~]#
mount -o loop /home/atmark/atmark-dist/images/romfs.img /mnt/
[ATDE ~]#
ls /mnt/
bin dev home linuxrc media opt root sys usr boot etc lib lost+found mnt proc sbin tmp var[ATDE /mnt]#
(cd /mnt/; tar cf - *) | (cd /media/disk; tar xf -)
[ATDE /]#
図2.34 Atmark Dist バイナリ romfs を USB メモリに展開
2.5.4. Atmark Dist の起動
Debian GNU/Linux の時と同様ですが、以下のことを確認してから電源を投入します。
1. 次を確認してから、電源を投入します。
- JP2がオープンになっていること。
- ACアダプタが接続されていること。
- USBには本章で準備したUSBメモリのみ挿入されていること。
- ATDE3とネットワーク接続できること。
- インターネットに接続できること。
- シリアルが作業用PCと接続できていること。
2. 下のようにログイン画面が表示されたら、ユーザー名とパスワードにそれぞれ root
を入力します。
atmark-dist v1.32.2 (AtmarkTechno/Armadillo-420) Linux 2.6.26-at18 [armv5tejl arch] armadillo420-0 login:root
Password:[armadillo /]#
図2.35 Atmark Dist バイナリ Atmark Dist に ログイン
3. NTPサーバーを起動します。実行コマンドは、Debian GNU/Linux で実行されていたコマンドです。
[armadillo /]#
ntpd -p /var/run/ntpd.pid -u 101:103 -g
図2.36 Atmark Dist NTPサーバーを起動
4. FHEMを起動します。
[armadillo ~]$
wget http://fhem.de/fhem-5.5.tar.gz
[armadillo ~]$
tar -zxf fhem-5.5.tar.gz && cd fhem-5.5
[armadillo ~/fhem-5.5]$
perl fhem.pl fhem.cfg
図2.37 Atmark Dist バイナリ FHEMを起動
2.6. romfs の準備 ケース3 : Atmark Dist の場合-ソースコードを使う
本章は、ソースコードをクロスビルドして FHEM が動作する環境を構築します。FHEM を動作させるためにはいくつかのパッケージが必要です。ここで必要なパッケージ全てをクロスビルドします。
2.6.1. 各ソースコードパッケージのクロスビルド
パッケージ別に章分けをして、ビルド手順を記載します。
2.6.1.1. openssl のビルド
下図の手順でopensslをビルドします。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
mkdir openssl-cross && cd openssl-cross
[ATDE3 ~]$
mkdir romfs
[ATDE3 ~/openssl-cross]$
wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz
[ATDE3 ~/openssl-cross]$
tar -zxf openssl-1.0.1f.tar.gz && cd openssl-1.0.1f/
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
export CROSS_COMPILE=arm-linux-gnueabi-
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
export ARCH=arm
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
ROMFS_PATH="$HOME/openssl-cross/romfs"
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
export SYSROOT="$ROMFS_PATH"
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
./Configure --prefix=$ROMFS_PATH/usr --openssldir=$ROMFS_PATH/etc/ssl zlib no-asm os/compiler:gcc
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
make
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
make install
[ATDE3 ~/openssl-cross/openssl-1.0.1f]$
cd ../romfs
[ATDE3 ~/openssl-cross/romfs]$
tar -zcf openssl-romfs.tgz *
図2.38 openssl
2.6.1.2. NTPサーバーのビルド
下図の手順でNTPサーバーをビルドします。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
mkdir ntpd-cross && cd ntpd-cross
[ATDE3 ~]$
mkdir romfs
[ATDE3 ~/ntpd-cross]$
wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p5.tar.gz
[ATDE3 ~/ntpd-cross]$
tar -zxf ntp-4.2.6p5.tar.gz && cd ntp-4.2.6p5
[ATDE3 ~/ntpd-cross/ntp-4.2.6p5]$
./configure --host=arm-linux-gnueabi --build=i486-linux-gnu --prefix=/home/atmark/ntpd-cross/romfs CC=arm-linux-gnueabi-gcc CFLAGS="-Wall -Wextra" CPP="arm-linux-gnueabi-gcc -E"
[ATDE3 ~/ntpd-cross/ntp-4.2.6p5]$
make
[ATDE3 ~/ntpd-cross/ntp-4.2.6p5]$
make install
[ATDE3 ~/ntpd-cross/ntp-4.2.6p5]$
cd ../romfs
[ATDE3 ~/ntpd-cross/romfs]$
tar -zcf ntpd-romfs.tgz *
図2.39 NTPサーバー
2.6.1.3. usbutils をビルド
下図の手順で usbutils をビルドします。FHEMでは lsusb
コマンドが必要なため準備します。
まず、libusb をビルドします。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
export CC=arm-linux-gnueabi-gcc
[ATDE3 ~]$
mkdir usbutils-cross && cd usbutils-cross
[ATDE3 ~/usbutils-cross]$
mkdir romfs
[ATDE3 ~/usbutils-cross]$
wget http://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.9/libusb-1.0.9.tar.bz2
[ATDE3 ~/usbutils-cross]$
tar -xjf libusb-1.0.9.tar.bz2 && cd libusb-1.0.9
[ATDE3 ~/usbutils-cross/libusb-1.0.9]$
./configure --host=arm-linux-gnueabi --build=i486-linux-gnu --prefix="$HOME"/usbutils-cross/romfs
[ATDE3 ~/usbutils-cross/libusb-1.0.9]$
make
[ATDE3 ~/usbutils-cross/libusb-1.0.9]$
make install
図2.40 libusb のビルド
次に、usbutils をビルドします。ここでは Makefile
を一部編集するため、まずは ./configure
までを行います。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
cd usbutils-cross
[ATDE3 ~/usbutils-cross]$
wget https://www.kernel.org/pub/linux/utils/usb/usbutils/usbutils-007.tar.gz
[ATDE3 ~/usbutils-cross]$
tar -zxf usbutils-007.tar.gz && cd usbutils-007
[ATDE3 ~/usbutils-cross/usbutils-007]$
export PKG_CONFIG_PATH=$HOME/usbutils-cross/romfs/lib/pkgconfig
[ATDE3 ~/usbutils-cross/usbutils-007]$
./configure --host=arm-linux-gnueabi --build=i486-linux-gnu --prefix=/home/atmark/usbutils-cross/romfs/usr
図2.41 usbutils Makefile の生成
Makefile
を下図のように、デファイン DATADIR
に指定するパスを $(datadir)
から /usr/share
に変更します。
[ATDE3 ~/usbutils-cross/usbutils-007]$
vi Makefile
図2.42 usbutils Makefile の編集
Makefile の 318行目 【変更前】 -DDATADIR=\\\\"$(datadir)\\\\" $(am__append_1) 【変更前】 -DDATADIR=\\\\"/usr/share\\\\" $(am__append_1)
図2.43 usbutils Makefile の編集内容
make
コマンドでビルドして、romfs へ追加するデータを tar
コマンドでひとつにまとめておきます。
[ATDE3 ~/usbutils-cross/usbutils-007]$
make
[ATDE3 ~/usbutils-cross/usbutils-007]$
make install
[ATDE3 ~/usbutils-cross/usbutils-007]$
cd ../romfs
[ATDE3 ~/usbutils-cross/romfs]$
tar -zcf usbutils-romfs.tgz *
図2.44 usbutils のビルド
2.6.1.4. perl と perl モジュールのビルド
下図の手順でperl と perl モジュールのビルドします。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
mkdir perl_cross && cd perl_cross
[ATDE3 ~/perl_cross]$
mkdir romfs
図2.45 perl のクロスビルド1
https://arsv.github.io/perl-cross/download.html から 最新パッチをダウンロードします。下図の手順では、perl-5.18.1-cross-0.8.3.tar.gz をダウンロードしました。そして、Perl公式gitリポジトリからPerlソースコードをダウンロードしてパッチと同じバージョンにします。
[ATDE3 ~/perl_cross]$
git clone git://perl5.git.perl.org/perl.git perl
[ATDE3 ~/perl_cross]$
mv -i perl perl-<em class="replaceable"><code>5.18.1
← フォルダ名を展開後のパッチと同じにする。[ATDE3 ~/perl_cross]$
cd perl-5.18.1
[ATDE3 ~/perl_cross/perl-5.18.1]$
git checkout v5.18.1
← パッチと同じバージョンにする。[ATDE3 ~/perl_cross/perl-5.18.1]$
cd ../
図2.46 perl のクロスビルド2
パッチのデータを展開 (perl-5.18.1
の中に直接上書き) します。
[ATDE3 ~/perl_cross]$
tar -zxf perl-5.18.1-cross-0.8.3.tar.gz
図2.47 perl のクロスビルド3
ビルドし、インストールデータを一か所 ../romfs
に集めておきます。
[ATDE3 ~/perl_cross]$
cd perl-5.18.1
[ATDE3 ~/perl_cross/perl-5.18.1]$
./configure --target=arm-linux-gnueabi --prefix=$HOME/perl_cross/romfs
[ATDE3 ~/perl_cross/perl-5.18.1]$
make
[ATDE3 ~/perl_cross/perl-5.18.1]$
make DESTDIR="" install
図2.48 perl のクロスビルド4
これで Perl のクロスビルドは終了しました。
次に、Perl モジュールのクロスビルドを行います。Perl モジュールにも C言語ベースのモジュールがあるため、クロスビルドでインストールする必要があります。また、今回使用する Perl モジュール のクロスビルドには ATDE3 上で動作する Perl が必要です。同じバージョンが好ましいため、ここではまず、ATDE3 向けに Perl をネイティブ ビルドします。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
mkdir perl && cd perl
[ATDE3 ~/perl]$
mkdir romfs
[ATDE3 ~/perl]$
git clone git://perl5.git.perl.org/perl.git perl
[ATDE3 ~/perl]$
mv -i perl perl-5.18.1
[ATDE3 ~/perl]$
cd perl-5.18.1
[ATDE3 ~/perl]$
git checkout v5.18.1
[ATDE3 ~/perl]$
./Configure -des -Dprefix=$HOME/perl/romfs
[ATDE3 ~/perl]$
make
[ATDE3 ~/perl]$
make test
[ATDE3 ~/perl]$
make install
図2.49 perl のネイティブ ビルド
次に、ATDE3 上でネイティブ ビルドされた Perl で Armadillo 向けの Perl モジュールをクロスビルドするための準備をします。
ネイティブ ビルドされた Perl と その Perl が動的に必要とするライブラリをクロスビルドの $HOME/perl_cross/romfs/
に一時的に置きます。これらをクロスビルド用の $HOME/perl_cross/romfs/
に置く理由は、Armadillo 向けのクロスビルドで設定されたパスをそのまま使用したいためです。
さらに、移動したネイティブ Perl 用のライブラリの中に、ATDE3 向け のコンフィグ(CC など)が定義してあるファイルの Config.pm
と Config_heavy.pl
を削除します。そうしますと、Armadillo 向けの Config.pm
と Config_heavy.pl
が使われるようになります。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
mv -i $HOME/perl/romfs/lib/5.18.1/i686-linux/ $HOME/perl_cross/romfs/lib/perl5/5.18.1/
[ATDE3 ~]$
mv -i $HOME/perl/romfs/bin/perl $HOME/perl_cross/
[ATDE3 ~]$
cd $HOME/perl_cross/romfs/lib/perl5/5.18.1/i686-linux
[ATDE3 ~/perl_cross/romfs/lib/perl5/5.18.1/i686-linux]$
rm -f Config.pm
[ATDE3 ~/perl_cross/romfs/lib/perl5/5.18.1/i686-linux]$
rm -f Config_heavy.pl
[ATDE3 ~/perl_cross/romfs/lib/perl5/5.18.1/i686-linux]$
cd ~
[ATDE3 ~]$
rm -rf $HOME/perl/romfs
図2.50 perl のクロスビルド6
Perl モジュールのクロスビルドを開始します。
まずは、FHEM が必要とする Perl モジュールのダウンロードを行います。FHEM が必要な Perl モジュールは、(1) シリアル関連の Device::SerialPort
と (2) SSL関連のIO::Socket::SSL
、(3) WEB関連の LWP
です。さらに、これらが依存するモジュールすべてをインストールする必要があります。下図にこれらのモジュールの依存関係を示します。ソースコードは CPAN
からダウンロードします。
(1) Device::SerialPort (2) IO::Socket::SSL └Net::SSLeay (3) LWP ├Encode::Locale ├File::Listing ├LWP::MediaTypes ├HTTP::Date ├HTTP::Negotiate ├Net::HTTP ├WWW::RobotRules ├HTTP::Message │├IO::HTML ││└Test::Simple │└Compress::Zlib │ ├Compress::Raw::Bzip2 │ └Compress::Raw::Zlib ├HTTP::Daemon └HTTP::Cookies
図2.51 FHEM が必要とする Perl モジュールとそれに依存するモジュール
下図は、本HowTo記載時にが実際にダウンロードしたファイルです。各モジュールのバージョンは、本手順実行時の最新のものをダウンロードしました。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
mkdir perl-modules_cross && cd perl-modules_cross
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/C/CO/COOK/Device-SerialPort-1.04.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/IO-Socket-SSL-1.967.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/M/MI/MIKEM/Net-SSLeay-1.58.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-6.05.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Encode-Locale-1.03.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/File-Listing-6.04.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Date-6.02.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Negotiate-6.01.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Net-HTTP-6.06.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/WWW-RobotRules-6.02.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Message-6.06.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/C/CJ/CJM/IO-HTML-1.00.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Test-Simple-1.001002.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/IO-Compress-2.064.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Raw-Bzip2-2.064.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/P/PM/PMQS/Compress-Raw-Zlib-2.065.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Daemon-6.01.tar.gz
[ATDE3 ~/perl-modules_cross]$
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTTP-Cookies-6.01.tar.gz
[ATDE3 ~/perl-modules_cross]$
図2.52 perl モージュールのダウンロード
上の図でダウンロードした Perl モジュールをそれぞれ以下の手順で、クロスビルドします。シェル変数 MY_PMODULE
に .tar.gz
を除いた ダウンロードファイル名を代入して実行してください (例えば、Device-SerialPort-1.04.tar.gz
であれば MY_PMODULE=Device-SerialPort-1.04
とします)。それ以外の行は置換でなく、そのまま実行してください。
[ATDE3 ~]$
cd ~
[ATDE3 ~]$
cd perl-modules_cross
[ATDE3 ~/perl-modules_cross]$
export PERL5LIB=/home/atmark/perl_cross/romfs/lib/perl5/5.18.1:/home/atmark/perl_cross/romfs/lib/perl5/5.18.1/arm-linux
[ATDE3 ~/perl-modules_cross]$
MY_PMODULE="<em class="replaceable">各モジュール</em>"
[ATDE3 ~/perl-modules_cross]$
tar -zxf "$MY_PMODULE.tar.gz"
[ATDE3 ~/perl-modules_cross]$
cd "$MY_PMODULE"
[ATDE3 ~/perl-modules_cross/<em class="replaceable"><code>各モジュール
]$$HOME/perl_cross/perl Makefile.PL
[ATDE3 ~/perl-modules_cross/<em class="replaceable"><code>各モジュール
]$make
[ATDE3 ~/perl-modules_cross/<em class="replaceable"><code>各モジュール
]$make install
[ATDE3 ~/perl-modules_cross/<em class="replaceable"><code>各モジュール
]$cd ../
[ATDE3 ~/perl-modules_cross]$
cd ../
図2.53 perl モジュールのクロスビルド
romfs に追加するデータをひとつにまとめます。
[ATDE3 ~/perl-modules_cross/<em class="replaceable"><code>各モジュール
]$cd ~
[ATDE3 ~]$
cd $HOME/perl_cross/romfs/
[ATDE3 ~/perl_cross/romfs/]$
rm -fr "`find . -name i686-linux -a -type d`"
[ATDE3 ~/perl_cross/romfs/]$
tar -zcf perl-with-modules_romfs.tgz *
図2.54 perl モジュールのクロスビルド: romfs に追加するデータをひとつにまとめる
2.6.2. romfs にクロスビルドしたパッケージを追加
下図のコマンドを実行して、いったん atmark-dist/romfs
を削除してから新たに生成します。
[ATDE3 ~]$
cd ~
[ATDE ~]$
cd atmark-dist
[ATDE ~/atmark-dist]$
make preromfs
[ATDE ~/atmark-dist]$
make romfs
図2.55 Atmark Dist romfs を再作成
先ほどクロスビルドした各パッケージのバイナリを /home/atmark/atmark-dist/romfs
内に追加します。
[ATDE3 ~]$
cd ~
[ATDE ~]$
cd atmark-dist/romfs
[ATDE ~/atmark-dist]$
tar -zxf $HOME/perl_cross/romfs/perl-with-modules_romfs.tgz
[ATDE ~/atmark-dist]$
tar -zxf $HOME/openssl-cross/romfs/openssl-romfs.tgz
[ATDE ~/atmark-dist]$
tar -zxf $HOME/ntpd-cross/romfs/ntpd-romfs.tgz
[ATDE ~/atmark-dist]$
tar -zxf $HOME/usbutils-cross/romfs/usbutils-romfs.tgz
図2.56 Atmark Dist romfs にクロスビルドしたインストールデータを追加
romfs 内の設定ファイル fstab
に記載されている ext2
を ext3
に変更します。
[ATDE ~]$
cd ~
[ATDE ~]$
cd atmark-dist/romfs/
[ATDE ~/atmark-dist/romfs]$
cat etc/fstab
← 変更前。 /dev/ram0 / ext2 defaults 0 1 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 sysfs /sys sysfs defaults 0 0[ATDE ~/atmark-dist/romfs]$
vi etc/fstab
← ここで書き換えする。[ATDE ~/atmark-dist/romfs]$
cat etc/fstab
← 変更後。 /dev/ram0 / ext3 defaults 0 1 proc /proc proc defaults 0 0 usbfs /proc/bus/usb usbfs defaults 0 0 sysfs /sys sysfs defaults 0 0
図2.57 Atmark Dist クロス /etc/fstab のファイルを変更
etc/ntp.conf を下図の内容で新規に作成します。
# driftfile driftfile /var/lib/ntp/drift # public NTP server server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp # Initialize restrict default ignore # allow localhost restrict 127.0.0.1 # allow local network restrict 192.168.0.0 mask 255.255.255.0 # allow public NTP server restrict ntp1.jst.mfeed.ad.jp restrict ntp2.jst.mfeed.ad.jp restrict ntp3.jst.mfeed.ad.jp server 127.127.1.0
図2.58 ntp.conf
romfs から romfs イメージを作成します。
[ATDE3 ~]$
cd ~
[ATDE ~]$
cd atmark-dist
[ATDE ~/atmark-dist]$
make image
図2.59 Atmark Dist romfs イメージを再作成
2.6.3. USBメモリへの romfs の展開
romfs イメージを USB に展開してコピーします。ここで使用する USB メモリは、Debian GNU/Linux の時と同様にパーティーションが1つで、ext3 ファイルシステムでフォーマットされているものを使用します。
[ATDE ~]$
sudo -i
[sudo] password for atmark:[ATDE ~]#
mount -o loop /home/atmark/atmark-dist/images/romfs.img /mnt/
[ATDE ~]#
ls /mnt/
bin dev home linuxrc media opt root sys usr boot etc lib lost+found mnt proc sbin tmp var[ATDE /mnt]#
(cd /mnt/; tar cf - *) | (cd /media/disk; tar xf -)
[ATDE /]#
図2.60 Atmark Dist クロス romfs を USB メモリに展開
2.6.4. Atmark Dist の起動
Debian GNU/Linux の時と同様ですが、以下のことを確認してから電源を投入します。
1. 次を確認してから、電源を投入します。
- JP2がオープンになっていること。
- ACアダプタが接続されていること。
- USBには本章で準備したUSBメモリのみ挿入されていること。
- ATDE3とネットワーク接続できること。
- インターネットに接続できること。
- シリアルが作業用PCと接続できていること。
2. 下のようにログイン画面が表示されたら、ユーザー名とパスワードにそれぞれ root
を入力します。
atmark-dist v1.32.2 (AtmarkTechno/Armadillo-420) Linux 2.6.26-at18 [armv5tejl arch] armadillo420-0 login:root
Password:[armadillo /]#
図2.61 Atmark Dist クロス Atmark Dist に ログイン
3. 時刻が大きくずれているとNTPサーバーが起動しないかもしれないためntpdate
コマンドで現在の時刻に合わせてから、NTPサーバーを起動します。
[armadillo ~]$
ntpdate ntp1.jst.mfeed.ad.jp
[armadillo ~]#
ntpd
図2.62 Atmark Dist クロス 時刻同期としてNTPサーバーの起動
4. FHEMを起動します。環境変数 PERL5LIB
にライブラリのパスの設定が必要です。
[armadillo ~]$
export PERL5LIB=/lib/perl5/5.18.1:/lib/perl5/site_perl/5.18.1/arm-linux/
[armadillo ~]$
wget http://fhem.de/fhem-5.5.tar.gz
[armadillo ~]$
tar -zxf fhem-5.5.tar.gz && cd fhem-5.5
[armadillo ~/fhem-5.5]$
perl fhem.pl fhem.cfg
図2.63 Atmark Dist クロス FHEMを起動
第3章 動作環境の構築
ここでは、FHEM の設定やビジュアル化する手順をご紹介します。本章の操作は明記されていない限り、標準 OS Atmark Dist と オプション OS Debian GNU/Linux とも同じとなります。
3.1. FHEMの起動と終了
FHEM の起動と終了手順です。また、FHEMパッケージには通常版の他にデモ版が用意されています。両方の手順を示します。
3.1.1. 通常版
1. 起動します。perl
コマンドに fhem.pl
と fhem.cfg
を指定して実行します。
[(d)armadillo ~]#
cd ~
[(d)armadillo ~]$
cd fhem-5.5
[(d)armadillo ~/fhem-5.5]$
perl fhem.pl fhem.cfg
図3.1 FHEM の起動
2. 実行中のプロセスIDを ps
コマンドで調べて kill -9
コマンドで停止します。
[(d)armadillo ~]#
ps -aef | grep fhem
1339 root 8756 S perl fhem.pl fhem.cfg 1345 root 576 S grep fhem[(d)armadillo ~]#
kill -9 1339
図3.2 FHEM の停止
3.1.2. デモ版
1. デモ版起動します。perl
コマンドに fhem.pl
と fhem.cfg.demo
を指定して実行します。デモ版は通常版と違いfhem.cfg.demo
を指定しています。また、通常版との違いは、設定ファイルに保存をしないこと、ログが標準出力に出力されること、フォアグランドで実行されることです。
通常版FHEMが起動している場合は、停止させてから行ってください。
[(d)armadillo ~]#
cd ~
[(d)armadillo ~]$
cd fhem-5.5
[(d)armadillo ~/fhem-5.5]$
perl fhem.pl fhem.cfg.demo
図3.3 デモ版 FHEM の起動
起動したら、第3.2.1章に記載の手順でHTTPでアクセスしてみて下さい。デモ版のWEPページを見ることができます。
2. デモ版FHEMはフォアグランドで実行されていますので、Ctrl+c を押してプログラムを停止します。
3.2. TCP/IP 経由でリモートアクセス
FHEM は TCP/IP 経由でリモートアクセスできます。
3.2.1. HTTP でアクセス
同じネットワークに接続された PC から FHEM に HTTP でアクセスします。ここでは、Armadillo の IPアドレスは 192.168.10.172 とします。PC で Web ブラウザを起動してアドレスバーに http://192.168.10.172:8083/fhem を入力して Enter を押します。下の画面になれば、FHEM にアクセスできています。下図は、通常版のデフォルト画面です。
図3.4 HTTP でアクセス
3.3. WEBページから設定
HTTP リモートアクセスした PC の WEB ブラウザから FHEM への設定が可能です。
3.3.1. 設定ファイルの保存
行った設定/変更を設定ファイル fhem.cfg
に書き込む手順です。下図の Save Config
をクリックすると、設定ファイルに変更が反映されます。この操作を行わずに、FHEMを停止するとそれ以前に行った設定/変更は反映されません。
図3.5 FHEM WEBページからの設定:設定の保存
3.3.2. EnOcean製受信用USBを登録
受信用USBモジュールをArmadilloに挿入してから、受信用USBモジュールをFHEMに登録します。WEBブラウザの入力フィールドにdefine TCM310_0 TCM 310 /dev/ttyUSB0@57600
を入力して Enter キーを押すと登録ができます。FHEMはデバイスを認識したら自動で登録する機能があるため、既に登録されているかもしれませんが、問題は発生しませんので念のため実行しておきます。
3.3.3. EnOcean製センサを登録
各センサの登録は、本HowToではFHEMの自動登録機能を利用して登録します。この機能を有効にするには define autocreate autocreate
を入力して Enter キーを押します。なお、この機能は既にdefine済みというメッセージが表示されるかもしれませんが、問題は発生しませんので念のため実行しておきます。これで受信用USBモジュールが各センサの電波を受信すると自動的に登録されるようになります。
下図は、コンタクトが 1 つ、センサが 5 つ、スイッチが 4 つ登録された状態のWEB画面です。
図3.6 FHEM WEBページからの設定:各センサの登録
3.3.4. タイプ センサのサブタイプを設定
本章では最低限必要な設定を行います。
EnOcean の各センサのタイプはスイッチとコンタクトとセンサがあります。センサはさらにサブタイプに分類されますが、センサによっては電波の受信では分類されない場合もあるためWEB画面から直接設定します。このサブタイプによってデータフォーマットが異なるため、適切に設定しないと、センサのデータが正しく表示されません。
サブタイプは、Fhem の コマンド リファレンス の EnOcean を参考にして設定します。そこにデバイスの型番が載っていない場合は、EnOcean Equipment Profiles (EEP) でプロファイルをまず確認します。
ここでは、下の表のようにセンサのサブタイプを設定します。
表3.1 サブタイプ
定義名 | サブタイプ | 備考 |
---|---|---|
EnO_sensor_0003B8BA |
roomSensorControl.05 |
コマンドリファレンスやEEPからも調べられますが、センサの裏の蓋を開けて Learn ボタン を押すと自動で認識されました。 |
EnO_sensor_0003B8BC |
tempSensor.14 |
センサに貼ってある温度仕様とEEPから特定しました。 |
EnO_sensor_0004C942 |
roomSensorControl.01 |
コマンドリファレンスやEEPからも調べられますが、センサの裏の蓋を開けて Learn ボタン を押すと自動で認識されました。 |
EnO_sensor_0081351A |
occupSensor.01 |
しばらく他っておいたら自動で認識されました。 |
EnO_sensor_008A599E |
lightSensor.03 |
サブタイプが特定出来なかったため暫定で設定しました。 |
WEB画面の入力フィールドから次のフォーマットで入力して、各センサのサブタイプを登録します。
attr
定義名
subType
サブタイプ
図3.7 FHEM サブタイプの登録フォーマット
サブタイプを入力すると、下図のような画面になります。
図3.8 FHEM WEBページからの設定:各センサのサブタイプの登録
これで、必要な設定は終了しました。
3.4. WEBページからカスタマイズ
ここからは、ビジュアル化を目的としたカスタマイズを行います。
3.4.1. デバイス名の別名表記
定義名が分かりずらいため別名を登録します。
まず、例としてドアの開閉センサの名前 EnO_contact_0082D7F9
を Door という別名を付けます。入力フィールドに attr EnO_contact_0082D7F9 alias Door
を入力して別名を登録することも可能ですが、文法を覚えなくても各デバイスのページを表示して設定内容を選択してから、別名だけ入力する方法もあります。ここでは、後者の設定で行ってみます。
まず、下図の EnO_contact_0082D7F9
をクリックします。
図3.9 FHEM 別名の設定1
そうすると、下図のような画面が表示されるので、選択リストから alias
を選択します。
図3.10 FHEM 別名の設定2
そうすると、alias
の右に空白の入力フィールドが現れますので、そこに Door
を入力し、attr ボタンをクリックします。
図3.11 FHEM 別名の設定3
次に、EnOcean
ページをクリックして表示させると 以下のように、EnO_contact_0082D7F9
と表示されていたところが Door
に代わっています。
図3.12 FHEM 別名の設定4
同じ手順でその他のデバイスも下の表の別名(alias)で設定します。
表3.2 別名 (alias)
定義名 | 別名 (alias) |
---|---|
EnO_sensor_0003B8BA |
Temperature inside (SR04PST) |
EnO_sensor_0003B8BC |
Temperature outside |
EnO_sensor_0004C942 |
Temperature inside |
EnO_sensor_0081351A |
Occupancy |
EnO_sensor_008A599E |
Brightness |
残りのセンサのサブタイプを設定すると下図のようになります。
図3.13 FHEM 別名の設定後
3.4.2. アイコンの付加
各センサにアイコン画像を付加してみます。
例として、EnO_contact_0082D7F9
(別名Door
) にアイコンを付加します。手順は以下の通りです。
1. デバイスの選択
別名設定時と同様に下図の Door
をクリックします。
図3.14 FHEM アイコンを設定するデバイスを指定
2. 次に、下図にある Select icon
をクリックします。
図3.15 FHEM Select icon をクリック
3. アイコン画像の選択
しばらくすると、アイコン画像の一覧が表示されます。選択する画像をクリックします。ここでは、下図のようにドアを選択します。
図3.16 アイコン画像の選択
4. アイコン設定後の Attributes の表示
下図のように、Attributes の中に icon
が表示され、fts_door_right
が指定されていることがわかります。
図3.17 FHEM アイコン設定後の Attributes の表示
5. 別の設定方法
選択リストから icon
を選択しての設定、変更も可能です。
icon
をクリックすると、自動で選択リストに icon
が選択されますので、その右側の入力フィールドから画像ファイル名を入力・変更ができます。また、icon
をクリックせずに、選択リストから icon
を選択して入力・変更も可能です。
図3.18 FHEM アイコン画像設定後
6. アイコン設定後
EnOcean
ページを見ると、下図のように Door
の左側にドアのアイコン画像が表示されます。
図3.19 FHEM アイコン画像設定後
7. 他のセンサの設定
上記の設定手順で、残りのセンサを下の表のように設定しました。また、本手順では、アイコン画像選択時の作業性を考慮し、作業PCにFHEMのダウンロードデータを展開コピーして、その中から画像を選択しました。
表3.3 アイコン
定義名 | 指定文字列 |
---|---|
EnO_contact_0082D7F9 |
fts_door_right |
EnO_sensor_0003B8BA |
temp_inside |
EnO_sensor_0003B8BC |
temp_outside |
EnO_sensor_0004C942 |
temp_inside |
EnO_sensor_0081351A |
motion_detector |
EnO_sensor_008A599E |
weather_light_meter |
8. 下図は、全てのセンサにアイコンを付加した後の画面です。
図3.20 FHEM アイコン画像全設定後
3.4.3. グラフを追加
グラフを作成します。
1. デバイスのログファイルを選択
ここでは、下図の
をクリックします。
図3.21 FHEM グラフを作成するデバイスログを指定
2. グラフの設定
下図の Create SVG plot
をクリックして、グラフの設定画面を開きます。
図3.22 FHEM グラフを設定するデバイスのログの画面
3. グラフの設定
下図が設定画面です。
図3.23 FHEM グラフ設定画面
下図のように設定して、Write .gplot file
ボタンをクリックします。
図3.24 FHEM グラフ設定画面
4. グラフの設定
Everything
ページに下図のようにグラフが追加されます。
図3.25 FHEM 設定後のグラフ画面
5. 他のセンサのグラフの設定
FileLog_EnO_sensor_0003B8BA
のグラフの設定は下図になります。
図3.26 FHEM FileLog_EnO_sensor_0003B8BA のグラフの設定画面
FileLog_EnO_sensor_0003B8BC
のグラフの設定は下図になります。
図3.27 FHEM FileLog_EnO_sensor_0003B8BC のグラフの設定画面
6. グラフの設定
Everything
ページに下図のようにグラフが追加されます。
図3.28 FHEM 全センサ設定後のグラフ画面
3.4.4. ページの移動
ページに移動する手順は下の通りです。
3.4.4.1. 任意のページへ移動
ここでは、任意のページ Graph
を新規に作成して移動する手順をご紹介します。
1. room
の新規作成
まず、下図のようにグラフ SVG_FileLog_EnO_sensor_0004C942_1
を Graph に移動します。入力フィールド attr SVG_FileLog_EnO_sensor_0004C942_1 room Graph
を入力して Enter キーを押します。
図3.29 FHEM room の新規作成
そうすると、下図のように Graph
という room
が作成されて、そのページにグラフ SVG_FileLog_EnO_sensor_0004C942_1
が表示されます。
図3.30 FHEM room の新規作成後
2. 既存の room
に移動
下図のように、デバイスのグラフ SVG_FileLog_EnO_sensor_0003B8BA_1
を選択します。
図3.31 FHEM デバイスのグラフを選択
次の画面が表示されたら、下図のように room
と Graph
を選択して、attr
ボタンをクリックします。
図3.32 FHEM room を選択
そうすると、下図のように Graph
ページにグラフ SVG_FileLog_EnO_sensor_0003B8BA_1
が表示されます。
図3.33 FHEM room を選択
3. 全てのグラフの移動後
全てのグラフを room
Graph
に移動すると、下図のようになります。
図3.34 FHEM 任意のページへ移動後
3.4.4.2. Unsorted ページに移動
各デバイスのログファイルを EnOcean
ページから別のページ Unsorted
に移動する手順をご紹介します。まず、例として FileLog_EnO_contact_0082D7F9
で行います。EnOcean
ページから FileLog_EnO_contact_0082D7F9
をクリックします。
図3.35 FHEM デバイスのログファイルを選択
room
と Unsorted
を選択して attr
ボタンをクリックします。
図3.36 FHEM Unsorted の指定
他のデバイスのログファイルも同じ手順で Unsorted
を指定した後の EnOcean
ページは下図のようになります。ログファイルが無くなっていることがわかります。
図3.37 FHEM Unsorted 指定後の EnOcean ページ
各センサのログは下図のように Unsorted
ページにあります。
図3.38 FHEM Unsorted 指定後の Unsorted ページ
3.4.4.3. room を hidden に設定
各スイッチを EnOcean
ページから見えないように設定します。見えないようにするには room
を hidden
に設定します。EnO_switch_0016297D
を例で設定します。
まず、EnOcean
ページのスイッチ EnO_switch_0016297D
をクリックします。
図3.39 FHEM スイッチデバイスの選択
room
と hidden
を選択して attr
ボタンをクリックします。
図3.40 FHEM hidden の指定
全てのスイッチの room
を上の図の手順で hidden
に選択すると、下図の画面になります。
図3.41 FHEM hidden 指定後の EnOcean ページ
3.4.5. 状態の画像化
センサで取得する情報を画像で表示するように設定する手順をご紹介します。
ここでは、例として Door
センサの closed
と open
ごとに画像を指定します。
1. Door
をクリックします。
図3.42 FHEM デバイスの選択
2. 開いたページの Extend devStateIcon
をクリックします。
図3.43 FHEM Extend devStateIcon をクリック
3. 入力フィールドにマッチさせたい文字列を入力します。open
を入力します。
図3.44 FHEM open を入力
4. 開いているときの画像を指定します。選択する画像をクリックします。ここでは下図のドアをクリックします。
図3.45 FHEM 開いたドア画像を指定
5. 画像指定後の設定画面を見ると、devStateIcon
が設定されたことになっています。つまり、下図の画面から devStateIcon
も設定することが可能です。
図3.46 FHEM devStateIcon 設定後の属性の表示1
6. 次に、ドアを閉じた状態の画像を設定するために再度 Extend devStateIcon
をクリックします。
図3.47 FHEM Extend devStateIcon をクリック
7. 入力フィールドに closed
を入力します。
図3.48 FHEM devStateIcon closed を入力
8. 閉じている状態を示す画像を指定します。ここでは下図のドアをクリックします。
図3.49 FHEM 閉じたドア画像を指定
9. 画像指定後の設定画面を見ると、devStateIcon
に open:fts_door_right_open closed:fts_door_right_open
が設定されたことがわかります。
図3.50 FHEM devStateIcon 設定後の属性の表示2
10. 設定後、EnOcean
ページをみると下図のように画像になっていることがわかります。
下図は、ドアが閉じているときの表示です。
図3.51 FHEM devStateIcon 閉じた状態
下図は、ドアが開いているときの表示です。
図3.52 FHEM devStateIcon 開いた状態
3.5. 完成Webページ
下図が完成したWebページです。
図3.53 FHEM 完成 Web ページ
3.6. 参照
表3.4 参照
参照 | 備考 |
---|---|
FHEM HOWTO | FHEM 入門 (英語) |
FHEM commandref | FHEM コマンドリファレンス |
FHEM | FHEM トップページ (英語) |
EnOcean Serial Protocol (ESP3) | EnOcean シリアル プロトコル (PDF, 英語) |
Equipment Profiles (EEP 2.6) | EnOcean 無線規格 (PDF, 英語) |