警告メッセージ

Howtoは、Armadilloシリーズを有効に活用するための参考資料です。使用ソフトウェアのバージョンなど諸条件の差異によって、記載内容と実際の動作が異なる場合があります。また、すべての機能検証や長期の動作試験を行ったものではありませんので、必ずご使用目的に適合した検証・試験を行ってください。

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

対象製品: Armadillo-460Armadillo-440Armadillo-420Armadillo-410

第3章 FHEMの設定

3.1. FHEMの起動と終了
3.1.1. 通常版
3.1.2. デモ版
3.2. TCP/IP 経由でリモートアクセス
3.2.1. HTTP でアクセス
3.3. WEBページから設定
3.3.1. 設定ファイルの保存
3.3.2. EnOcean製受信用USBを登録
3.3.3. EnOcean製センサを登録
3.3.4. タイプ センサのサブタイプを設定
3.4. WEBページからカスタマイズ
3.4.1. デバイス名の別名表記
3.4.2. アイコンの付加
3.4.3. グラフを追加
3.4.4. ページの移動
3.4.5. 状態の画像化
3.5. 完成Webページ
3.6. 参照

第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[a] を使用しました。

EnOcean製
受信用USBモジュール

1台

本手順例では、USB300C を使用しました。

EnOcean製
スイッチ/
センサ/
コンタクト

1台以上

スイッチ、温度センサ、ドアの開閉センサなど

[a] アットマークテクノ社ホームページからDVDイメージをダウンロードできます。Armadillo-420であれば、Armadillo-420のドキュメント・ダウンロードページの開発セット添付DVDイメージ(ISOファイル)の項目にあるArmadillo-400シリーズ 開発用DVD-ROMです。 なお、必要なデータを個別にダウンロードすることもできます。


2.1.2. 開発環境 ATDE3 を起動

本手順では、開発環境にATDE3を使用します。『ATDEインストールガイド』の 第2章「2. Windows 上にATDE を構築する」の通りです。

  1. 開発PCにVMware(Workstation、Playerなど)がインストールされていない場合は、インストールする。
  2. 開発PCに atde3-20xxxxxx.zip (本手順では、DVD/atde/vmware/atde3-20120709.zip) を展開してコピーします。
  3. VMware Player を起動します。
  4. [仮想マシンを開く] をクリックして、展開したatde3-20xxxxxx/atde3.vmx (本手順では、atde3-20120709/atde3.vmx) を指定します。
  5. [再生] をクリックします。

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

    Atmark Dist コンフィギュレーション1

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


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

    Atmark Dist コンフィギュレーション2

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


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

    Atmark Dist コンフィギュレーション3

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


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

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

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


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

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

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


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

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

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


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

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

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


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

    Linux カーネルコンフィギュレーション5

    図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.19 Atmark Dist 一式のビルド


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


http://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-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 からダウンロードします。

図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="各モジュール"
[ATDE3 ~/perl-modules_cross]$ tar -zxf "$MY_PMODULE.tar.gz"
[ATDE3 ~/perl-modules_cross]$ cd "$MY_PMODULE"
[ATDE3 ~/perl-modules_cross/各モジュール]$ $HOME/perl_cross/perl Makefile.PL
[ATDE3 ~/perl-modules_cross/各モジュール]$ make
[ATDE3 ~/perl-modules_cross/各モジュール]$ make install
[ATDE3 ~/perl-modules_cross/各モジュール]$ cd ../
[ATDE3 ~/perl-modules_cross]$ cd ../

図2.53 perl モジュールのクロスビルド


romfs に追加するデータをひとつにまとめます。

[ATDE3 ~/perl-modules_cross/各モジュール]$ 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 でアクセス

図3.4 HTTP でアクセス


3.3. WEBページから設定

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

3.3.1. 設定ファイルの保存

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

FHEM WEBページからの設定:設定の保存

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


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

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

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

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

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

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

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

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

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

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

FHEM 別名の設定1

図3.9 FHEM 別名の設定1


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

FHEM 別名の設定2

図3.10 FHEM 別名の設定2


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

FHEM 別名の設定3

図3.11 FHEM 別名の設定3


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

FHEM 別名の設定4

図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 別名の設定後

図3.13 FHEM 別名の設定後


3.4.2. アイコンの付加

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

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

  1. デバイスの選択

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

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

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


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

    FHEM Select icon をクリック

    図3.15 FHEM Select icon をクリック


  3. アイコン画像の選択

    しばらくすると、アイコン画像の一覧が表示されます。選択する画像をクリックします。

    ここでは、下図のようにドアを選択します。

    FHEM アイコン画像の選択

    図3.16 アイコン画像の選択


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

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

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

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


  5. 別の設定方法

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

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

    FHEM アイコン画像設定後

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


  6. アイコン設定後

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

    FHEM アイコン画像設定後

    図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 アイコン画像設定後

    図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 のグラフの設定は下図になります。

    FileLog_EnO_sensor_0003B8BAのグラフの設定画面

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


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

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

    roomの新規作成

    図3.29 FHEM room の新規作成


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

    roomの新規作成後

    図3.30 FHEM room の新規作成後


  2. 既存の room に移動

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

    既存のroomに移動するデバイスを指定

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


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

    既存のroomを選択

    図3.32 FHEM room を選択


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

    既存のroomを移動後

    図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 デバイスのログファイルを選択


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

Unsortedの指定

図3.36 FHEM Unsorted の指定


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

Unsorted指定後のEnOceanページ

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


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

Unsorted指定後のUnsortedページ

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


3.4.4.3. room を hidden に設定

各スイッチを EnOcean ページから見えないように設定します。見えないようにするには roomhidden に設定します。

EnO_switch_0016297D を例で設定します。

まず、EnOcean ページのスイッチ EnO_switch_0016297D をクリックします。

スイッチデバイスの選択

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


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

hiddenの指定

図3.40 FHEM hidden の指定


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

hidden指定後のEnOceanページ

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


3.4.5. 状態の画像化

センサで取得する情報を画像で表示するように設定する手順をご紹介します。

ここでは、例として Door センサの closedopen ごとに画像を指定します。

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

    デバイスの選択

    図3.42 FHEM デバイスの選択


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

    Extend devStateIconをクリック

    図3.43 FHEM Extend devStateIcon をクリック


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

    openを入力

    図3.44 FHEM open を入力


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

    開いたドア画像を指定

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


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

    設定後の属性の表示1

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


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

    Extend devStateIconを再度クリック

    図3.47 FHEM Extend devStateIcon をクリック


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

    openを入力

    図3.48 FHEM devStateIcon closed を入力


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

    閉じたドア画像を指定

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


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

    設定後の属性の表示2

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


  10. 設定後、EnOcean ページをみると下図のように画像になっていることがわかります。

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

    設定後1

    図3.51 FHEM devStateIcon 閉じた状態


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

    設定後2

    図3.52 FHEM devStateIcon 開いた状態


3.5. 完成Webページ

下図が完成した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, 英語)


カテゴリ: 
ツイート