> 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_cue.md).

# キューアプリ

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

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

{% 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 CUEモード時のご案内です。

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

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

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

```
:80000000CF7F7382019E3B0180050F003400038135001205040406000000113008020B8611300102042E000000018015044006FFF00010FC1815044106FFF00018FC1815044206FFF00010FC0015044306FFF80000FC1015044406FFF00010FC1815044506FFE00018FBF815044606FFE80000FC0015044706FFE80010FBF815044806FFE80010FC0815044906FFE80010FC080C0E[CR][LF]
```

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

{% 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文字目から時系列順でX、Y、Zに並んだ加速度が10個分格納されます。\
加速度は、符号付整数で単位はmg(1重力加速度(g)の1/1000)です。\
＊データが12文字、ヘッダが8文字で、20文字ごとにデータが並ぶ。

```
[93:93+2]    80           磁気センサー
[103:103+12] FFF00010FC18 データ１ FFF0(X軸)/0010(Y軸)/FC18(Z軸)
[123:123+12] FFF00018FC18 データ２ FFF0(X軸)/0018(Y軸)/FC18(Z軸)
[143:143+12] FFF00010FC00 ...
[163:163+12] FFF80000FC10
[183:183+12] FFF00010FC18
[203:203+12] FFE00018FBF8
[223:223+12] FFE00018FBF8
[243:243+12] FFE80010FBF8
[263:263+12] FFE80010FC08
[283:283+12] FFE80010FC08 データ10 
```

### 磁気センサー

磁気センサーは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極)が一定期間センサーの近くにある場合、以下のように磁気センサーの値が変化します。

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

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

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

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

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

```python
>>> t =':80000000CF7F7382019E3B0180050F003400038135001205040406000000113008020B8611300102042E000000018015044006FFF00010FC1815044106FFF00018FC1815044206FFF00010FC0015044306FFF80000FC1015044406FFF00010FC1815044506FFE00018FBF815044606FFE80000FC0015044706FFE80010FBF815044806FFE80010FC0815044906FFE80010FC080C0E'
>>> x = int(t[103:103+4], 16) # 103文字目から4文字(データ1のX軸)取り出し整数値へ変換
>>> x = (-65536 + x) if x >= 32768 else x # 符号付き16ビット整数の対応
>>> y = int(t[107:107+4], 16) # 103文字目から4文字(データ1のX軸)取り出し整数値へ変換
>>> y = (-65536 + y) if y >= 32768 else y # 符号付き16ビット整数の対応
>>> z = int(t[111:111+4], 16) # 103文字目から4文字(データ1のX軸)取り出し整数値へ変換
>>> z = (-65536 + z) if z >= 32768 else z # 符号付き16ビット整数の対応
>>> print("x=%d, y=%d, z=%d" % (x, y, z))
x=-16, y=16, z=-1000
>>> v = int(t[93:93+2], 16) # 63文字目から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]    AE        LQI 
[11:11+4]  0098      続き番号 
[15:15+8]  810B6492  送信元のシリアルID
[23:23+2]  01        送信元の論理デバイスID
[25:25+2]  80        センサー種別(80で固定)
[27:27+2]  05        PAL基板バージョンとPAL基板ID(TWELITE CUEは05)
```

### 開閉センサーパルのデータの判別方法

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

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

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

## TWELITE CUEモード

### 出力例

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

<table data-header-hidden><thead><tr><th width="150"></th><th>意味</th><th width="150">バイト数</th><th width="150">データ例</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></td></tr><tr><td>2</td><td>LQI</td><td>1</td><td>B1</td><td></td></tr><tr><td>3</td><td>続き番号</td><td>2</td><td>001B</td><td></td></tr><tr><td>4</td><td>送信元シリアルID</td><td>4</td><td>810B6465</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></td></tr><tr><td>7</td><td>PAL IDとPAL Ver</td><td>1</td><td>05</td><td>TWELITE CUE</td></tr><tr><td>8</td><td>センサーデータ数</td><td>1</td><td>0F</td><td>15</td></tr><tr><td>9</td><td>センサーデータ0</td><td>7</td><td>00340003813500</td><td><a href="/pages/-MLzHVYBdjY-gjnukc3f#pakettopuropati">パケットプロパティ</a>参照</td></tr><tr><td>a</td><td>センサーデータ1</td><td>8</td><td>1205040403000000</td><td><a href="/pages/-MLzHVYBdjY-gjnukc3f#ibento">イベント</a>参照</td></tr><tr><td>b</td><td>センサーデータ2 (ヘッダ)</td><td>4</td><td>11300802</td><td>2バイト、拡張ビット有<br>電圧(電源電圧)<br>詳しくは<a href="/pages/-M4IUBLUZOtiC1MTN_uh#sensdta">こちら</a>を参照してください。 </td></tr><tr><td>c</td><td>センサーデータ2</td><td>2</td><td>0D34</td><td>3350ｍV</td></tr><tr><td>d</td><td>センサーデータ3 (ヘッダ)</td><td>4</td><td>11300102</td><td>2バイト、拡張ビット有<br>電圧(ADC1)<br>詳しくは<a href="/pages/-M4IUBLUZOtiC1MTN_uh#sensdta">こちら</a>を参照してください。 </td></tr><tr><td>e</td><td>センサーデータ3</td><td>2</td><td>052E</td><td>1432mV</td></tr><tr><td>f</td><td>センサーデータ4 (ヘッダ)</td><td>4</td><td>00000001</td><td><p>1バイト拡張ビットなし</p><p>ホールIC</p><p>詳しくは<a href="/pages/-M4IUBLUZOtiC1MTN_uh#sensdta">こちら</a>を参照してください。 </p></td></tr><tr><td>g</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>h</td><td>センサーデータ5 (ヘッダ)</td><td>4</td><td>15044006</td><td><p>符号あり2バイト、拡張ビット有</p><p>加速度(1サンプル目)</p><p>詳しくは<a href="/pages/-M4IUBLUZOtiC1MTN_uh#sensdta">こちら</a>を参照してください。 </p></td></tr><tr><td>i</td><td>センサーデータ5(X軸) </td><td>2</td><td>FC28</td><td>X = 392mg</td></tr><tr><td>j</td><td>センサーデータ5(Y軸)</td><td>2</td><td>FFB0</td><td>Y = -800mg</td></tr><tr><td>k</td><td>センサーデータ5(Z軸)</td><td>2</td><td>0018</td><td>Z = 240mg</td></tr><tr><td>l</td><td>センサーデータ6 (ヘッダ)</td><td>4</td><td>15044106</td><td><p>符号あり2バイト、拡張ビット有</p><p>加速度(2サンプル目)</p><p>詳しくは<a href="/pages/-M4IUBLUZOtiC1MTN_uh#sensdta">こちら</a>を参照してください。 </p></td></tr><tr><td>m</td><td>センサーデータ6(X軸)</td><td>2</td><td>FC28</td><td>X = 176mg</td></tr><tr><td>n</td><td>センサーデータ6(Y軸)</td><td>2</td><td>FFB0</td><td>Y = -1248mg</td></tr><tr><td>o</td><td>センサーデータ6(Z軸)</td><td>2</td><td>0008</td><td>Z = -96mg</td></tr><tr><td></td><td>中略</td><td></td><td></td><td></td></tr><tr><td>p</td><td>チェックサム1</td><td>1</td><td>A6</td><td>1～pの1つ前までのCRC8</td></tr><tr><td>q</td><td>チェックサム2</td><td>1</td><td>2C</td><td>1～pまでのLRC</td></tr></tbody></table>

### パケットプロパティ

```
00340003810402
^1^2^3^4^5^6^7
```

|   | 意味       | バイト数 | データ例 | 備考                                                                                           |
| - | -------- | ---- | ---- | -------------------------------------------------------------------------------------------- |
| 1 | 各種情報ビット値 | 1    | 00   | 拡張バイトなし、符号なしChar                                                                             |
| 2 | データソース   | 1    | 34   | 起床要因                                                                                         |
| 3 | 拡張バイト    | 1    | 00   |                                                                                              |
| 4 | データ長     | 1    | 03   |                                                                                              |
| 5 | パケットID   | 1    | 81   | <p>0～127、MSBはイベントがあるかどうか<br>0もしくは0x80はADC1と電源電圧、イベント以外はデータがないことを示す</p>                       |
| 6 | 起床要因センサー | 1    | 04   | <p>磁気センサー:0x00<br>温度:0x01<br>湿度:0x02<br>照度:0x03<br>加速度:0x04<br>DIO:0x31</p><p>タイマー:0x35</p>  |
| 7 | 起床要因     | 1    | 02   | <p>送信要因 イベントが発生した:0x00<br>値が変化した:0x01<br>値が閾値を超えた:0x02<br>閾値を下回った:0x03<br>閾値の範囲に入った:0x04</p> |

### イベント

```
1205040410000000
^1^2^3^4^5^6^7^8
```

|   | 意味       | バイト数 | データ例   | 備考                                                                                                                                                                                                                       |
| - | -------- | ---- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 1 | 各種情報ビット値 | 1    | 12     | 拡張バイトあり、符号なしLong                                                                                                                                                                                                         |
| 2 | データソース   | 1    | 05     | イベント                                                                                                                                                                                                                     |
| 3 | 拡張バイト    | 1    | 04     | <p>イベントの発生要因</p><p>磁気センサー:0x00<br>温度:0x01<br>湿度:0x02<br>照度:0x03<br>加速度:0x04</p><p>MSBが1の場合はデータ2にデータが存在する。</p>                                                                                                            |
| 4 | データ長     | 1    | 04     |                                                                                                                                                                                                                          |
| 5 | データ1     | 1    | 10     | <p><strong>イベント発生要因が磁気センサーの場合</strong></p><p>0x00(0):近くに磁石がない<br>0x01(1):磁石のN極が近くにある<br>0x02(2):磁石のS極が近くにある</p><p></p><p><strong>イベント発生要因が加速度の場合</strong></p><p>0x01(1)～0x06(6)：さいころ<br>0x08(8)：シェイク<br>0x10(16)：ムーブ</p> |
| 6 | データ2     | 3    | 000000 | 未使用                                                                                                                                                                                                                      |
