# キューアプリ

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

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

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

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

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

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

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

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

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

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

{% hint style="info" %}
データの詳細情報は[こちら](https://wings.twelite.info/how-to-use/parent-mode/receive-message/app_pal/app_pal-detail)をご参照ください。
{% 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="#pakettopuropati">パケットプロパティ</a>参照</td></tr><tr><td>a</td><td>センサーデータ1</td><td>8</td><td>1205040403000000</td><td><a href="#ibento">イベント</a>参照</td></tr><tr><td>b</td><td>センサーデータ2 (ヘッダ)</td><td>4</td><td>11300802</td><td>2バイト、拡張ビット有<br>電圧(電源電圧)<br>詳しくは<a href="../app_pal#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="../app_pal#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="../app_pal#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="../app_pal#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="../app_pal#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 | 未使用                                                                                                                                                                                                                      |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wings.twelite.info/how-to-use/parent-mode/receive-message/app_cue.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
