セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-04-25 現在

アリアアプリ

アリアアプリからデータを受信する

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

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

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

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

    :80000000CF00028201BAA201800607003400038135001205350401000000113008020D201130010204ED00000001800501000209D0010200020F347934[CR][LF]
    

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

    そのため、各センサーの値の場所とその抽出例をご説明します。
    その際、: を 0 文字目とします。

    データの位置の表記法

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

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

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

    [15:15+4]
    

    温湿度センサー

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

    データ位置   意味
    [103:103+4] 温度(符号付整数、単位は°Cの100倍(23.56°C→2356))
    [115:115+4] 湿度(符号無整数、単位は%の100倍(25.99%→2599))
    

    磁気センサー

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

    磁気センサーデータ意味
    磁気センサーのデータ意味
    00磁石が遠ざかった。
    01磁石のN極が近づいた。
    02磁石のS極が近づいた。
    80磁石が近くにない。(タイマーによる定期送信)
    81磁石のN極が近くにある。(タイマーによる定期送信)
    82磁石がS極が近くにある。(タイマーによる定期送信)

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

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

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

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

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

    以下は、温湿度と磁気センサーのデータを取得するPythonの対話モードでの実行例です。
    出力メッセージから、温度、湿度、照度の文字列を取り出し、数値に変換します。その際、そのままだと符号無の数値ですので、温度は符号付の数値に変換します。
    そのあと、センサーのデータを出力しますが、温度と湿度データは100倍されたデータですので、出力時に100で割った値を出力しています。
    また、磁気センサーのデータをシリアル出力から抜き出し、上表に従って磁気センサーが検出している状態に変換し、加速度データと磁気センサーの情報を標準出力しております。

    >>> t = ':80000000CF00028201BAA201800607003400038135001205350401000000113008020D201130010204ED00000001800501000209D0010200020F347934'
    >>> temp = int(t[103:103+4], 16) # 63文字目から4文字取り出し、整数値に変換
    >>> temp = (-65536 + temp) if temp >= 32768 else temp # 符号付き16ビット整数の対応
    >>> hum = int(t[115:115+4], 16)
    >>> print('temperature: %f, humidity: %f' % ( temp/100.0, hum/100.0 ))
    temperature: 25.120000, humidity: 38.920000
    >>> v = int(t[93:93+2], 16) # 93文字目から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]    CF        LQI
    [11:11+4]  0002      続き番号
    [15:15+8]  8201BAA2  送信元のシリアルID
    [23:23+2]  01        送信元の論理デバイスID
    [25:25+2]  80        センサー種別(80で固定)
    [27:27+2]  06        PAL基板バージョンとPAL基板ID(TWELITE ARIAは06)
    

    TWELITE ARIAのデータの判別方法

    親機・中継機アプリはTWELITE PALからだけではなく、様々なアプリのデータを受信することができるので、出力メッセージがどのアプリの出力か区別する必要があります。

    TWELITE ARIAの出力メッセージは、改行コード抜きで123文字(改行コードありでは125文字)で、ほかのセンサーパルなどのデータとは文字数が違うため、文字数で見分けると簡単です。
    ただし、シリアル通信アプリなどのように受信メッセージの文字数が決まっていないものもありますので、文字数だけでは見分けられない場合があります。

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

    • 1文字目が8であること
    • 15文字目が8であること
    • 25、26文字目が ‘80’ であること
    • 27、28文字目が ‘06’ であること

    TWELITE ARIAモード

    出力例

    :80000000CF00028201BAA201800607003400038135001205350401000000113008020D201130010204ED00000001800501000209D0010200020F347934
     ^^^^^^^1^2^^^3^^^^^^^4^5^6^7^8^^^^^^^9^^^^^a^^^^^^^b^^^^^^^c^^^^^^^d^^^e^^^^^^^f^^^g^^^^^^^h^i^^^^^^^j^^^k^^^^^^^l^^^m^n^o
    
    意味バイト数データ例備考
    1中継機シリアルID ​480000000中継されていない場合は80000000
    2LQI1CF大きいほど電波品質が良い
    3続き番号20002
    4送信元シリアルID48201BAA2
    5送信元LID101
    6センサー種別180TWELITE ARIAは80固定
    7PAL ID106TWELITE ARIAモードは06
    8センサーデータ数107
    9センサーデータ0(ヘッダ)400340003拡張バイトなし、符号なし1バイト、パケットプロパティが3バイト
    aセンサーデータ03813500タイマーイベントで送信した
    bセンサーデータ1(ヘッダ)412053504拡張バイトあり、符号なしLong、タイマーイベント情報
    cセンサーデータ1401000000タイマーが起床させた
    dセンサーデータ2(ヘッダ)411300802符号なし2バイト、電源電圧
    eセンサーデータ220D203360mV
    fセンサーデータ3(ヘッダ)411300102符号なし2バイト、ADC1
    gセンサーデータ3204ED1261mV
    hセンサーデータ4(ヘッダ)400000001拡張バイトなし、符号なし1バイト、磁気センサー
    iセンサーデータ4180

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

    jセンサーデータ5(ヘッダ)405010002拡張バイトなし、符号あり2バイト、温度
    kセンサーデータ5209D025.12°C
    lセンサーデータ6(ヘッダ)401020002拡張バイトなし、符号なし2バイト、湿度
    mセンサーデータ620F3438.92%
    nチェックサム11791~mまでのLRC
    oチェックサム21341~nまでのCRC8