久しぶりにダイソーに行ったらUSB Type Cケーブルが売っていたので試しに買ってみた。
何種類かあったんだけど100円の5V3Aタイプにしてみた。2023年12月26日火曜日
ダイソーのUSB Type Cケーブルを買ってみた。
2023年12月9日土曜日
PJ-1103Aをtinytuyaで使ってみた。
前回登録したクランプ式電力計、PJ-1103AのデータをPythonから取ってみることに。tuyaのSmart Homeだけだとなんか使いにくいらしいし…
今回はThonnyを使ってPythonでtinytuyaライブラリを使用してワットチェッカーのデータを吸い出してみた。
まずはThonnyのシステムシェルからtinytuyaをインストール。Windowsのファイヤーウォールを一旦切った状態で
python -m tinytuya scan
をしてみる。するとデバイスが表示された。しかしLocal keyがないためデータが取得できない。iot.tuya.comで開発用アカウントを作ってやる必要があるっぽい。
登録したらCloudのCloud ServicesからIoT Coreを有効にして、CloudのDevelopmentで適当なプロジェクトを作成する。このときSmart Homeアプリのアカウントが日本になっている場合は"Western America Data Center"を選択する。
プロジェクトを開いたら右上のGuide ModeのCloseをクリックしてDevicesのLink App AccountでSmart HomeアカウントとQRコードでリンクさせる。これでデバイスのリストにWIFI dual meterが出てくるはず。
あとはpythonのシステムシェルに戻って
python -m tinytuya wizard
を実行して、先程のプロジェクトのAuthorization KeyとPJ-1103AのDevice IDをコピペ。サーバーはusと入力すればOK。そうするとJSON方式で色々表示される中、keyがゲットできるはず。ちなみにproduct_idはbbcg1hrkrj5rifsdで、modelはPJ1103Bになっていた。
あとはこれでPythonからデータが取れるようになった。
DPSとデータの対比表はこんな感じらしい。
これをベースに簡単なPythonツールを作成してみた。
# -*- coding:utf-8 -*- import tinytuya import tkinter import time import threading # 更新する間隔 INTERVAL = 3 d = tinytuya.Device('Device ID', '192.168.x.xxx', 'Local Key', version=3.4)
def poll(): while 1: data = d.status() #print('Device status: %r' % data) print(data["dps"]['112']/10) label.config(text="電圧:" + str(data["dps"]['112']/10) + "V") label1.config(text="周波数:" + str(data["dps"]['111']/100) + "Hz") label2.config(text="電流:" + str(data["dps"]['113']/1000 + data["dps"]['114']/1000) + "A") label3.config(text="(" + str(data["dps"]['113']/1000) + "A+" + str(data["dps"]['114']/1000) + "A)") label4.config(text="電力:" + str(data["dps"]['115']/10) + "W") time.sleep(INTERVAL) def start(): global app th = threading.Thread(target=poll)# スレッドインスタンス生成 th.start()# スレッドスタート # メインウィンドウ作成 app = tkinter.Tk() app.title("電力") app.geometry("500x500") label = tkinter.Label( app, text="0.00", width=12, font=("", 50, "bold"), ) label.pack(padx=10) label1 = tkinter.Label( app, text="0.00", width=12, font=("", 50, "bold"), ) label1.pack(padx=10) label2 = tkinter.Label( app, text="0.00", width=12, font=("", 50, "bold"), ) label2.pack(padx=10) label3 = tkinter.Label( app, text="0.00", width=12, font=("", 50, "bold"), ) label3.pack(padx=10) label4 = tkinter.Label( app, text="0.00", width=12, font=("", 50, "bold"), ) label4.pack(padx=10) start() app.mainloop()
今回は単純にリアルタイムデータを確認するだけだけど、ラズパイとかを使ってAmbientとかに蓄積しても面白いかも。
たしかにこのクランプ電流計、Local Keyを取得するのはちょっと面倒かもしれないけど、ラズパイとかでCTセンサを直接繋いで電力測定するよりも安全で楽かもしれない。内部ではHLW8112という交流の電圧や電流をSPI通信で取得できるICを使ってるみたいだけど、絶縁してラズパイにそのICを直結することを考えてもすごくコスパ高いと思う。