ワットモニターUSB TAP-TST10 解析

USB デバイス

Vendor ID 0x040b
Product ID 0x2201

HID 準拠デバイスに見える。

計測データ取得要求

エンドポイント 1 に投入できるコマンドには "\x02\x18\x0a" と "\x02\x19\x0a" の二つがある事が判っている。

コマンド機能Watt Monitor USB Program コマンド発行契機
\x02\x18\x0a全計測データ取得「計測データ」ボタンを押した際に発行
\x02\x19\x0a前回取得したデータより後に計測したデータのみ取得「計測データ」ボタンを押した後、一定時間経過後に発行

計測データ取得要求データダンプ (USBPcap.exe 使用)

+00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
 -----------------------------------------------
 1b 00 60 b8 d9 11 80 fa ff ff 00 00 00 00 09 00  ..`.............
 00 01 00 02 00 01 01 03 00 00 00 02 18 0a        ..............

オフセット内容設定値
+00-01hUSBPcap pseudoheader length-
+02-09hIRP ID-
+0a-0dhIRP USBD_STATUS-
+0e-0fhURB FunctionURB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
+10hIRP information
Direction
0x00
FDO -> PDO
+11-12hURB bus id-
+13-14hDevice address-
+15hEndpoint
Direction
0x01
OUT
+16hURB transfer typeURB_INTERRUPT (0x01)
+17-1ahPacket Data Length3
+1b-1dhData (Command)0x02 0x18 0x0a

コマンド "\x02\x18\x0a" 投入時データ

エンドポイント 0x82 からデータを取得

一行目
+00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10
 --------------------------------------------------
 01 09 22 01 2f 00 00 00 00 00 00 00 00 00 00 00 0a
オフセット 内容
+00h 0x01 固定?
+01h デバイス内部で前回計測した時間からの経過時間(分) 上記データでは9分
+02h デバイス内部で前回計測した時間からの経過時間(秒) 上記データでは34秒
+03-04h (BE) 計測データサイズ (計測データのみのサイズで全データのサイズでは無い)
+05-0fh 不明
+10h 0x0a の場合は継続データ有り? 0xfe の場合は継続データ無し?
二行目以降
+00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10
 --------------------------------------------------
 01 80 09 00 80 09 00 80 08 00 80 08 01 80 09 00 0a (継続データがある場合)
 01 80 00 00 fe fe fe fe fe fe fe fe fe fe fe fe fe (継続データが無い場合)

※一行目の計測データサイズはオフセット +01h〜+0fh のデータサイズの合計

オフセット内容
+00h0x01 固定?
+01-03h計測データ
全てのバイトが 0xfe の場合、その計測データは無効

data[0] & 0x80 == 0x80 の場合
消費電力(W) = ((data[0] & ~0x80) << 8) | data[1] (単位:0.1W)
data[0] & 0x80 == 0x00 の場合
消費電力(W) = (data[0] << 8) | data[1] (単位:1W)
積算電力量(kWh) = data[2] (単位:0.01kWh)
+04-06h同上
+07-09h同上
+0a-0ch同上
+0d-0fh同上
+10h0x0a の場合は継続データ有り? 0xfe の場合は継続データ無し?

コマンド "\x02\x19\x0a" 投入時データ

+00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10
 --------------------------------------------------
 01 80 00 00 fe fe fe fe fe fe fe fe fe fe fe fe fe (計測データがある場合)
 01 fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe (計測データが無い場合)

コマンド "\x02\x18\x0a" 投入時データの二行目以降と同じ

2013/11/13 更新

コマンド "\x02\x18\x0a" 投入時データの二行目以降のオフセット +01-03h の内容に data[0] & 0x80 == 0x00 の場合を追記