Comment on page
パルアプリ
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 |