パルアプリ

App_PAL

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

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

:80000000CF7F7382019E3B0180050F003400038135001205040406000000113008020B8611300102042E000000018015044006FFF00010FC1815044106FFF00018FC1815044206FFF00010FC0015044306FFF80000FC1015044406FFF00010FC1815044506FFE00018FBF815044606FFE80000FC0015044706FFE80010FBF815044806FFE80010FC0815044906FFE80010FC080C0E[CR][LF]

データの詳細情報はこちらをご参照ください。

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

そのため、以下に使用するセンサーパルごとのデータのある場所とその抽出例のコードを示します。 その際、: を 0 文字目とします。

データの位置の表記法

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

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

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

[15:15+4]

開閉センサーパル

開閉センサーパルからのデータを受信すると以下のような出力メッセージがシリアル出力されます。

:80000000A8001C82012B1E01808103113008020D0C1130010203E40000000101EC6E[CR][LF]

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

磁気センサーデータ意味

磁気センサーのデータ

意味

00

磁石が遠ざかった。

01

磁石のN極が近づいた。

02

磁石のS極が近づいた。

80

磁石が近くにない。(タイマーによる定期送信)

81

磁石のN極が近くにある。(タイマーによる定期送信)

82

磁石がS極が近くにある。(タイマーによる定期送信)

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

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

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

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

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

以下は磁気センサーの状態を抜き出すためのPythonの対話モードでの実行例です。 以下の例では、63文字目と64文字目を抜き出して数値に変換し、上表に従って磁気センサーが検出している状態に変換し、標準出力しております。

