キューアプリ
TWELITE CUEには加速度センサーと磁気センサーが搭載されており、両方のセンサーのデータも出力メッセージに含まれます。
このページでは出力メッセージからそれらのセンサーデータの読み方について解説します。
センサーデータの簡易的な読み方
下記のデータ羅列は、: に始まり改行コードまでの16進数データをテキストで表現したものです。
:80000000CF7F7382019E3B0180050F003400038135001205040406000000113008020B8611300102042E000000018015044006FFF00010FC1815044106FFF00018FC1815044206FFF00010FC0015044306FFF80000FC1015044406FFF00010FC1815044506FFE00018FBF815044606FFE80000FC0015044706FFE80010FBF815044806FFE80010FC0815044906FFE80010FC080C0E[CR][LF]
上記は逐次解釈する書式ですので、厳密に解釈するのは煩雑です。
そのため、各センサーの値の場所とその抽出例をご説明します。
その際、: を 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 データ1 FFF0(X軸)/0010(Y軸)/FC18(Z軸)
[123:123+12] FFF00018FC18 データ2 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文字分です。
磁気センサーは下表の値を出力します。
磁気センサーデータ | 意味 |
---|---|
磁気センサーのデータ | 意味 |
00 | 磁石が遠ざかった。 |
01 | 磁石のN極が近づいた。 |
02 | 磁石のS極が近づいた。 |
80 | 磁石が近くにない。(タイマーによる定期送信) |
81 | 磁石のN極が近くにある。(タイマーによる定期送信) |
82 | 磁石がS極が近くにある。(タイマーによる定期送信) |
例えば、磁石が近くにない状態から、磁石(N極)が一定期間センサーの近くにある場合、以下のように磁気センサーの値が変化します。
80 -- 80 -- 80 -- 01(※) -- 81 -- 81 --
※ 多くの場合は磁石のN極を検出したときに01になりますが、設置環境によっては、出力値が一定期間安定せず、02や稀に00が出力される場合があります。
また、磁石が近くにあるかだけ知りたい場合は、94文字目だけ確認し、0だったら磁石が近くにない、1または2の時は磁石が近くにあると判定します。
センサーのデータの抽出例
1サンプル目の加速度と磁気センサーのデータを取得するPythonの対話モードでの実行例です。
シリアルメッセージから、1サンプル目の加速度の文字列を取り出し、数値に変換します。その際、そのままだと符号無の数値ですので、符号付の数値に変換します。
磁気センサーのデータをシリアル出力から抜き出し、上表に従って磁気センサーが検出している状態に変換し、加速度データと磁気センサーの情報を標準出力しております。
>>> 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
意味 | バイト数 | データ例 | 備考 | |
---|---|---|---|---|
1 | 中継機シリアルID | 4 | 80000000 | |
2 | LQI | 1 | B1 | |
3 | 続き番号 | 2 | 001B | |
4 | 送信元シリアルID | 4 | 810B6465 | |
5 | 送信元LID | 1 | 01 | |
6 | センサー種別 | 1 | 80 | |
7 | PAL IDとPAL Ver | 1 | 05 | TWELITE CUE |
8 | センサーデータ数 | 1 | 0F | 15 |
9 | センサーデータ0 | 7 | 00340003813500 | パケットプロパティ 参照 |
a | センサーデータ1 | 8 | 1205040403000000 | イベント 参照 |
b | センサーデータ2 (ヘッダ) | 4 | 11300802 | 2バイト、拡張ビット有 |
c | センサーデータ2 | 2 | 0D34 | 3350mV |
d | センサーデータ3 (ヘッダ) | 4 | 11300102 | 2バイト、拡張ビット有 |
e | センサーデータ3 | 2 | 052E | 1432mV |
f | センサーデータ4 (ヘッダ) | 4 | 00000001 | 1バイト拡張ビットなし ホールIC 詳しくはこちらを参照してください。 |
g | センサーデータ4 | 1 | 80 | 変化なし、オープン |
h | センサーデータ5 (ヘッダ) | 4 | 15044006 | 符号あり2バイト、拡張ビット有 加速度(1サンプル目) 詳しくはこちらを参照してください。 |
i | センサーデータ5(X軸) | 2 | FC28 | X = 392mg |
j | センサーデータ5(Y軸) | 2 | FFB0 | Y = -800mg |
k | センサーデータ5(Z軸) | 2 | 0018 | Z = 240mg |
l | センサーデータ6 (ヘッダ) | 4 | 15044106 | 符号あり2バイト、拡張ビット有 加速度(2サンプル目) 詳しくはこちらを参照してください。 |
m | センサーデータ6(X軸) | 2 | FC28 | X = 176mg |
n | センサーデータ6(Y軸) | 2 | FFB0 | Y = -1248mg |
o | センサーデータ6(Z軸) | 2 | 0008 | Z = -96mg |
中略 | ||||
p | チェックサム1 | 1 | A6 | 1~pの1つ前までのCRC8 |
q | チェックサム2 | 1 | 2C | 1~pまでのLRC |
パケットプロパティ
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 | 0~127、MSBはイベントがあるかどうか |
6 | 起床要因センサー | 1 | 04 | 磁気センサー:0x00 タイマー:0x35 |
7 | 起床要因 | 1 | 02 | 送信要因 イベントが発生した:0x00 |
イベント
1205040410000000
^1^2^3^4^5^6^7^8
意味 | バイト数 | データ例 | 備考 | |
---|---|---|---|---|
1 | 各種情報ビット値 | 1 | 12 | 拡張バイトあり、符号なしLong |
2 | データソース | 1 | 05 | イベント |
3 | 拡張バイト | 1 | 04 | イベントの発生要因 磁気センサー:0x00 MSBが1の場合はデータ2にデータが存在する。 |
4 | データ長 | 1 | 04 | |
5 | データ1 | 1 | 10 | イベント発生要因が磁気センサーの場合 0x00(0):近くに磁石がない イベント発生要因が加速度の場合 0x01(1)~0x06(6):さいころ |
6 | データ2 | 3 | 000000 | 未使用 |