6月 022023
当社ではRS-WSUHAというWi-SUN通信USBドングルを発売することになりました。写真でもおわかりのようにROHM BP35C2とそっくりのジェネリック品です。実はこの度ROHM㈱からBP35C2の製造と販売を引き継ぐことになり後継の互換品を市場に提供することになりました。内蔵されているFirmwareやIDなどはROHM㈱とのライセンス契約に基づきBP35C2のものをそのまま引き継いでいますのでコマンドの仕様書などはROHM BP35C0のwebページからIDとPW(RS-WSUHAから読み出す必要があります)を入力してダウンロードして下さい。
今回は発売を記念してRS-WSUHAの簡単なアプリケーションを提供することとしました。身近でWi-SUNが一般的に使用されている対象物としては家庭のスマートメータ(積算電力計)があげられます。今回はそのスマートメータが使用しているBルートという通信経路にRS-WSUHAを接続して使用中の電力量を取り出す応用例を紹介します。本ブログではWindows11 PC/MacOSで動作するPython3のProgram例を紹介します。当社の別ページではNODE-REDでのProgram 例も紹介していますのでそちらも参照して下さい。
スマートメータのBルート開設
まず最初に相手がいないことにはどうにもなりませんので、住居についている積算電力計を見て下さい。銀色のアルミの円板がクルクル回っている電力計はスマートメータではありませんので、スマートメータに交換してもらう必要があります。電力計は法規で何年かおきに校正済の新しいものに交換されることに決められていますので最近はほとんどがスマートメータに交換済と思いますがまだの場合は地域の送配電会社(関西では関西電力送配電)に交換を依頼して下さい。費用は無料です。スマートメータが設置済もしくは交換してもらった後、BルートでアクセスするためにはBルートのIDとパスワードを送配電会社から教えてもらう必要があります。送配電会社にID/PWの取得申請を行うためには電話で受付窓口を聞き、電気料金の請求書(もしくは電力会社との契約書)に記載されている電力計の番号を申告すれば一週間くらいで書面が送られてきます。
RS-WSUHA-1のセットアップ
RS-WSUHAシリーズのF/WはROHMのライセンス品ですのでコマンド仕様書やHAN、Bルートで通信するためのサンプルスクリプト(Windows11のTeraTermのScript file)をROHMのwebからdownloadするためにはIDとPassWordが必要です。それらはRS-WSUHAに対してSKINFOコマンドを発行し応答文からID(4文字)とPW(4文字)を取り出して入力しなければなりません。
PC(Windows11)でこれらのIDとPWを取得する方法はwsuha_startguide.pdfを参照して下さい。Macユーザの方は下記の手順でIDとPWの取得、RS-WSUHAのパラメータの設定を行なってください。なお、下記の実行例はMacBook Pro(最後のintel model)とBig Sur V11.2.2上で行いましたが最近のmodelでも問題はないと思います。WindowsPCでTeraTermに慣れている方は(3)以降と同じようにSKVERから入力して頂いてもかまいません。
(1)最初にRS-WSUHAをUSBポートに接続せずにターミナル(ユーティリティ)を起動し下記のように入力して下さい。
$ ls -l /dev/tty.*
/tty/デバイスがlist表示されます。tty.bluetooth***などが表示されます。
(2)RS-WSUHAをUSBポート(HUB経由)に接続して下さい。
MacOSにはUSB-Serialコンバータのドライバが標準で含まれていますのでもう一度
$ ls -l /dev/tty.*
と入力すると/tty/デバイスがlist表示され、新しく
/dev/tty.usbserial-DO012LKA
のようにRS-WSUHAが追加されているのを確認して下さい。
(3)確認後
$ screen /dev/tty.usbserial-DO912LKA 115200
と入力するとRS-WSUHAに対するターミナル画面に切り替わります。
SKVER
と入力すると
EVER 1.5.2 OK
と応答が返ってきます。
(4)RS-WSUHAの設定を追加する。
Windows11_PC向けのwsuha_startguide.pdfの記述ではここまでですが、Bルートを使ってスマートメータから電力値を取り出すpythonプログラムを作成する場合、スマートメータからのEDATA(EcohNetのデータ電文)を扱いやすくしておくためにRS-WSUHAのF/Wの動作パラメータを設定しておきます。なお、これらのWで始まるコマンドは内蔵Flashメモリに設定値を書き込みますのでprogramに記述してはいけません。FLASHメモリの書き込み回数上限に達しないよう必ずTeratermやターミナル(MacOS)で手動で書き換えて下さい。書き換えを確認後(Rxxxコマンドで行う)は必要がない限りWxxxコマンドは実行しないようにして下さい。
受信したEDATA(bit列)を16進ASCIIに変換する機能をONにする
EDATAはバイナリ(bit列)で構成されていますが、スマートメータから受信したEDATA電文から数値などを抜き出す処理を行う場合bit列では扱いにくいので、RS-WSUHAのF/WがスマートメータからのEDATA bit列を16進ASCII表示に変換してUSBホスト(PC,Mac,Raspberry Piなど)に送り出してくれます。b’0010001010001000’が’2288’というように変換されます。ただし、USBホストからSKSENDTOコマンドでRS-WSUHA経由でスマートメータに送るEDATA電文はbit列で記述しなければなりませんのでこのコマンドには関係ありません。
ROPT<ret> まずこのコマンドで現在の設定値を読み出す。 OK 00 リターン値が00なので変換機能はOFF WOPT 01<ret> bit列->16進ASCII変換機能をONにする OK ROPT<ret> 確認のため OK 01 設定された
RS-WSUHA F/Wのフロー制御をONにする
また、Bルートでスマートメータから電力値を取り出すためのスクリプト例(TeraTerm用、1_HGW(DSE).ttl)では最初の方でフロー制御確認のためにRUARTコマンドを送って’OK 80’が返ってこなければWUARTコマンドでフロー制御有効に設定するよう記述されていますがこのコマンドもスクリプトやProgramからは外して手動で設定しておいた方がProgramがスッキリしてよいと思います。設定値80(b’10000000′)は「フロー制御有効、キャラクタ間インターバルなし、115200bps」を設定します。
RUART<ret> まずこのコマンドで現在の設定値を読み出す OK 00 リターン値が00なのでフロー制御はOFF WUART 80<ret> フロー制御をONにする。ボーレートは115200bpsのまま(default) OK RUART<ret> 確認のため OK 80 フロー制御がONに設定された
以上で、RS-WSUHAの動作確認や設定は終了です。スマートメータから電力値を取り出す方法はTeraTerm用のスクリプト(1_HGW(DSE).ttl)として提供されていますがHANでいろんな機器との通信などの部分が含まれていますがその中のスマートメータとの通信部分を参考にしながらpython3でprogramを作成することにします。前記のようにスマートメータに対するリクエストEDATAをバイナリ(bit列)で作成しなければなりませんが、スクリプト例では’HGWreq’と記載されているだけで電文の内容については全く記述されていません。Programを作成する前にこのEDATA電文について調べておく必要があります。
EDATA(ECOHNET DATA)電文について
EDATA電文に関しては「ECHONET Lite規格書 Version 1.12」
「第2部 ECHONET Lite通信ミドルウェア仕様書」
「第3章 電文構成(フレームフォーマット)」に詳しく記載されています。
「第2部 ECHONET Lite通信ミドルウェア仕様書」
「第3章 電文構成(フレームフォーマット)」に詳しく記載されています。
本稿ではスマートメータのBルートでの通信に使用する電文の作成例について説明します。
電文の形式には規定された形式1と任意フォーマットの形式2がありますがECOHNET Liteでは形式1をEDATAのフォーマットとして使用します。スマートメータとの通信に使用される電文は図1のようにEDATAの先頭にヘッダ部が4Bytes追加されています。先頭からEHD1,EHD2,TIDです。内容は図中の説明を参照して下さい。ECHONET Liteプロトコルの形式1を使用しますのでEHD1は0x10、EHD2は0x81とします。TID(2バイト)は要求電文とそれに応答する電文で同じIDを使用します。任意の値でOKですが0x0001などの値の方が後で扱いやすくなります。
電文の形式には規定された形式1と任意フォーマットの形式2がありますがECOHNET Liteでは形式1をEDATAのフォーマットとして使用します。スマートメータとの通信に使用される電文は図1のようにEDATAの先頭にヘッダ部が4Bytes追加されています。先頭からEHD1,EHD2,TIDです。内容は図中の説明を参照して下さい。ECHONET Liteプロトコルの形式1を使用しますのでEHD1は0x10、EHD2は0x81とします。TID(2バイト)は要求電文とそれに応答する電文で同じIDを使用します。任意の値でOKですが0x0001などの値の方が後で扱いやすくなります。
TIDに続くブロックがEDATAです。このブロックは可変長でフォーマットは図2のように定められています。先頭3バイトはSEOJ、続く3バイトはDEOJです。頭文字のS,DはそれぞれSource, Destinationを意味しますのでSEOJが送信元のEOJ、DEOJが受信側のEOJを示します。スマートメータはECOHNET Lite規格では「低圧スマート電力量メータ」として規定されていますので本稿ではEOJとして0x028801を使用します。したがって、スマートメータ宛の電文ではDEOJとして0x028801を使用し、スマートメータからの応答電文ではSEOJとして0x028801が使用されます。RS-WSUHA側はPCを含めてEOJを0x05FF01を使用します。0x05が「管理・操作関連機器クラスグループ」コード、0xFFが「コントローラクラス」コードです。3バイト目の0x01(インスタンスコード)は今回はスマートメータ、RS-WSUHAのどちらも1台だけですのでそれぞれ0x01とします。複数台ある場合はこのインスタンスコードを変更して区別します。
SEOJ、DEOJに続くESV(ECHONET Service Code)はスマートメータのプロパティ値(レジスタ)に対する設定、読み出しなどの動作を指定します。詳細は仕様書の「3.2.5 ECHONET Lite サービス(ESV)」を参照して下さい。今回はスマートメータから瞬時電力計測値(W単位)を読み出すRequestを発行するため0x62を使用します。スマートメータからの応答文のESVは0x62に対応した0x72が使用されます。プロパティ値(レジスタ)の指定はEPC(ECHONET Property Code)で、設定(書きこみESVが0x61など)する場合はPDCで指定したByte數のdetaをEDT部にsetします。複数のプロパティ値(レジスタ)に書き込み操作などを行う場合はこのEPC+PDC+EDTの組を必要な数だけ続け、組の数をOPCにセットします。瞬間電力計測値(1W単位)を指定するためのEPCは0xE7ですのでProgram例ではそれを使用しています。Requestの場合(ESV:0x62)はPDCは0x00(EDTなし)とし、EDT部は追加しません。
この電文(ヘッダを含め)はWSUHAに対してSKSENDTOコマンドの最後部に追加する必要があります。16進文字列ではなくバイナリのByteアレイ(bit列)でWSUHA1に渡さなければなりません。Pythonでバイナリ列を扱う方法はいろいろありますが今回は16進数値をbyter([ ])でバイト列として扱っています。なお、スマートメータからのERXUDP電文の最後部にもバイナリのEDATAが含まれていますが、これは最初に設定しておいたWOPT 1の効果で16進文字列にWSUHA内部で変換して送ってきます。それならSKSENDTOコマンドのEchobackもEDATA部も16進に変換してくれてもよさそうなものですが。
次回はPython3による瞬間電力計測値をスマートメータから取り出してwiget上に表示するprogram例を紹介します。
この記事で紹介した製品