>>> t = ':80000000A8001C82012B1E01808103113008020D0C1130010203E40000000101EC6E'
>>> v = int(t[63:63+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: False, N

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

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

データ位置  データ例   意味
[1:1+8]    80000000  中継機のシリアルID
[9:9+2]    A8        LQI 
[11:11+4]  001C      続き番号 
[15:15+8]  82012B1E  送信元のシリアルID
[23:23+2]  01        送信元の論理デバイスID
[25:25+2]  80        センサー種別(80で固定)
[27:27+2]  81        PAL基板バージョンとPAL基板ID(開閉センサーパルは81)

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

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

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

  • 1文字目が8であること

  • 15文字目が8であること

  • 25、26文字目が '80' であること

  • 27、28文字目が '81' であること

環境センサーパル

環境センサーパルからのデータを受信すると以下のような出力メッセージがシリアル出力されます。

:8000000084811F810EFF6D04808205113008020AEB11300102035A0501000209E3010200020E3A02030004000001BE6C00[CR][LF]

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

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

以下は、環境センサーパルのデータを取得するためのPythonの対話モードでの実行例です。 出力メッセージから、温度、湿度、照度の文字列を取り出し、数値に変換します。その際、そのままだと符号無の数値ですので、温度は符号付の数値に変換します。 そのあと、センサーのデータを出力しますが、温度と湿度データは100倍されたデータですので、出力時に100で割った値を出力しています。

>>> t = ':8000000084811F810EFF6D04808205113008020AEB11300102035A0501000209E3010200020E3A02030004000001BE6C00'
>>> temp = int(t[63:63+4], 16) # 63文字目から4文字取り出し、整数値に変換
>>> temp = (-65536 + temp) if temp >= 32768 else temp # 符号付き16ビット整数の対応 
>>> hum = int(t[75:75+4], 16)
>>> illum = int(t[87:87+8], 16)
>>> print('temperature: %f' % ( temp/100.0 ))
temperature: 25.310000
>>> print('humidity: %f' % ( hum/100.0 ))
humidity: 36.420000
>>> print('illuminance: %d' % illum)
illuminance: 446

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

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

データ位置  データ例   意味
[1:1+8]    80000000  中継機のシリアルID
[9:9+2]    84        LQI 
[11:11+4]  8114      続き番号 
[15:15+8]  810EFF6D  送信元のシリアルID
[23:23+2]  04        送信元の論理デバイスID
[25:25+2]  80        センサー種別(80で固定)
[27:27+2]  82        PAL基板バージョンとPAL基板ID(開閉センサーパルは81)

環境センサーパルのデータの判別方法

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

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

  • 1文字目が8であること

  • 15文字目が8であること

  • 25、26文字目が '80' であること

  • 27、28文字目が '82' であること

動作センサーパル

動作センサーパルからのデータを受信すると以下のような出力メッセージがシリアル出力されます。

:80000000BA002382011CEF01808312113008020D0211300102055C1504400600100010045015044106000800100430150442060000001004381504430600080018043015044406000000180458150445060000002004381504460600080018042815044706FFE80010042015044806FFF00010043815044906FFE80018043015044A06FFF80018044015044B06FFF80018041815044C0600000010042015044D0600000028045015044E0600000008043815044F0600000018043828A5[CR][LF]

加速度データは63文字目から時系列順でX、Y、Zに並んだ加速度が16個分格納されます。 加速度は、符号付整数で単位はmg(1重力加速度(g)の1/1000)です。 *データが12文字、ヘッダが8文字で、20文字ごとにデータが並びます。

データ位置    データ例      意味
[63:63+12]   001000100450 データ1 0010(X軸)/0010(Y軸)/0450(Z軸)
[83:83+12]   000800100430 データ2 0008(X軸)/0010(Y軸)/0430(Z軸)
[103:103+12] 000000100438 ...
[123:123+12] 000800180430
[143:143+12] 000000180458
[163:163+12] 000000200438
[183:183+12] 000800180428
[203:203+12] FFE800100420
[223:223+12] FFF000100438
[243:243+12] FFE800180430 
[263:263+12] FFF800180440
[283:283+12] FFF800180418
[303:303+12] 000000100420
[323:323+12] 000000280450
[343:343+12] 000000080438
[363:363+12] 000000180438 データ16

以下は、1サンプル目の加速度を取得するためのPythonの対話モードでの実行例です。 出力メッセージから、1サンプル目の加速度の文字列を取り出し、数値に変換します。その際、そのままだと符号無の数値ですので、符号付の数値に変換します。 変換後、加速度データを出力します。

>>> t = ':80000000BA002382011CEF01808312113008020D0211300102055C1504400600100010045015044106000800100430150442060000001004381504430600080018043015044406000000180458150445060000002004381504460600080018042815044706FFE80010042015044806FFF00010043815044906FFE80018043015044A06FFF80018044015044B06FFF80018041815044C0600000010042015044D0600000028045015044E0600000008043815044F0600000018043828A5'
>>> x = int(t[63:63+4], 16) # 63文字目から4文字取り出し、整数値に変換(X軸)
>>> x = (-65536 + x) if x >= 32768 else x # 符号付き16ビット整数の対応 
>>> y = int(t[67:67+4], 16) # 67文字目から4文字取り出し、整数値に変換(Y軸)
>>> y = (-65536 + y) if y >= 32768 else y # 符号付き16ビット整数の対応 
>>> z = int(t[71:71+4], 16) # 63文字目から4文字取り出し、整数値に変換(Z軸)
>>> z = (-65536 + z) if z >= 32768 else z # 符号付き16ビット整数の対応 
>>> print('x:%d, y:%d, z:%d' % ( x, y, z ))
x:16, y:16, z:1104

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

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

データ位置  データ例   意味
[1:1+8]    80000000  中継機のシリアルID
[9:9+2]    BA        LQI 
[11:11+4]  0023      続き番号 
[15:15+8]  82011CEF  送信元のシリアルID
[23:23+2]  01        送信元の論理デバイスID
[25:25+2]  80        センサー種別(80で固定)
[27:27+2]  83        PAL基板バージョンとPAL基板ID(開閉センサーパルは81)

動作センサーパルのデータの判別方法

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

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

  • 1文字目が8であること

  • 15文字目が8であること

  • 25、26文字目が '80' であること

  • 27、28文字目が '83' であること

出力例

以下は、パルごとのデータの出力例です。

開閉センサーパル

:80000000A8001C82012B1E01808103113008020D0C1130010203E40000000101EC6E
 ^^^^^^^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
 0                   10                  20                  30      

番号

バイト数

意味

データ例

内容

備考

1

4

中継機のシリアルID

80000000

中継無し

2

1

LQI

A8

168

3

2

続き番号

001C

28

4

4

送信元のシリアルID

82012B1E

送信元のシリアルIDは2012B1E

5

1

送信元の論理デバイスID

01

送信元の論理デバイスIDは01

6

1

センサー種別

80

7

1

PAL基板バージョンとPAL基板ID

81

開閉センサーパル Ver.1

8

1

センサーデータの数

03

3つ

9

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

a

1

データソース

30

ADC

b

1

拡張バイト

08

電源電圧

c

1

データ長

02

2バイト

d

2

データ

0D0C

3340mV

e

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

f

1

データソース

30

ADC

g

1

拡張バイト

01

ADC1

h

1

データ長

02

2バイト

i

2

データ

03E4

996mV

j

1

各種情報ビット値

00

拡張バイトなし

符号なしChar型

k

1

データソース

00

磁気

l

1

拡張バイト

00

0

m

1

データ長

01

1バイト

n

1

データ

01

磁石(N極)が近づいた

00: 磁石が離れた。 01: N極が近づいた 02: S局が近づいた 80: 変化なし(磁石なし) 81: 変化なし(N極が近くにある) 82: 変化なし(S極が近くにある)

o

1

チェックサム1

EC

p

1

チェックサム2

6E

環境センサーパル

​:8000000084811F810EFF6D04808205113008020AEB11300102035A0501000209E3010200020E3A02030004000001BE6C00
 ​^^^^^^^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^r^^^s^t^u^v^w^^^^^^^x^y^z
 0                   10                  20                  30                  40                

番号

バイト数

意味

データ例

内容

備考

1

4

中継機のシリアルID

80000000

中継無し

2

1

LQI

84

132

3

2

続き番号

811F

33055

4

4

送信元のシリアルID

810EFF6D

送信元のシリアルIDは810EFF6D

5

1

送信元の論理デバイスID

04

送信元の論理デバイスIDは04

6

1

センサー種別

80

7

1

PAL基板バージョンとPAL基板ID

82

環境センサーパル Ver.1

8

1

センサーデータの数

05

5つ

9

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

a

1

データソース

30

ADC

b

1

拡張バイト

08

電源電圧

c

1

データ長

02

2バイト

d

2

データ

0AEB

2795mV

e

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

f

1

データソース

30

ADC

g

1

拡張バイト

01

ADC1

h

1

データ長

02

2バイト

i

2

データ

035A

858mV

j

1

各種情報ビット値

05

拡張バイトなし

符号ありShort

k

1

データソース

01

温度

l

1

拡張バイト

00

0

m

1

データ長

02

2バイト

n

2

データ

09E3

25.31℃

o

1

各種情報ビット値

01

拡張バイトなし

符号なしShort

p

1

データソース

02

湿度

q

1

拡張バイト

00

0

r

1

データ長

02

2バイト

s

2

データ

0E3A

36.42%

t

1

各種情報ビット値

02

拡張バイトなし

符号ありLong

u

1

データソース

03

照度

v

1

拡張バイト

00

0

w

1

データ長

04

4バイト

x

4

データ

000001BE

446 lux

y

1

チェックサム1

6C

z

1

チェックサム2

00

動作センサーパル

出力例

:80000000BA002382011CEF01808312113008020D0211300102055C1504400600100010045015044106000800100430150442060000001004381504430600080018043015044406000000180458150445060000002004381504460600080018042815044706FFE80010042015044806FFF00010043815044906FFE80018043015044A06FFF80018044015044B06FFF80018041815044C0600000010042015044D0600000028045015044E0600000008043815044F0600000018043828A5
 ​^^^^^^^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^r^^^^^^^^^^^s  ...                                                                                                                                                                                                                                                               ^t^u^v^w^^^^^^^^^^^x^y^z
 0                   10                  20                  30                  40                  50                  60                  70                  80                  90                  100                 110                 120                 130                 140                 150                 160                 170                 180               

番号

バイト数

意味

データ例

内容

備考

1

4

中継機のシリアルID

80000000

中継無し

2

1

LQI

BA

186

3

2

続き番号

0023

35

4

4

送信元のシリアルID

82011CEF

送信元のシリアルIDは82011CEF

5

1

送信元の論理デバイスID

01

送信元の論理デバイスIDは01

6

1

センサー種別

80

7

1

PAL基板バージョンとPAL基板ID

83

動作センサーパル Ver.1

8

1

センサーデータの数

12

18

9

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

a

1

データソース

30

ADC

b

1

拡張バイト

08

電源電圧

c

1

データ長

02

2バイト

d

2

データ

0D02

3330mV

e

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

f

1

データソース

30

ADC

g

1

拡張バイト

01

ADC1

h

1

データ長

02

2バイト

i

2

データ

055C

1372mV

j

1

各種情報ビット値

15

拡張バイトあり

符号ありShort

k

1

データソース

04

加速度

l

1

拡張バイト

40

サンプリング周波数 : 100Hz

0サンプル目

m

1

データ長

06

6バイト

n

2

データ

001000100450

X : 16mg

Y : 16mg

Z : 1104mg

o

1

各種情報ビット値

15

拡張バイトあり

符号ありShort

p

1

データソース

04

加速度

q

1

拡張バイト

41

サンプリング周波数 : 100Hz

1サンプル目

r

1

データ長

06

2バイト

s

2

データ

000800100430

X : 8mg

Y : 16mg

Z : 1072mg

...

t

1

各種情報ビット値

15

拡張バイトあり

符号ありShort

u

1

データソース

04

加速度

v

1

拡張バイト

4F

サンプリング周波数 : 100Hz

15サンプル目

w

1

データ長

06

6バイト

x

4

データ

000000180438

X : 0mg

Y : 24mg

Z : 1080mg

y

1

チェックサム1

28

z

1

チェックサム2

A5

通知パル

:80000000C9BBC082014C3501808403113008020D0C1130010203F9120504041000000097C6
 ^^^^^^^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
 0                   10                  20                  30            

番号

バイト数

意味

データ例

データ例の内容

備考

1

4

中継機のシリアルID

80000000

中継無し

2

1

LQI

CQ

186

3

2

続き番号

BBC0

48064

4

4

送信元のシリアルID

82014C35

送信元のシリアルIDは82014C35

5

1

送信元の論理デバイスID

01

送信元の論理デバイスIDは01

6

1

センサー種別

80

7

1

PAL基板バージョンとPAL基板ID

84

通知パル Ver.1

8

1

センサーデータの数

03

3

9

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

a

1

データソース

30

ADC

b

1

拡張バイト

08

電源電圧

c

1

データ長

02

2バイト

d

2

データ

0D0C

3340mV

e

1

各種情報ビット値

11

拡張バイトあり 符号なしShort型

f

1

データソース

30

ADC

g

1

拡張バイト

01

ADC1

h

1

データ長

02

2バイト

i

2

データ

03F9

1017mV

j

1

各種情報ビット値

12

拡張バイトあり符号なしLong

k

1

データソース

05

イベント

l

1

拡張バイト

04

加速度によるイベント

m

1

データ長

04

4バイト

n

1

データ1

10

イベント0x10(16)が発生

加速度の場合 0x01(1)~0x06(6):さいころ 0x08(8):シェイク 0x10(16):タップ

o

3

データ2

000000

0

将来の拡張用。現在は未使用

p

1

チェックサム1

28

q

1

チェックサム2

A5

最終更新