Howto

EnOceanセンサ情報をFHEM(ホームオートメーション用サーバー)でビジュアル化する

FHEMは、Perlによるホームオートメーション用サーバーです。Armadillo-400シリーズ上でFHEMを動作させて、EnOceanセンサから取得した情報をビジュアル化する手順を紹介します。

第1章 はじめに
第2章 動作環境の構築
第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-20xxxxxx.zip (本手順では、DVD/atde/vmware/atde3-20120709.zip) を展開してコピーします。
  • VMware Player を起動します。
  • [仮想マシンを開く] をクリックして、展開したatde3-20xxxxxx/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 SelectionSelect を選択してから Enter キーを押します。

menuconfig01

図2.11 Atmark dist コンフィギュレーション1

3. 次に、Customize Kernel Settings を選択して SPACE キー を押して * を付けます。その後に、Exit を選択して Enter キーを押します。

menuconfig02

図2.12 Atmark dist コンフィギュレーション2

4. さらに、次の画面でも Exit を選択して Enter キーを押すと、次の画面が表示されます。 Yes を選択して Enter キーを押します。

menuconfig03

図2.13 Atmark dist コンフィギュレーション3

5. いったん端末画面に戻った後、下のような設定画面が表示されます。ここからが Linux カーネルのコンフィグレーションとなります。まず、Device Drivers  --->Select を選択して Enter キーを押します。

menuconfig11

図2.14 Linux カーネルコンフィギュレーション1

6. 次に、[*] USB support ---> (* が付いていること) と Select を選択して Enter キーを押します。

menuconfig12

図2.15 Linux カーネルコンフィギュレーション2

7. さらに、<*>   USB Serial Converter support  ---> (* が付いていること) と Select を選択して Enter キーを押します。

menuconfig13

図2.16 Linux カーネルコンフィギュレーション3

8. さらに、<*>   USB FTDI Single Port Serial Driver (* が付いていること) と Exit を選択して Enter キーを押します。
ここで有効にしたドライバモジュールが EnOcean製受信用USBモジュールで使用されます。

menuconfig14

図2.17 Linux カーネルコンフィギュレーション4

9. その後、Exitを 選択して Enter キーを押すを 3 回繰り返すと、下図のように新しいカーネルコンフィギュレーションを保存するかを尋ねられます。Yes を選択して Enter キーを押します。

menuconfig15

図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 に記載されている ext2ext3 に変更します。

