> For the complete documentation index, see [llms.txt](https://wings.twelite.info/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wings.twelite.info/how-to-use/parent-mode/receive-message/app_aria.md).

# アリアアプリ

TWELITE ARIAには温湿度センサーと磁気センサーが搭載されており、両方のセンサーのデータも出力メッセージに含まれます。

このページでは出力メッセージからそれらのセンサーデータの読み方について解説します。

{% hint style="info" %}
書式は[パルアプリ](/how-to-use/parent-mode/receive-message/app_pal.md)と同様です。詳しい説明は[こちら](/how-to-use/parent-mode/receive-message/app_pal/app_pal-detail.md)をご覧ください。
{% endhint %}

## センサーデータの簡易的な読み方

{% hint style="info" %}
以下のご案内はTWELITE ARIAモード時のご案内です。

開閉センサーパルモードの場合は[こちら](/how-to-use/parent-mode/receive-message/app_pal.md#sensparu)をご確認ください。
{% endhint %}

下記のデータ羅列は、: に始まり改行コードまでの１６進数データをテキストで表現したものです。

```
:80000000CF00028201BAA201800607003400038135001205350401000000113008020D201130010204ED00000001800501000209D0010200020F347934[CR][LF]
```

上記は逐次解釈する書式ですので、厳密に解釈するのは煩雑です。&#x20;

{% hint style="info" %}
データの詳細情報は[こちら](/how-to-use/parent-mode/receive-message/app_pal/app_pal-detail.md)をご参照ください。
{% endhint %}

そのため、各センサーの値の場所とその抽出例をご説明します。\
その際、: を 0 文字目とします。

### データの位置の表記法

以下の説明では、データの位置を示す際、Pythonのリストの指定の表記ような以下の書式でご案内します。

```
[データの開始位置:データの開始位置+文字数]
```

例えば、15文字目から4文字を指定する場合は、以下のように表記します。

```
[15:15+4]
```

### 温湿度センサー

温度などのセンサーデータは103文字目から118文字目までに含まれております。\
各データの位置やデータ形式は以下の通りです。

```
データ位置   意味
[103:103+4] 温度(符号付整数、単位は℃の100倍(23.56℃→2356))
[115:115+4] 湿度(符号無整数、単位は%の100倍(25.99%→2599))
```

### 磁気センサー

磁気センサーは93文字目から2文字分です。\
磁気センサーは下表の値を出力します。

<table><thead><tr><th width="150">磁気センサーデータ</th><th>意味</th></tr></thead><tbody><tr><td>磁気センサーのデータ</td><td>意味</td></tr><tr><td>00</td><td>磁石が遠ざかった。</td></tr><tr><td>01</td><td>磁石のN極が近づいた。</td></tr><tr><td>02</td><td>磁石のS極が近づいた。</td></tr><tr><td>80</td><td>磁石が近くにない。(タイマーによる定期送信)</td></tr><tr><td>81</td><td>磁石のN極が近くにある。(タイマーによる定期送信)</td></tr><tr><td>82</td><td>磁石がS極が近くにある。(タイマーによる定期送信)</td></tr></tbody></table>

例えば、磁石が近くにない状態から、磁石(N極)が一定期間センサーの近くにある場合、以下のように磁気センサーの値が変化します。磁石(N極)が一定期間センサーの近くにある場合、以下のように磁気センサーの値が変化します。

```
80 -- 80 -- 80 -- 01(※) -- 81 -- 81 --
```

※ 多くの場合は磁石のN極を検出したときに01になりますが、設置環境によっては、出力値が一定期間安定せず、02や稀に00が出力される場合があります。

また、磁石が近くにあるかだけ知りたい場合は、94文字目だけ確認し、0だったら磁石が近くにない、1または2の時は磁石が近くにあると判定します。

### センサーのデータの抽出例

以下は、温湿度と磁気センサーのデータを取得するPythonの対話モードでの実行例です。\
出力メッセージから、温度、湿度、照度の文字列を取り出し、数値に変換します。その際、そのままだと符号無の数値ですので、温度は符号付の数値に変換します。\
そのあと、センサーのデータを出力しますが、温度と湿度データは100倍されたデータですので、出力時に100で割った値を出力しています。\
また、磁気センサーのデータをシリアル出力から抜き出し、上表に従って磁気センサーが検出している状態に変換し、加速度データと磁気センサーの情報を標準出力しております。

```python
>>> t = ':80000000CF00028201BAA201800607003400038135001205350401000000113008020D201130010204ED00000001800501000209D0010200020F347934'
>>> temp = int(t[103:103+4], 16) # 63文字目から4文字取り出し、整数値に変換
>>> temp = (-65536 + temp) if temp >= 32768 else temp # 符号付き16ビット整数の対応 
>>> hum = int(t[115:115+4], 16)
>>> print('temperature: %f, humidity: %f' % ( temp/100.0, hum/100.0 ))
temperature: 25.120000, humidity: 38.920000
>>> v = int(t[93:93+2], 16) # 93文字目から2文字取り出し、整数値に変換
>>> periodic = True if (v & 0x80) else False # 定期送信パケットかどうか調べる(Trueだったら定期送信)
>>> status = 'S' if (v & 0x4F) == 2 else 'N' if (v & 0x4F) == 1 else 'Open' # 磁気センサーの状態を取得する。
>>> print('Magnet: %s, %s' % (periodic, status))
Magnet: True, Open
```

### アドレスなどのセンサー以外のデータ

出力メッセージは、センサーのデータ以外に以下の情報が含まれております。

```
データ位置  データ例   意味
[1:1+8]    80000000  中継機のシリアルID
[9:9+2]    CF        LQI 
[11:11+4]  0002      続き番号 
[15:15+8]  8201BAA2  送信元のシリアルID
[23:23+2]  01        送信元の論理デバイスID
[25:25+2]  80        センサー種別(80で固定)
[27:27+2]  06        PAL基板バージョンとPAL基板ID(TWELITE ARIAは06)
```

### TWELITE ARIAのデータの判別方法

親機・中継機アプリはTWELITE PALからだけではなく、様々なアプリのデータを受信することができるので、出力メッセージがどのアプリの出力か区別する必要があります。\
\
TWELITE ARIAの出力メッセージは、改行コード抜きで123文字(改行コードありでは125文字)で、ほかのセンサーパルなどのデータとは文字数が違うため、文字数で見分けると簡単です。\
ただし、シリアル通信アプリなどのように受信メッセージの文字数が決まっていないものもありますので、文字数だけでは見分けられない場合があります。

より厳密に区別するには、文字数と以下の項目を確認してください。

* 1文字目が8であること
* 15文字目が8であること
* 25、26文字目が '80' であること
* 27、28文字目が '06' であること

## TWELITE ARIAモード

### 出力例

```
:80000000CF00028201BAA201800607003400038135001205350401000000113008020D201130010204ED00000001800501000209D0010200020F347934
 ^^^^^^^1^2^^^3^^^^^^^4^5^6^7^8^^^^^^^9^^^^^a^^^^^^^b^^^^^^^c^^^^^^^d^^^e^^^^^^^f^^^g^^^^^^^h^i^^^^^^^j^^^k^^^^^^^l^^^m^n^o
```

<table><thead><tr><th width="150"></th><th></th><th width="150"></th><th width="171"></th><th></th></tr></thead><tbody><tr><td></td><td>意味</td><td>バイト数</td><td>データ例</td><td>備考</td></tr><tr><td>1</td><td>中継機シリアルID ​</td><td>4</td><td>80000000</td><td>中継されていない場合は80000000</td></tr><tr><td>2</td><td>LQI</td><td>1</td><td>CF</td><td>大きいほど電波品質が良い</td></tr><tr><td>3</td><td>続き番号</td><td>2</td><td>0002</td><td></td></tr><tr><td>4</td><td>送信元シリアルID</td><td>4</td><td>8201BAA2</td><td></td></tr><tr><td>5</td><td>送信元LID</td><td>1</td><td>01</td><td></td></tr><tr><td>6</td><td>センサー種別</td><td>1</td><td>80</td><td>TWELITE ARIAは80固定</td></tr><tr><td>7</td><td>PAL ID</td><td>1</td><td>06</td><td>TWELITE ARIAモードは06</td></tr><tr><td>8</td><td>センサーデータ数</td><td>1</td><td>07</td><td></td></tr><tr><td>9</td><td>センサーデータ0(ヘッダ)</td><td>4</td><td>00340003</td><td>拡張バイトなし、符号なし1バイト、パケットプロパティが3バイト</td></tr><tr><td>a</td><td>センサーデータ0</td><td>3</td><td>813500</td><td>タイマーイベントで送信した</td></tr><tr><td>b</td><td>センサーデータ1(ヘッダ)</td><td>4</td><td>12053504</td><td>拡張バイトあり、符号なしLong、タイマーイベント情報</td></tr><tr><td>c</td><td>センサーデータ1</td><td>4</td><td>01000000</td><td>タイマーが起床させた</td></tr><tr><td>d</td><td>センサーデータ2(ヘッダ)</td><td>4</td><td>11300802</td><td>符号なし2バイト、電源電圧</td></tr><tr><td>e</td><td>センサーデータ2</td><td>2</td><td>0D20</td><td>3360mV</td></tr><tr><td>f</td><td>センサーデータ3(ヘッダ)</td><td>4</td><td>11300102</td><td>符号なし2バイト、ADC1</td></tr><tr><td>g</td><td>センサーデータ3</td><td>2</td><td>04ED</td><td>1261mV</td></tr><tr><td>h</td><td>センサーデータ4(ヘッダ)</td><td>4</td><td>00000001</td><td>拡張バイトなし、符号なし1バイト、磁気センサー</td></tr><tr><td>i</td><td>センサーデータ4</td><td>1</td><td>80</td><td>変化なし、オープン<br>(00: 磁石が離れた。<br>01: N極が近づいた<br>02: S局が近づいた<br>80: 変化なし(磁石なし)<br>81: 変化なし(N極が近くにある)<br>82: 変化なし(S極が近くにある))</td></tr><tr><td>j</td><td>センサーデータ5(ヘッダ)</td><td>4</td><td>05010002</td><td>拡張バイトなし、符号あり2バイト、温度</td></tr><tr><td>k</td><td>センサーデータ5</td><td>2</td><td>09D0</td><td>25.12℃</td></tr><tr><td>l</td><td>センサーデータ6(ヘッダ)</td><td>4</td><td>01020002</td><td>拡張バイトなし、符号なし2バイト、湿度</td></tr><tr><td>m</td><td>センサーデータ6</td><td>2</td><td>0F34</td><td>38.92%</td></tr><tr><td>n</td><td>チェックサム1</td><td>1</td><td>79</td><td>1～ｍまでのLRC</td></tr><tr><td>o</td><td>チェックサム2</td><td>1</td><td>34</td><td>1～nまでのCRC8</td></tr></tbody></table>
