Howto

Armadillo-IoT G3/X1で「ワッティー株式会社製 EnOceanセンサー HYJ」からデータを収集

このHowtoでは、Armadillo-IoT G3/X1(以下Armadillo-IoT) を用いたワッティー株式会社製 EnOceanセンサー HYJ-A-01-1230(以下、HYJ)のデータ収集手順とデータ構造について紹介します。
HYJは搭載されたソーラーバッテリーの電力で稼働し、一定間隔で温度データをEnOceanで送信します。

詳細な仕様につきましては、HYJの取扱い説明書をご確認ください。

hexdumpコマンドによるデータ取得

はじめにhexdumpコマンドを用いて、一定間隔で送信されている温度データを取得します。
HYJの温度センサー接続数によって取得するデータの長さが変化するため、温度センサー接続数を確認します。
また温度データはEnOceanで送信されるため、Armadillo-IoTに「Armadillo-IoT EnOcean アドオンモジュール EN00」が接続されていることを確認します。

アドオンモジュールは接続するArmadillo-IoTの種類,アドオンインタフェースによって対応するttyデバイスファイルが変化します。
Armadillo-IoT種類,アドオンインターフェースと、TTYデバイスファイルの対応を次に記載します。

Armadillo-IoT種類 アドオンインタフェース  ttyデバイスファイル
Armadillo-IoT G3 CON1 ttymxc0
Armadillo-IoT G3 CON2 ttymxc1
Armadillo-IoT X1 CON1 ttymxc6

このHowtoでは例として、各機器は以下の条件で使用します。

■HYJ

  • 接点入力ありタイプを使用
  • 温度3ch+接点1chとして使用
     - 温度センサー「Pt100B-101」「Pt100B-201」「Pt100B-301」をそれぞれ右穴から接続
     - スイッチ接点は下部2穴を接続

■Armadillo-IoT

  • CON1に[Armadillo-IoT EnOcean アドオンモジュール EN00]を接続

HYJのソーラーパネルが光を受けていることを確認し、Armadillo-IoTからコマンドを入力します。
入力から数秒後、一定間隔でデータが出力されます。

[armadillo ~]# stty -F /dev/ttymxc0 57600 raw
[armadillo ~]# hexdump -v /dev/ttymxc0
0000000 0055 020b f00a 072f 0004 30f6 a69a af99
0000010 0129 8b32 0055 020b f00a 072f 0004 30f6
0000020 a69a af99 0129 9934 0055 020b f00a 072f
0000030 0004 30f6 a69a b399 017d 9934 0055 020b
0000040 f00a 072f 0004 30f6 a69a afa9 01d0 9934
...

データ構造

上記で収集したデータの構造を説明します。
取得データは次のような構造をしているため、データを並べ直します。

  • データ列の頭7文字はセンサーデータとは無関係の「hexdumpのデータ取得回数」
  • 「0055」を起点としており、1行でデータが終了していない
  • 2byte毎にまとめられているデータはそれぞれリトルエンディアン

上記条件を踏まえ、取得データは次のように並べ直すことができます。

5500 0b02 0af0 2f07 0400 f630 9aa6 99af 2901 328b
5500 0b02 0af0 2f07 0400 f630 9aa6 99af 2901 3499
5500 0b02 0af0 2f07 0400 f630 9aa6 99b3 7d01 3499 
5500 0b02 0af0 2f07 0400 f630 9aa6 a9af d001 3499

並べ替えたデータ構造は次の表のようになっています。
データ内容の詳細については取扱い説明書をご確認ください。

例:5500 0b02 0af0 2f07 0400 f630 9aa6 99af 2901 328b

データ値 内容 解析後の値 データ詳細
55 Sync 55 データの先頭値(固定)
00 0b DataLength 12byte Sender ID~Option dataまでのbyte数
02 Option Length 2byte Option dataのbyte数
0a Packet Type タイプA 通信頻度のタイプ
f0 CRC f0 上記5byte分のCRC値
2f 07 Telegram Type 2f 07 データの送信タイプ
04 00 f6 30 Sender ID 04:00:f6:30 デバイスのID
9a a6 99 af Data 27.3℃,27.5℃,27.1℃,SW=1 各センサーのデータとスイッチのon/off
29 CRC 29 Telegram Type~DataまでのCRC値
01 32 Option data 0132 オプションデータ
8b CRC 8b Option dataのCRC値

Dataの解析方法

「データ構造」にて分解したデータ値のうち、「Data」のみ特殊な解析が必要なため方法を説明します。
なお今回の例ではハードウェア構成が「温度3ch+接点1ch」での分解となるため、「温度4ch」等の構成である場合はご注意ください。
詳しい情報については取扱い説明書をご確認ください。
例:9a a6 99 af

1.16進数の4byteをすべて2進数に分解する
例:「10011010」「10100110」「10011001」「10101111」

2.10bitでまとめ直す。余りは1bitずつまとめる
データ構造は左から「センサー1」「センサー2」「センサー3」「スイッチ」「フィラー」
例:「1001101010」「1001101001」「1001101011」「1」「1」

3.纏めた10bitを10進数に変換する
例:「618」「617」「619」「1」「1」

4.専用の変換式を用いて温度を算出する
変換式:温度(℃)=130-(「10進数値」/1023*170)
例:「27.3℃」「27.5℃」「27.1℃」「sw=1(on)」「1(フィラー)」

Pythonによるデータ収集

取得できるデータを、pythonを用いて自動で計算し表示させました。

以下より必要な各ファイルをダウンロード可能です。

以下、実行手順を記載します。
1.必要なパッケージをインストール

[armadillo ~]# apt-get update
[armadillo ~]# apt-get install python python-pip
[armadillo ~]# pip install -r requirements.txt

2.設定ファイル「enocean_sensor.conf」を適切な値に設定する
以下設定ファイル例

[core]
port=/dev/ttymxc0

[sensor]
room1=Watty_HYJ,04:00:F6:30,temp,temp,temp,sw
  • port:使用するシリアルポート
  • room1:「センサー名」「センサーデバイスID」「接続センサーch数のtemp、接点ch数のsw(温度3ch+接点1ch)」
    room*は複数指定可能
    変数名は変更可能

[sensor]にてセンサーデバイスIDを指定しているが、この内容は下図のようにデバイスの裏面に記載されている。

HYJ裏面

3.「enocean_sensor.conf」を「/etc/enocean_sensor.conf」に配置

4.「python enocean_sensor.py」コマンドで実行

このプログラムを実行することで、次のような結果が得られます。

{"Watty_HYJ","2018-05-01 14:20:49","sensor_id=04:00:F6:30","temperature0=24.81","temperature1=25.64","temperature2=24.98","sw0=1"}
{"Watty_HYJ","2018-05-01 14:20:59","sensor_id=04:00:F6:30","temperature0=25.31","temperature1=25.47","temperature2=24.98","sw0=1"}
{"Watty_HYJ","2018-05-01 14:21:09","sensor_id=04:00:F6:30","temperature0=24.64","temperature1=25.31","temperature2=24.64","sw0=1"}
...

このようにデータ収集を行った後、「クラウドにアップする」「ログファイルに保存」等の運用が可能です。