[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.pmConfig_heavy.pl を削除します。そうしますと、Armadillo 向けの Config.pmConfig_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::SSLNet::SSLeay

(3) LWPEncode::LocaleFile::ListingLWP::MediaTypesHTTP::DateHTTP::NegotiateNet::HTTPWWW::RobotRulesHTTP::Message
│├IO::HTML
││└Test::Simple
│└Compress::Zlib
│  ├Compress::Raw::Bzip2
│  └Compress::Raw::ZlibHTTP::DaemonHTTP::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 に記載されている ext2ext3 に変更します。

[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.plfhem.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.plfhem.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 にアクセスできています。下図は、通常版のデフォルト画面です。

fhem-http-01

図3.4 HTTP でアクセス

3.3. WEBページから設定

HTTP リモートアクセスした PC の WEB ブラウザから FHEM への設定が可能です。

3.3.1. 設定ファイルの保存

行った設定/変更を設定ファイル fhem.cfg に書き込む手順です。下図の Save Config をクリックすると、設定ファイルに変更が反映されます。この操作を行わずに、FHEMを停止するとそれ以前に行った設定/変更は反映されません。

fhem-http-02

図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画面です。

fhem-http-03

図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 サブタイプの登録フォーマット

サブタイプを入力すると、下図のような画面になります。

fhem-http-04

図3.8 FHEM WEBページからの設定:各センサのサブタイプの登録

これで、必要な設定は終了しました。

3.4. WEBページからカスタマイズ

ここからは、ビジュアル化を目的としたカスタマイズを行います。

3.4.1. デバイス名の別名表記

定義名が分かりずらいため別名を登録します。

まず、例としてドアの開閉センサの名前 EnO_contact_0082D7F9 を Door という別名を付けます。入力フィールドに attr EnO_contact_0082D7F9 alias Door を入力して別名を登録することも可能ですが、文法を覚えなくても各デバイスのページを表示して設定内容を選択してから、別名だけ入力する方法もあります。ここでは、後者の設定で行ってみます。

まず、下図の EnO_contact_0082D7F9 をクリックします。

fhem-alias-01

図3.9 FHEM 別名の設定1

そうすると、下図のような画面が表示されるので、選択リストから alias を選択します。

fhem-alias-02

図3.10 FHEM 別名の設定2

そうすると、alias の右に空白の入力フィールドが現れますので、そこに Door を入力し、attr ボタンをクリックします。

fhem-alias-03

図3.11 FHEM 別名の設定3

次に、EnOcean ページをクリックして表示させると 以下のように、EnO_contact_0082D7F9 と表示されていたところが Door に代わっています。

fhem-alias-04

図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

残りのセンサのサブタイプを設定すると下図のようになります。

fhem-alias-05

図3.13 FHEM 別名の設定後

3.4.2. アイコンの付加

各センサにアイコン画像を付加してみます。

例として、EnO_contact_0082D7F9 (別名Door) にアイコンを付加します。手順は以下の通りです。

1. デバイスの選択

別名設定時と同様に下図の Door をクリックします。

fhem-icon-01

図3.14 FHEM アイコンを設定するデバイスを指定

2. 次に、下図にある Select icon をクリックします。

fhem-icon-02

図3.15 FHEM Select icon をクリック

3. アイコン画像の選択

しばらくすると、アイコン画像の一覧が表示されます。選択する画像をクリックします。ここでは、下図のようにドアを選択します。

fhem-icon-03

図3.16 アイコン画像の選択

4. アイコン設定後の Attributes の表示

下図のように、Attributes の中に icon が表示され、fts_door_right が指定されていることがわかります。

fhem-icon-04

図3.17 FHEM アイコン設定後の Attributes の表示

5. 別の設定方法

選択リストから icon を選択しての設定、変更も可能です。

icon をクリックすると、自動で選択リストに icon が選択されますので、その右側の入力フィールドから画像ファイル名を入力・変更ができます。また、icon をクリックせずに、選択リストから icon を選択して入力・変更も可能です。

fhem-icon-05

図3.18 FHEM アイコン画像設定後

6. アイコン設定後

EnOcean ページを見ると、下図のように Door の左側にドアのアイコン画像が表示されます。

fhem-icon-06

図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. 下図は、全てのセンサにアイコンを付加した後の画面です。

fhem-icon-07

図3.20 FHEM アイコン画像全設定後

3.4.3. グラフを追加

グラフを作成します。

1. デバイスのログファイルを選択

ここでは、下図の   をクリックします。

fhem-graph-01

図3.21 FHEM グラフを作成するデバイスログを指定

2. グラフの設定

下図の Create SVG plot をクリックして、グラフの設定画面を開きます。

fhem-graph-02

図3.22 FHEM グラフを設定するデバイスのログの画面

3. グラフの設定

下図が設定画面です。

fhem-graph-03

図3.23 FHEM グラフ設定画面

下図のように設定して、Write .gplot file ボタンをクリックします。

fhem-graph-04

図3.24 FHEM グラフ設定画面

4. グラフの設定

Everything ページに下図のようにグラフが追加されます。

fhem-graph-05

図3.25 FHEM 設定後のグラフ画面

5. 他のセンサのグラフの設定

FileLog_EnO_sensor_0003B8BA のグラフの設定は下図になります。

fhem-graph-06

図3.26 FHEM FileLog_EnO_sensor_0003B8BA のグラフの設定画面

FileLog_EnO_sensor_0003B8BC のグラフの設定は下図になります。

fhem-graph-07

図3.27 FHEM FileLog_EnO_sensor_0003B8BC のグラフの設定画面

6. グラフの設定

Everything ページに下図のようにグラフが追加されます。

fhem-graph-08

図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 キーを押します。

fhem-room-graph-01

図3.29 FHEM room の新規作成

そうすると、下図のように Graph という roomが作成されて、そのページにグラフ SVG_FileLog_EnO_sensor_0004C942_1 が表示されます。

fhem-room-graph-02

図3.30 FHEM room の新規作成後

2. 既存の room に移動

下図のように、デバイスのグラフ SVG_FileLog_EnO_sensor_0003B8BA_1 を選択します。

fhem-room-graph-03

図3.31 FHEM デバイスのグラフを選択

次の画面が表示されたら、下図のように roomGraph を選択して、attr ボタンをクリックします。

fhem-room-graph-04

図3.32 FHEM room を選択

そうすると、下図のように Graph ページにグラフ SVG_FileLog_EnO_sensor_0003B8BA_1 が表示されます。

fhem-room-graph-05

図3.33 FHEM room を選択

3. 全てのグラフの移動後

全てのグラフを room Graph に移動すると、下図のようになります。

fhem-room-graph-06

図3.34 FHEM 任意のページへ移動後

3.4.4.2. Unsorted ページに移動

各デバイスのログファイルを EnOcean ページから別のページ Unsorted に移動する手順をご紹介します。まず、例として FileLog_EnO_contact_0082D7F9 で行います。EnOcean ページから FileLog_EnO_contact_0082D7F9 をクリックします。

fhem-unsorted-01

図3.35 FHEM デバイスのログファイルを選択

roomUnsorted を選択して attr ボタンをクリックします。

fhem-unsorted-02

図3.36 FHEM Unsorted の指定

他のデバイスのログファイルも同じ手順で Unsorted を指定した後の EnOcean ページは下図のようになります。ログファイルが無くなっていることがわかります。

fhem-unsorted-03

図3.37 FHEM Unsorted 指定後の EnOcean ページ

各センサのログは下図のように Unsorted ページにあります。

fhem-unsorted-04

図3.38 FHEM Unsorted 指定後の Unsorted ページ

3.4.4.3. room を hidden に設定

各スイッチを EnOcean ページから見えないように設定します。見えないようにするには roomhidden に設定します。
EnO_switch_0016297D を例で設定します。
まず、EnOcean ページのスイッチ EnO_switch_0016297D をクリックします。

fhem-room-hidden-01

図3.39 FHEM スイッチデバイスの選択

roomhidden を選択して attr ボタンをクリックします。

fhem-room-hidden-02

図3.40 FHEM hidden の指定

全てのスイッチの room を上の図の手順で hidden に選択すると、下図の画面になります。

fhem-room-hidden-03

図3.41 FHEM hidden 指定後の EnOcean ページ

3.4.5. 状態の画像化

センサで取得する情報を画像で表示するように設定する手順をご紹介します。
ここでは、例として Door センサの closedopen ごとに画像を指定します。

1. Door をクリックします。

fhem-state-icon-01

図3.42 FHEM デバイスの選択

2. 開いたページの Extend devStateIcon をクリックします。

fhem-state-icon-02

図3.43 FHEM Extend devStateIcon をクリック

3. 入力フィールドにマッチさせたい文字列を入力します。open を入力します。

fhem-state-icon-03

図3.44 FHEM open を入力

4. 開いているときの画像を指定します。選択する画像をクリックします。ここでは下図のドアをクリックします。

fhem-state-icon-04

図3.45 FHEM 開いたドア画像を指定

5. 画像指定後の設定画面を見ると、devStateIcon が設定されたことになっています。つまり、下図の画面から devStateIcon も設定することが可能です。

fhem-state-icon-05

図3.46 FHEM devStateIcon 設定後の属性の表示1

6. 次に、ドアを閉じた状態の画像を設定するために再度 Extend devStateIcon をクリックします。

fhem-state-icon-06

図3.47 FHEM Extend devStateIcon をクリック

7. 入力フィールドに closed を入力します。

fhem-state-icon-07

図3.48 FHEM devStateIcon closed を入力

8. 閉じている状態を示す画像を指定します。ここでは下図のドアをクリックします。

fhem-state-icon-08

図3.49 FHEM 閉じたドア画像を指定

9. 画像指定後の設定画面を見ると、devStateIconopen:fts_door_right_open closed:fts_door_right_open が設定されたことがわかります。

fhem-state-icon-09

図3.50 FHEM devStateIcon 設定後の属性の表示2

10. 設定後、EnOcean ページをみると下図のように画像になっていることがわかります。
下図は、ドアが閉じているときの表示です。

fhem-state-icon-10

図3.51 FHEM devStateIcon 閉じた状態

下図は、ドアが開いているときの表示です。

fhem-state-icon-11

図3.52 FHEM devStateIcon 開いた状態

3.5. 完成Webページ

下図が完成したWebページです。

fhem-finish-01

図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, 英語)