WINGS
検索
⌃K

パルアプリ

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バイト