

8月31日に公開されたMESHブロックの通信仕様をもとに、PythonでMESHブロックで検知した温度・湿度の取得を実装しようとしています。公式ドキュメントを参考に実装して、MESHブロック(温度・湿度)から下記の通り、通知を受け取ることはできました。

[code]

    b'\x01\x00\x00\x04\xe9\x00D\x002'
    
[/code]

温度に関しては、e9なので10進数に変換して233/10で23.3度と正しく取得できているようですが、湿度はDが返ってきました。

MESHアプリのほうで、確認すると湿度50％前後を計測しているので、正しく測定できていると思うのですが、上記の値はどのようにすれば、正しく10進数の値に変換できますでしょうか。


CC BY-SA 4.0
2022-11-30T23:49:52.160
92515
2022-12-01T11:02:23.890
2022-12-01T00:19:02.650
3060
55705
question
python
MESHブロックの通知から湿度の値を取り出したい


MESHブロックの知識はありませんが単に\x44(68)がDと表示されてるだけではないでしょうか。  
以下はPythonの対話モードでの実行結果です

[code]

    >>> b'\x44'
    b'D'
    
[/code]


CC BY-SA 4.0
2022-12-01T09:56:35.183
92522
2022-12-01T09:56:35.183
8324
92515
answer


MESHについては分からないので間違ってるかもだけど  
コメントからのドキュメントで [温度・湿度ブロック
(MESH-100TH)](https://developer.meshprj.com/hc/ja/articles/8286425847961)
の「状態通知」と判断します

[code]

    from struct import unpack, calcsize
    data = b'\x01\x00\x00\x04\xe9\x00D\x002'
    print(f"書式 {calcsize('<4BhhB')}, データ {len(data)}")
    unpack('<4BhhB', data)
    # 書式 9, データ 9
    # (1, 0, 0, 4, 233, 68, 50)
    
[/code]

参考: [struct ---
バイト列をパックされたバイナリデータとして解釈する](https://docs.python.org/ja/3/library/struct.html)


CC BY-SA 4.0
2022-12-01T11:02:23.890
92526
2022-12-01T11:02:23.890
43025
92515
answer